我在QT中有一个LCDNumber显示面板。我想通过从外部伺服电机接收的变量(速度)连续更新它的值

我有以下代码

HANDLE RS232Handle;
UCHAR Address = 0;
UCHAR Status = 0;
int Value = 0;
GetResult(RS232Handle, &Address, &Status, &Value);
printf("Result: Address=%d, Status=%d, Value=%d\n", Address, Status, Value);
ui->lcdNumber_TarRot_Status->display(Value);


所有这些行都必须运行才能获得适当的值。我已经研究过每x秒调用一次函数,并且尝试了永久运行的for循环,但实际上并没有按期望的那样工作。有适当的方法吗?

谢谢!

最佳答案

我不知道您如何尝试“每x秒调用一次函数”-很可能您使用了阻塞等待来执行此操作。而是从计时器调用它,而不会阻塞事件循环。

class MyClass : public QWidget {
  Q_OBJECT
  Ui::MyClass ui;
  HANDLE m_device = 0;
  QBasicTimer m_queryTimer;
  void timerEvent(QTimerEvent *event) override {
    if (event->timerId() == m_queryTimer.timerId())
      queryDevice();
  }
  void queryDevice() {
      UCHAR address = 0;
      UCHAR status = 0;
      int value = 0;
      GetResult(m_device, &address, &status, &value);
qDebug() << "Result: Address" << address << "Status" << status << "Value" << value;
      ui->lcdNumber_TarRot_Status->display(value);
    }
  }
  ...
public:
  explicit MyClass(QObject *parent = nullptr) : QObject(parent) {
    ui.setupUi(this);
    m_queryTimer.start(1000, this);
    ...
  }
  void openDevice() {
    ...
    m_device = ...;
  }
};

10-06 04:07