我对Qt及其信号/插槽机制有疑问
我创建了一个自定义小部件,并创建了一个自定义SIGNAL
(ShowMessage)。此信号连接到SLOT
,在主窗口的状态栏中显示消息(以及指定的超时)。
现在,我的类中有一个操作需要很长时间才能执行,而且它会阻止UI。我希望在开始操作之前emit
我的信号,当它完成时,emit
再次更新状态栏;像这样的东西:
emit ShowMessage(message, timeout);
// Do the long operation
emit ShowMessage(newMessage, timeout);
但我的问题是Qt似乎等到整个操作完成,并且只用newMessage
更新状态栏。
有没有办法以某种方式“强制”立即处理我的信号,因为如果我想诉诸线程,那么我的生活将变得更加复杂!
答案 0 :(得分:4)
有没有办法以某种方式"强迫"立即处理我的信号
是,有。 :-)。
显示第一条消息后,请致电QCoreApplication::processEvents()
。这会强制在呼叫点处理所有待处理事件。例如,
emit ShowMessage(message, timeout);
QCoreApplication::processEvents();
// Do the long operation
emit ShowMessage(newMessage, timeout);