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

时间:2014-03-12 09:15:52

标签: c++ multithreading qt

我是Qt的新手,我真的坚持使用线程。我知道这是多次回答的问题,但我无法弄清楚如何解决我的问题。我有几个标签的小部件应用程序,我有一个从串口读取数据的类。我需要不断读取数据并在标签中显示它们。我在Qt中找到了许多关于线程的不同答案,但我无法让它们中的任何一个工作。任何人都可以指出我正确的方向。

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

串口类:

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)来显示数据。当我使用这个按钮点击ti工作,但我想关闭它循环并连续读取数据。

1 个答案:

答案 0 :(得分:2)

标签有可以从任何线程using 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]);