qt - TextField 的动态验证器/运行时更改验证器

标签 qt qml

我有关于验证器的小问题/要求,我目前无法实现。

我有一个简单的 TextField (QtQuick.Control 2),它根据状态用不同的颜色装饰。它还应该根据当前状态使用不同的 RegExpValidator(带有另一个正则表达式)。

有谁知道我如何在运行时切换/更改/修改 RegExpValidator? (例如,当按下 PushButton 或触发 onEditingFinished-Event 时)

我当前的 qml 代码是:

import QtQuick 2.3
import QtQuick.Controls 2.2 as Quick
import QtQuick.Layouts 1.3

RowLayout {
    id: layout
    property color modeColor: "whitesmoke"
    property color modeTextColor: "gray"

    spacing: 0
    Rectangle {
        id: rect
        Layout.fillWidth: true 
        Layout.minimumWidth: 100 
        Layout.preferredWidth: 100
        Layout.maximumWidth: 100
        Layout.preferredHeight: layout.implicitHeight
        color: modeColor
        border.width: 1
        border.color: modeColor
        Text {
            id: recttext
            anchors.centerIn: parent
            text: "Enter key"
            color: modeTextColor
        }
    }

    Quick.TextField {
        id: input
        Layout.fillWidth: true
        placeholderText: "Text"
        background: Rectangle {
            color: "whitesmoke"
            border.width: 1
            border.color: modeColor
        }
        validator: RegExpValidator { regExp: /.*:$/ } 
        onEditingFinished: {
            recttext.text = input.text

            if (layout.state == "keyinput") {
                layout.state = "valinput"
                // should change to another regExp validator
            } else {
                layout.state = "keyinput"
                // should change to another regExp validator
            }
            input.clear()
        }
        Keys.onPressed: {
            if (event.key == Qt.Key_Escape) {
                    layout.state = "keyinput"
                    recttext.text = "Enter key"
                    input.clear()
            }
        }
    }

    states: [
        State {
            name: "keyinput"
            PropertyChanges { target: layout; modeColor: "whitesmoke"; modeTextColor: "gray" }
        },
        State {
            name: "valinput"
            PropertyChanges { target: layout; modeColor: "red"; modeTextColor: "white" }
        }
    ]
    state: "keyinput"
}

最好的问候,克里斯

编辑:
最终目标是用于输入键值对的输入行(我可以将特定的 RegExpValidator 用于特定的键。)

在这里它应该使用 RegExpValidator 来输入 key ,例如“作者:” + 按 Enter(键输入模式)
EnterKey #

切换到 valueinput-mode 后,它应该使用另一个 RegExpValidator:
KeyEntered

顺便提一句。这是一个桌面应用程序:)

最佳答案

我希望这可以帮助你!

property var valid1 : IntValidator { bottom:0; top: 2000}
property var valid2 : IntValidator { bottom:2000; top: 4000}

...
validator: if(condition) { valid1 }
else { valid2 }

关于qt - TextField 的动态验证器/运行时更改验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48620958/

相关文章:

c++ - 将 bool 转换为 QString

c++ - 对 `qInitResources_systray()' 的 undefined reference

c++ - QTreeWidget选择点击版并双击

qt - 如何注册以下数据类型以允许序列化?

qt - QML 中的自定义附加属性

linux - QtQuick : Module is not installed

qml - 手动更新/重新绘制项目

c++ - 从需要 QImage 或 QPixmap 的 QML 调用插槽

qt - 列数可变的 QML Repeater 和 QML Grid Layout

qt - 在数组元素上使用绑定(bind)时出现奇怪的绑定(bind)行为