我有一个 Qt 前端应用程序,它连接到另一台机器上的后端服务器。它会不断发送心跳消息以告知它还活着。
问题是当 QMessageBox 显示(使用QMessageBox::warning(...)
)时,它会暂停父应用程序的活动,从而导致错过发送心跳,最终导致由于心跳错过计数超出而导致断开连接。
要求是在显示错误消息时禁止用户与其他窗口交互。
最有效和最方便的方法是什么?
我有一个 Qt 前端应用程序,它连接到另一台机器上的后端服务器。它会不断发送心跳消息以告知它还活着。
问题是当 QMessageBox 显示(使用QMessageBox::warning(...)
)时,它会暂停父应用程序的活动,从而导致错过发送心跳,最终导致由于心跳错过计数超出而导致断开连接。
要求是在显示错误消息时禁止用户与其他窗口交互。
最有效和最方便的方法是什么?
而不是使用QMessageBox::warning()
,创建一个实例并使用方法QMessageBox
显示它。::open()
与::warning()
此功能不同的是不会阻止您的应用程序。
确保将 QMessageBox 的父级设置为您的窗口,否则不会阻止用户与窗口的交互。
如果您发送消息并在主线程中做一些背景工作,您可以获得一些窗口“冻结”。最好在另一个线程中完成所有背景工作。
如果发送消息是您在后台所做的所有事情,那么使用计时器可能就足够了,因为QNetworkAccessManager
它是异步执行的,不会阻塞当前线程。
QNetworkAccessManager 有一个异步 API。当上面的replyFinished slot被调用时,它接受的参数是包含下载数据以及元数据(headers等)的QNetworkReply对象。