Qt中的全局变量声明

时间:2012-08-29 14:08:21

标签: multithreading qt4 qtnetwork

我在Qt中创建了一个Gui线程和一个QTcpSocket线程。我想访问数据
从QTcpSocket线程到Gui线程。怎么解决呢? 我是否需要声明一些全局变量以及如何?

2 个答案:

答案 0 :(得分:0)

最简单的方法是通过信号插槽连接进行通信。每个线程中都有一个QObject。发送对象有一个信号,它连接到另一个线程中接收对象的插槽。

在此设置中,确保连接两端的对象都配置为存在于正确的线程中。您可能需要致电QObject::moveToThread()。 QObject还有一个属性,您可以在其中获取当前线程(在本例中为了调试目的)。

然后像往常一样建立信号槽连接。由于两个对象都在不同的线程中,当触发信号时,槽调用事件将被放置在接收标志的事件循环中。 Qt文档中对此进行了解释,查找Qt::QueuedConnection

答案 1 :(得分:0)

QTcpSocket是从gui线程创建的 所以在这一点上,gui线程有一个指向套接字对象的指针 然后它在gui中的插槽和插槽中的信号之间建立连接 在socket对象中,只要你获得数据,你只需发出一个包含数据的信号,这将由gui线程获取。

您可以非常有效地通过信号/插槽传递任何Qt类型,例如QString,QByteArray(或原始指针)。如果线程之间的信号也是自动处理的细节。