【发布时间】:2016-02-29 08:46:34
【问题描述】:
我对 Qt 及其信号/插槽机制有疑问。
我创建了一个自定义小部件,并创建了一个自定义SIGNAL (ShowMessage)。此信号连接到SLOT,它在我的主窗口的状态栏中显示消息(以及指定的超时)。
现在,我的班级中有一个操作需要很长时间才能执行,并且它阻塞了 UI。我希望在开始操作之前emit我的信号,当它完成后,emit再次更新状态栏;像这样:
emit ShowMessage(message, timeout);
// Do the long operation
emit ShowMessage(newMessage, timeout);
但我的问题是Qt似乎一直等到整个操作完成,并且只用newMessage更新状态栏。
有没有办法以某种方式“强制”立即处理我的信号,因为如果我想求助于线程,那么我的生活会变得更加复杂!
【问题讨论】:
-
这是什么长操作?为什么很难将其移至新线程?
-
您是否使用 Qt::DirectConnection 进行连接? - 这应该确保您的信号已经被立即处理。如果不是,那么您应该使用调试器单步执行并查看发生了什么。我假设这一切都发生在同一个 GUI 线程中?
-
抱歉,我不明白您所说的
Qt::DirectionConnection是什么意思。我是 Qt 新手,我将它用作我的 OpenGL 绘图的容器。 -
@thuga 长操作实际上是 OpenGL 调用加载模型(并缓冲其数据);我不确定如何在单独的线程中完成
标签: c++ qt signals-slots