qt qml checkbox:当用户单击但未被q_属性绑定选中时,如何执行代码
我在qt中有一个复选框,我希望通过与代码关联的q_属性,也希望由用户qt qml checkbox:当用户单击但未被q_属性绑定选中时,如何执行代码,qt,qtquickcontrols,Qt,Qtquickcontrols,我在qt中有一个复选框,我希望通过与代码关联的q_属性,也希望由用户选中该复选框。当用户单击复选框时,我想运行一些代码。问题在于,当通过代码和用户输入选中复选框时,似乎会调用onChecked回调。此代码将涉及稍后由代码选中复选框,这将触发onChecked回调。Qt提供的回调如何最好地处理这种情况 如果上述内容没有意义,请参阅更多背景信息:此复选框通过网络连接控制机器人上的功能,但它还应显示该功能的状态,因为它可以自动启用或从以前的会话中启用。q_属性robotStatus.missionLo
选中该复选框。当用户单击复选框时,我想运行一些代码。问题在于,当通过代码和用户输入选中复选框时,似乎会调用onChecked回调。此代码将涉及稍后由代码选中复选框,这将触发onChecked回调。Qt提供的回调如何最好地处理这种情况
如果上述内容没有意义,请参阅更多背景信息:此复选框通过网络连接控制机器人上的功能,但它还应显示该功能的状态,因为它可以自动启用或从以前的会话中启用。q_属性robotStatus.missionLooping
由定期状态更新设置。当用户选中该复选框时,它应该触发网络调用以启用该功能,然后稍后将发生状态更新,该更新将看到该功能已启用并选中该复选框(即使已选中)
AppCheckBox.qml:
import QtQuick 2.15
import QtQuick.Controls 2.15
CheckBox
{
id: root
indicator: Rectangle
{
implicitWidth: utilities.dp(40)
implicitHeight: utilities.dp(40)
x: root.leftPadding
y: parent.height / 2 - height / 2
Rectangle
{
width: utilities.dp(20)
height: utilities.dp(20)
x: utilities.dp(10)
y: utilities.dp(10)
radius: utilities.dp(3)
color: theme.green
visible: root.checked
}
}
contentItem: Text
{
text: root.text
font: root.font
opacity: enabled ? 1.0 : 0.3
color: theme.white
verticalAlignment: Text.AlignVCenter
leftPadding: root.indicator.width + root.spacing
//font.pointSize: constants.coordinatesTextPointSize + 1
minimumPointSize: constants.minimalCoordinatesTextPointSize
}
}
ui.qml:
AppCheckBox
{
id: missionLoopingCheckbox
enabled: isConnected
checked: robotStatus.missionLooping
text: qsTr("Mission Looping")
}
您可以实现信号处理程序<当用户通过触摸、鼠标或键盘以交互方式切换可检查按钮时,会发出代码>切换
信号
下面我假设robotStatus.missionLooping是一个只读属性。您需要Q\u INVOKABLE
方法或slot函数来调用,例如robotApi.loopMission(bool)
,它通过网络调用robot,从而在循环开始/停止时使robotStatus.missionLooping属性更改为true/false
AppCheckBox
{
id: missionLoopingCheckbox
enabled: isConnected
checked: robotStatus.missionLooping
text: qsTr("Mission Looping")
onToggled: {
robotApi.loopMission(missionLoopingCheckbox.checked)
}
}
您可以实现信号处理程序<当用户通过触摸、鼠标或键盘以交互方式切换可检查按钮时,会发出代码>切换信号
下面我假设robotStatus.missionLooping是一个只读属性。您需要Q\u INVOKABLE
方法或slot函数来调用,例如robotApi.loopMission(bool)
,它通过网络调用robot,从而在循环开始/停止时使robotStatus.missionLooping属性更改为true/false
AppCheckBox
{
id: missionLoopingCheckbox
enabled: isConnected
checked: robotStatus.missionLooping
text: qsTr("Mission Looping")
onToggled: {
robotApi.loopMission(missionLoopingCheckbox.checked)
}
}
如果robot也在Qt中实现,则您的用例将非常适合于使用Qt远程对象、robot实现源对象和ui应用实现副本来实现。如果robot也在Qt中实现,则您的用例将非常适合使用Qt远程对象、robot实现源对象和ui应用实现副本来实现。