我在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 = ...;
}
};