Qt GUI的响应能力

时间:2012-09-09 20:17:15

标签: qt qtgui

我在应用程序启动时在Qt GUI线程中做了很多活动(创建/预分配和隐藏超过一千个小部件,主要是作为运行时/初始化权衡,它是一个嵌入式系统,需要在它的过程中保持响应操作)。

响应式操作的目标已经实现 - 但现在我面临着使初始化响应更快的挑战。将初始化线程传递给工作线程不是一个选项 - 大多数CPU负载来自对QtGui的调用,而那些需要在主线程中进行。

所以,我想知道是否有一个选项可以控制应用程序来处理所有其他事件?做重绘等?

2 个答案:

答案 0 :(得分:4)

更干净,无需在processEvents()次调用时使用代码:将您的创建/预分配实现为插槽。使用封装状态机创建一个插槽(知道下一步该做什么),或者执行更多插槽,或者使用通用接口委托某些类,取决于您的设计和品味。每次完成对插槽的呼叫后,再次将呼叫作为排队连接发送给自己。

slots: void makeWidget();
signals: void widgetMade();
...
connect(this,SIGNAL(widgetMade()),this,SLOT(makeWidget()),Qt::QueuedConnection);

这样,您的窗口小部件创建将平等排队到其他GUI活动。显式的第5个参数限定符是必需的,默认Qt::AutoConnection将被解析为Qt::DirectConnection,因为您在同一个线程中。作为奖励,您可以实际执行初始化的非阻塞进度条,前提是您知道要初始化多少小部件。

答案 1 :(得分:0)

似乎我的GoogleFu已经抛弃了我一段时间了:

qApp->processEvents()

这会处理所有未完成的GUI事件 - 只需经常调用它就可以解决问题。