首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与UI线程的Qt4接口

与UI线程的Qt4接口
EN

Stack Overflow用户
提问于 2012-11-12 00:01:53
回答 2查看 71关注 0票数 0

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

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

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

我现在的代码运行得很好,但是在解析器线程中创建一个新的QWidget会立即中断,因为通知它不是UI线程。

我用来在QApplication上运行exec的只有一个类(目前,它继承了QObject并提供了signals +插槽功能),还包含了服务器、通道、用户等的创建函数。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-12 00:13:14

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

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

票数 4
EN

Stack Overflow用户

发布于 2012-11-12 00:13:43

这种情况听起来很常见。它只是将处理过的数据从线程向上转发到主线程以进行UI更新的基本解决方案。

要做到这一点,最简单的方法是使用信号/槽机制。您的主线程应该连接到来自解析器的信号。当数据在解析器中准备就绪时,只需使用您选择使用的数据结构发出一个信号。数据结构只是满足您的数据通信需要的任何内容。只是一个结构或你想要的任何东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13332859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档