显示MessageBox时,父窗口操作已挂起



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

问题是当显示QMessageBox(使用QMessageBox::warning(...))时,它会挂起父应用程序,导致错过发送心跳最终导致由于心跳未命中计数超过而断开连接。

要求是,如果显示错误消息,则不允许用户与其他窗口交互。

做这件事最有效、最方便的方法是什么?

如果你在主线程中发送消息并做一些后台工作,你可以得到一些窗口"冻结"。最好在另一个线程中完成所有的后台工作。

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

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

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

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

最新更新