我希望在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
始终被禁用。我怎么解决它?
答案 0 :(得分:1)
Action
通过同步绑定到的所有Item
的状态来工作。文档说:
在应用程序中,可以通过菜单,工具栏按钮和键盘快捷键调用许多常用命令。由于用户希望以相同的方式执行每个命令,因此无论使用何种用户界面,将每个命令表示为操作都很有用。
操作可以绑定到菜单项和工具栏按钮,它会自动保持同步。例如,在文字处理器中,如果用户按下粗体工具栏按钮,将自动检查粗体菜单项。
从这个意义上说,Action
属性规则它所绑定的Item
的属性,而不是相反。启用Action
后,所有它所连接的Item
也会启用。因此,启用条件应移至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
}
}
}