强制Qt自定义信号立即处理?

时间:2016-02-29 00:43:12

标签: c++ qt signals-slots

我对Qt及其信号/插槽机制有疑问 我创建了一个自定义小部件,并创建了一个自定义SIGNAL(ShowMessage)。此信号连接到SLOT,在主窗口的状态栏中显示消息(以及指定的超时)。

现在,我的类中有一个操作需要很长时间才能执行,而且它会阻止UI。我希望在开始操作之前emit我的信号,当它完成时,emit再次更新状态栏;像这样的东西:

emit ShowMessage(message, timeout);
// Do the long operation
emit ShowMessage(newMessage, timeout);

但我的问题是Qt似乎等到整个操作完成,并且只用newMessage更新状态栏。
有没有办法以某种方式“强制”立即处理我的信号,因为如果我想诉诸线程,那么我的生活将变得更加复杂!

1 个答案:

答案 0 :(得分:4)

  

有没有办法以某种方式"强迫"立即处理我的信号

,有。 :-)。 显示第一条消息后,请致电QCoreApplication::processEvents()。这会强制在呼叫点处理所有待处理事件。例如,

emit ShowMessage(message, timeout);
QCoreApplication::processEvents();
// Do the long operation
emit ShowMessage(newMessage, timeout);