QtQuick中的文本选择

时间:2019-11-18 20:15:32

标签: qt qml qt-quick

我正在为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;
        }

    }

}

1 个答案:

答案 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";
        }
...
}

很明显,如果选择的对象不是第一个字符,则需要对该策略进行一些调整。