gpt4 book ai didi

c++ - QT qml 按钮虽然被禁用但发出信号被点击

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:43 24 4
gpt4 key购买 nike

我正在开发适用于 Android 的 QT Quick Controls 2 应用程序,并使用 Qt 蓝牙与设备进行通信。通过单击按钮(使用 onClicked() 信号),应用程序调用我的 c++ 类的一个函数来进行蓝牙通信。它向设备发送命令并等待应答。到目前为止它运行良好。

现在我的问题:单击时我禁用按钮,调用蓝牙功能,然后再次启用按钮,以防止在等待答案时多次单击,但是,按钮在等待时发出 onClicked() 信号,尽管它启用的属性为 false。

当蓝牙对话框完成后我没有启用该按钮时,它只能单击一次(如预期的那样),但我希望再次启用它。

多次发射信号会导致硬件后端出现相关问题。

知道如何解决这个问题吗?

按钮的 onClicked() 信号:

    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 + "\r\n");
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;
}
}

这里我们禁用按钮然后发出信号。在此信号的插槽中,您可以再次使用工作启用按钮完成后端工作。希望这会有所帮助。

关于c++ - QT qml 按钮虽然被禁用但发出信号被点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47014997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com