我正在为3D打印切片机Cura的软件插件编写一个对话框。当用户对其文件进行切片时,它会弹出一个对话框来命名文件,然后再将其上传到3D打印机。 python脚本以“打印名称-material-otherinformation.gcode”格式生成名称。现在,在加载对话框时,它将突出显示整个文本字段,但末尾带有.gcode扩展名。我希望它默认情况下仅突出显示该文本字段的一部分,即打印名称部分。我很容易以整数的形式返回该部分的长度并将其传递给QML文件。我绝对是QML的业余爱好者,但似乎select函数应该能够处理此问题,但我无法弄清楚用法。任何帮助或指示,将不胜感激!
这是代码的简化版本。我想做的是为此添加一些内容,以便在对话框出现时仅突出显示“单词1”。
import QtQuick 2.1
import QtQuick.Controls 1.1
import QtQuick.Dialogs 1.2
import QtQuick.Window 2.1
import UM 1.1 as UM
UM.Dialog
{
id: base;
minimumWidth: screenScaleFactor * 400
minimumHeight: screenScaleFactor * 120
Column {
anchors.fill: parent;
TextField {
objectName: "nameField";
id: nameField;
width: parent.width;
text: "word1 - word2 - word3.gcode";
maximumLength: 100;
}
}
}
答案 0 :(得分:1)
这只是何时使用TextInput::select()
方法的问题。可以在对话框或文本字段的Component.onCompleted:
中,例如:
UM.Dialog
{
...
property int selectionLength: 0
Component.onCompleted: nameField.select(0, selectionLength);
...
TextField {
id: nameField;
text: "word1 - word2 - word3.gcode";
}
...
}
如果selectionLength
在创建对话框后可以更改,那么我将创建一个单独的函数,该函数可以从不同事件中调用,甚至可以直接调用:
UM.Dialog
{
...
property int selectionLength: 0
Component.onCompleted: select(selectionLength);
onSelectionLengthChanged: select(selectionLength);
function select(len) { nameField.select(0, len); }
...
TextField {
id: nameField;
text: "word1 - word2 - word3.gcode";
}
...
}
很明显,如果选择的对象不是第一个字符,则需要对该策略进行一些调整。