我有一个CLI应用程序,正在扩展它以提供一个用户界面以帮助其正常使用,并且正在使用Qt-4.8.3。

该应用程序连接到IRC服务器,并且每个连接都驻留在其自己的接收数据的线程中。运行在不同线程中的解析器然后处理数据并做出相应的反应-创建通道,添加用户等。

我一直在浏览文档,只是无法确定(或真正看到)在我的实例中更新UI的最有用的方法-我应该创建一个继承自QThread的类并运行该类,并进行一些技巧QFuture和QtConcurrent,创建一个自定义结构并将其填充到UI线程,使用customEvent(),还是总体上有更好的方法?代码易读性和性能是最高要求。

我目前拥有的代码可以完美运行,但是自然地在解析器线程中创建新的QWidget会立即中断,通知它不是UI线程。

我正在使用一个类(此刻继承QObject并提供信号+插槽功能)在QApplication上运行exec,并且还包含服务器,通道,用户等的创建功能。

如果需要,我可以发布一些代码,但是有很多,而且我不确定它是否真的有用。

最佳答案

做到这一点的规范方法是创建QObject / QThread对(如果要在同一个线程中运行多个函数,则可以创建多个QObject和一个QThread。)您可以将QObject子类化,创建一个QThread并移动您的对象,而不是QThread的子类。使用moveToThread()将该线程的QObject子类实例。 QThread的预期用途是作为操作系统线程功能的接口,而不是作为运行代码的容器。 (请参见http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation)。

当然,与GUI的所有通信都必须使用信号和插槽进行。

关于c++ - Qt4与UI线程的接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13332859/

10-11 22:55
查看更多