QML小部件的Enabled属性被附加的操作阻止



我想在TextField有可接受的文本时启用按钮(我使用的是validator),并且此代码运行良好:

import QtQuick 2.3
import QtQuick.Controls 1.2
ApplicationWindow {
    visible: true
    width: 400
    height: 100
    id: mainWindow
    property int _buttonSize: 30
    property int _interval: 10
    TextField {
        y: _interval
        width: parent.width
        height: _buttonSize
        id: ipInput
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        placeholderText: "IP"
        validator: RegExpValidator
        {
            regExp:/^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5])).){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$/
        }
    }
    Button {
        enabled: ipInput.acceptableInput
        id: go
        anchors.horizontalCenter: parent.horizontalCenter
        y: ipInput.y+_buttonSize+_interval
        width: parent.width
        height: _buttonSize
        text: "GO"
    }
}

因此,我将Action添加到这个Button:中

Button {
    enabled: ipInput.acceptableInput
    id: go
    anchors.horizontalCenter: parent.horizontalCenter
    y: ipInput.y+_buttonSize+_interval
    width: parent.width
    height: _buttonSize
    text: "GO"
    action: goAction
    Action {
        id: goAction
        shortcut: "Enter"
        enabled: go.enabled && go.visible
        onTriggered: {
            console.log("good")
        }
    }
}

现在Button始终处于禁用状态。我该怎么修?

Action通过同步它们所绑定的所有Item的状态来工作。文件上写着:

在应用程序中,许多常见命令可以通过菜单、工具栏按钮和键盘快捷键调用。由于用户期望每个命令都以相同的方式执行,因此无论使用何种用户界面,将每个命令表示为一个操作都很有用。

操作可以绑定到菜单项和工具栏按钮,它将自动保持它们的同步。例如,在文字处理器中,如果用户按下粗体工具栏按钮,则会自动选中粗体菜单项。

从这个意义上说,Action的属性规则于它所绑定的Items的属性,反之亦然。当启用Action时,所有与其相连的Items也将启用。因此,启用条件应该移动到Action

这是您代码的重新访问版本。我添加了另一个Button来强调Action的功能。在这里,当满足条件时,两个Button都会自动启用,因为它是相关的Action

import QtQuick 2.3
import QtQuick.Controls 1.2
ApplicationWindow {
    visible: true
    id: mainWindow
    Column {
        spacing: 10
        TextField {
            width: 400
            height: 40
            id: ipInput
            horizontalAlignment: TextInput.AlignHCenter
            placeholderText: "IP"
            validator: RegExpValidator {
                regExp:/^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5])).){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$/
            }
        }
        Action {
            id: goAction
            shortcut: "Enter"
            enabled: ipInput.acceptableInput
            onTriggered: {
                console.log("good")
            }
        }
        Button {
            id: go
            width: 400
            height: 40
            text: "GO"
            action: goAction
        }
        Button {
            id: go2
            width: 400
            height: 40
            text: "GO2"
            action: goAction
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新