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

Far*_*zad 2 c++ qt signals-slots

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

现在,我的班级中有一个操作需要很长时间才能执行,并且它阻塞了UI。我希望emit在开始操作之前发出信号,完成操作后,emit它会再次更新状态栏。像这样的东西:

emit ShowMessage(message, timeout);
// Do the long operation
emit ShowMessage(newMessage, timeout);
Run Code Online (Sandbox Code Playgroud)

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

Whi*_*TiM 5

有没有办法以某种方式“强制”立即处理我的信号

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

emit ShowMessage(message, timeout);
QCoreApplication::processEvents();
// Do the long operation
emit ShowMessage(newMessage, timeout);
Run Code Online (Sandbox Code Playgroud)