【问题标题】:QT qml Button emits Signal clicked although disabledQT qml按钮发出信号虽然被禁用
【发布时间】:2017-10-30 12:14:43
【问题描述】:

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

现在我的问题: 单击时禁用按钮,调用蓝牙功能,然后再次启用按钮,以防止在等待应答时多次单击,但是,尽管其属性 enabled 为 false,但按钮在等待时发出 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;
}

【问题讨论】:

标签: c++ qt qml


【解决方案1】:

我没有在蓝牙上工作,但我在使用 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;
    }
}

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

【讨论】:

  • 它不仅仅是一种封装吗?
【解决方案2】:

禁用单击按钮。但是从外部启用按钮。

Button {
  id: myButton
  onClicked: {
      enable = false
      worker.doAction()
  }
}

Worker {
  id: worker
  onDoAction: {
      // do something
      button.enable = true
  }
}

顺便说一句:不需要用 qoutes 包围项目的 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-05
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多