0

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

问题是当 QMessageBox 显示(使用QMessageBox::warning(...))时,它会暂停父应用程序的活动,从而导致错过发送心跳,最终导致由于心跳错过计数超出而导致断开连接。

要求是在显示错误消息时禁止用户与其他窗口交互。

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

4

2 回答 2

1

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

确保将 QMessageBox 的父级设置为您的窗口,否则不会阻止用户与窗口的交互。

于 2015-11-13T11:58:18.667 回答
1

如果您发送消息并在主线程中做一些背景工作,您可以获得一些窗口“冻结”。最好在另一个线程中完成所有背景工作。

如果发送消息是您在后台所做的所有事情,那么使用计时器可能就足够了,因为QNetworkAccessManager它是异步执行的,不会阻塞当前线程。

QNetworkAccessManager 有一个异步 API。当上面的replyFinished slot被调用时,它接受的参数是包含下载数据以及元数据(headers等)的QNetworkReply对象。

于 2015-11-13T07:56:44.750 回答