QT qml 按钮发出信号单击,尽管已禁用
QT qml Button emits Signal clicked although disabled
我正在开发适用于Android的QT Quick Controls 2应用程序,并使用Qt蓝牙与设备进行通信。通过单击按钮(使用onClicked()
信号),应用调用我的 c++ 类的函数进行蓝牙通信。它将命令发送到设备并等待应答。到目前为止,它运行良好。
现在我的问题:我在单击时禁用该按钮,调用蓝牙功能,然后再次启用该按钮,以防止在等待答案时多次单击,但是,该按钮在等待时发出onClicked()
信号,尽管其启用的属性为 false。
当我在蓝牙对话框完成后不启用该按钮时,它只能单击一次(如预期的那样),但我希望再次启用它。
信号的多次发射会导致硬件后端出现相关问题。
知道如何解决这个问题吗?
按钮点击() 信号:
bEdit.onClicked: {
bEdit.enabled = false;
btConnect.fill("1", "30");
bEdit.enabled = true;
}
蓝牙写入和读取:
unsigned int Bluetooth::fill(QString slot, QString volume)
{
QString output = ("CK Fill " + slot + " " + volume + "rn");
QByteArray baOutput = output.toLatin1();
static const QString serviceUuid(QStringLiteral("00001101-0000-1000-8000-00805F9B34FB"));
socket->connectToService(QBluetoothAddress("98:d3:32:20:46:b9"), QBluetoothUuid(serviceUuid), QIODevice::ReadWrite);
socket->write(baOutput);
QString input = "";
while(input == "")
{
input = socket->readAll();
}
qDebug() << input;
return 0;
}
我没有
在蓝牙上工作,但是在使用QT QML处理REST API时遇到了同样的情况。您的按钮单击信号未禁用,因为在更改按钮的可见性属性后不会调用 qt 事件循环。您可以尝试以下使用信号/插槽的解决方法。
ApplicationWindow {
id:"root"
signal activated()
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Button{
id: "button"
text : "Button"
visible : true
enabled : true
onClicked: {
button.enabled=false;
root.activated()
}
}
onActivated:{
btConnect.fill("1", "30");
button.enabled=true;
}
}
在这里,我们禁用按钮然后发出信号。在此信号的插槽中,您可以再次完成工作启用按钮后进行后端工作。希望这有帮助。
禁用单击时的按钮。但是从外部启用按钮。
Button {
id: myButton
onClicked: {
enable = false
worker.doAction()
}
}
Worker {
id: worker
onDoAction: {
// do something
button.enable = true
}
}
顺便说一句:没有必要用 qoutes 包围项目的 id。
相关文章:
- ImGui 在单击按钮后冻结
- 如何在单击按钮FLTK的确切时刻获得小部件的值
- 如何使linedit准备好在单击按钮时键入
- 如何通过单击按钮在QTextEdit中显示文本?
- 通过单击按钮更改标签 GTK C.
- Qt在单击按钮时调用Child-Window
- 如何使 UI 对象仅在单击按钮后显示在对话框中
- Qt C++单击按钮的事件
- 如何使用C++禁用窗口上的右键单击按钮
- 事件仅在单击按钮时检查
- 右键单击按钮GTKMM-3.0的信号
- 如何通过单击按钮在窗口上生成对象
- 单击按钮后,如何在QT中更改窗口中的信息
- 单击按钮时控制qt中的循环
- 尝试在单击按钮时捕获编辑框中的文本,然后显示到另一个编辑框
- 单击按钮时,全局变量包含垃圾
- 单击按钮后对QML矩形的颜色设置动画
- 正在检测何时单击按钮?[C++,WinAPI]
- 单击按钮时显示另一个 UI 文件
- 如果我单击按钮,则在 MFC 中调用函数