qt - qt qml 复选框:当用户单击但未通过 q_property 绑定检查时如何执行代码
问题描述
我在 qt 中有一个复选框,我想checked
通过与代码绑定的 q_property 来使用它,但也可以由用户使用。当用户单击复选框时,我想运行一些代码。问题是,当通过代码和用户输入检查复选框时,似乎调用了 onChecked 回调。此代码将涉及checked
稍后由代码生成的复选框,这将触发 onChecked 回调。Qt 提供的回调如何最好地处理这种情况?
如果上述内容没有意义,请获取更多背景信息:此复选框通过网络连接控制机器人上的功能,但它还应显示该功能的状态,因为它可以自动启用或从以前的会话启用。q_propertyrobotStatus.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")
}
解决方案
您可以实现onToggled信号处理程序。toggled
当用户通过触摸、鼠标或键盘交互切换可检查按钮时,会发出信号。
我在下面假设 robotStatus.missionLooping 是只读属性。您需要Q_INVOKABLE
调用方法或槽函数,例如robotApi.loopMission(bool)
通过网络调用机器人,进而导致robotStatus.missionLooping 属性在循环开始/停止时更改为真/假。
AppCheckBox
{
id: missionLoopingCheckbox
enabled: isConnected
checked: robotStatus.missionLooping
text: qsTr("Mission Looping")
onToggled: {
robotApi.loopMission(missionLoopingCheckbox.checked)
}
}
推荐阅读
- python - Matplotlib Legend 未出现在 3D 散点图中
- tensorflow - 为 Tensorflow OD api 生成 TFRecord 的问题
- hadoop - 如何在访问 ambari 资源管理器作业历史记录页面时修复 500 错误?
- typescript - 我需要遍历一个复杂的 JSON ARRAY 对象,以便使用带有 Typescript 的 LODASH 仅返回两个项目
- pycharm - PyCharm 显示来自某些不存在的检查点文件的重复代码警告?
- python - 从数据框 pandas python 中替换 '()'
- android - RecyclerView Firebase 中的图像微调器
- java - 如何在java中跟踪下载内容的大小
- authentication - 将 NestJs Passport 配置提取到 npm 包中
- go - 通过反射在运行时按名称动态实例化结构