[英]QT qml Button emits Signal clicked although disabled
我正在開發適用於Android的QT Quick Controls 2應用程序,並使用Qt Bluetooth與設備進行通信。 通過單擊按鈕(使用onClicked()
信號),應用程序調用我的c ++類的功能進行藍牙通信。 它將命令發送到設備並等待答復。 到目前為止它運作良好。
現在我的問題:我點擊時禁用按鈕,調用藍牙功能,然后再次啟用按鈕,以防止在等待答案時多次點擊,但是,按鈕會在等待時發出onClicked()
信號,盡管其屬性已啟用假。
當藍牙對話框完成后我沒有啟用按鈕時,它只能被點擊一次(如預期的那樣),但我希望它再次啟用。
信號的多次發射導致硬件后端的相關問題。
知道如何解決這個問題嗎?
按鈕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;
}
}
這里我們禁用按鈕然后發出信號。 在再次完成工作啟用按鈕后,您可以在此信號的插槽中執行后端工作。 希望這可以幫助。
單擊時禁用該按鈕。 但是從外面啟用按鈕。
Button {
id: myButton
onClicked: {
enable = false
worker.doAction()
}
}
Worker {
id: worker
onDoAction: {
// do something
button.enable = true
}
}
順便說一句:沒有必要用qoutes包圍項目的id。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.