簡體   English   中英

QT qml按鈕發出信號點擊雖然已禁用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM