在Qt中设置线程中的小部件标签文本

Set widget label text in a thread in Qt

本文关键字:标签 小部 文本 线程 Qt 设置      更新时间:2023-10-16

我是Qt的新手,我真的被线程困住了。我知道这个问题已经被回答过很多次了,但是我不知道如何解决我的问题。我有几个标签的小部件应用程序,我有一个类,从串行端口读取数据。我需要连续读取数据并在标签中显示它们。我在Qt中找到了许多关于线程的不同答案,但我不能让他们中的任何一个工作。谁能给我指个正确的方向?

这段代码大致显示了我想要实现的目标:

串口class:

SerialPort *port;
int value1; 
int value2;
int value3;
void Port::ReadData()
{
   // First I send data to serial port as a QByteArray
   QByteArray data = port.readAll();
   value1 = data[0];
   value2 = data[1];
   value3 = data[3];
   // Of course it's not really like this but I process data and assign them to    
      variables       
}

变量value1, value2和value3是公共的,我使用label1->setText(portClass.value1)来显示数据。当我使用这个按钮点击它的工作原理,但我想关闭它的循环和连续读取数据。

标签有插槽,你可以使用invokeMethod从任何线程调用:

QMetaObject::invokeMethod (label1, "setText",
                           Q_ARG(QString,data[0]);
QMetaObject::invokeMethod (label2, "setText",
                           Q_ARG(QString,data[1]);
QMetaObject::invokeMethod (label3, "setText",
                           Q_ARG(QString,data[2]);