gpt4 book ai didi

qt - Qt GUI 的响应性

转载 作者:行者123 更新时间:2023-12-04 18:12:29 34 4
gpt4 key购买 nike

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

响应式操作的目标已经实现 - 但现在我面临着使初始化更具响应性的挑战。将初始化线程化到工作线程不是一种选择——大部分 CPU 负载来自对 QtGui 的调用,而这些负载需要在主线程中进行。

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

最佳答案

更简洁,无需在代码中添加 processEvents()调用:将您的创建/预分配实现为插槽。让它成为一个带有封装状态机的插槽(知道接下来要做什么),或者做更多的插槽,或者委托(delegate)给一些具有通用接口(interface)的类,这取决于你的设计和品味。每次完成对插槽的调用后,再次将调用作为排队连接发布给自己。

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

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

关于qt - Qt GUI 的响应性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12342602/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com