我已经创建了一个基于Qt的网络库,用于没有运行Qt事件循环的应用程序,而且不一定是Qt应用程序.这是通过QCoreApplication在每个答案的线程中创建一个实例来实现的.是否可以在不调用QApplication :: exec()的情况下创建本地事件循环?
这很好用,但它让Qt不高兴(我认为我担心我会尝试在主线程之外操作一个不起作用的GUI,但我不是),所以它会打印一个警告:WARNING: QApplication was not created in main() thread.
我想要压制那些否则将被打印到X11控制台的警告,并且最有可能导致我的用户输入一堆不必要的缺陷.但是,我只想压制这个错误,因为我qDebug出于某些合法目的使用并希望看到未来的警告.有没有办法做到这一点,就像某种Qt #pragma?
编辑:
在此之前提出了类似的问题:Qt控制台应用程序"警告:QApplication不是在main()线程中创建的",但答案基本上只是一个代码审查,没有任何有意义的想法来抑制警告.
有没有一种安全的方法可以在不调用QApplication :: exec()的情况下使用Qt?
我有许多不同的对象在多个资源上执行长期存在的进程(其中至少有一个与Web应用程序服务器通信).我正在制作一个GUI应用程序,提示用户在适当的时间输入这些不同的进程.我想让我的'流'逻辑 - 决定下一步做什么的逻辑 - 在一个地方而不是像对话类这样的GUI对象.我以为我可以这样做:
...
wait_dialog dlg;
dlg.setModal( false );
dlg.show(); // Should return...
netobject.start_long_lived_process_that_happens_on_other_thread( &completion_callback );
while ( !completion_callback_called() )
{
qApp->processEvents();
netobject.pump_callbacks();
magically_avoid_busywait_while_still_servicing_qt_somehow();
}
dlg.hide();
...
Run Code Online (Sandbox Code Playgroud)
从Qt的角度来看,这样安全吗?有一种"好"的实施方式magically_avoid_busywait_while_still_servicing_qt_somehow()吗?
我在这里要完成的是以最明确的方式编写我们的处理流程.我想要一个这样做的功能:
show_a_non_modal_wait_dialog()
start_some_processing_1()
wait_for_processing_1_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if ( cancelled ) return
show_a_non_modal_wait_dialog()
start_some_processing_2()
wait_for_processing_2_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if ( cancelled ) return
...
Run Code Online (Sandbox Code Playgroud)
我真正想要避免的是开始等待Qt小部件和窗口内的处理.此外,处理对象本身完全独立于Qt.我想我要做的是在单个函数中创建一个带有一些辅助回调和状态变量的控制器.