QtQuick 中的文本选择

Text Selection in QtQuick

我正在为 Cura(一种 3D 打印切片器)的软件插件编写一个对话框。当用户切片他们的文件时,它会弹出一个对话框来命名文件,然后再将其上传到 3D 打印机。 python 脚本以 "print name - material-otherinformation.gcode" 格式生成名称 现在,当对话框加载时,它会突出显示整个文本字段,除了最后的 .gcode 扩展名。我希望它默认只突出显示该文本字段的一部分,即打印名称部分。我很容易 return 该部分的长度作为整数并将其传递给 QML 文件。我绝对是 QML 的业余爱好者,但似乎 select 函数应该能够处理,但我无法弄清楚用法。如有任何帮助或指点,我们将不胜感激!

这是代码的简化版本。我想做的是为此添加一些内容,以便在出现对话框时仅突出显示 "word 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;
        }

    }

}

只是何时使用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";
        }
...
}

显然,如果选择不是从第一个字符开始,则需要对此策略进行一些调整。