显示MessageBox时,父窗口操作暂停

时间:2015-11-13 05:53:40

标签: c++ qt qmessagebox

我有一个Qt前端应用程序,它连接到后面 终端服务器在另一台机器上。它不断发送心跳消息,告知它还活着。

问题是当显示QMessageBox时(使用QMessageBox::warning(...)),它会挂起活动的 父申请,导致错过发送心跳,这 最终由于心跳未命中数超过而导致断线。

如果显示错误消息,则要求禁止用户与其他窗口进行交互。

最有效和最方便的方法是什么?

2 个答案:

答案 0 :(得分:1)

如果您发送消息并在主线程中执行一些后台操作,则可以获得一些窗口"冻结"。在另一个线程中完成所有后台操作会更好。

如果你在后台发送的消息就是你所做的,那么使用定时器就足够了,因为QNetworkAccessManager异步执行,而不会阻塞当前的线程。

  

QNetworkAccessManager有一个异步API。当调用上面的replyFinished插槽时,它所采用的参数是包含下载数据的QNetworkReply对象以及元数据(标题等)。

答案 1 :(得分:1)

创建QMessageBox::warning()的实例,而不是使用QMessageBox,并使用::open()方法显示它。与::warning()不同,此功能不会阻止您的应用程序。

确保将QMessageBox的父级设置为您的窗口,否则它将无法阻止用户与窗口进行交互。