我有一个Qt前端应用程序,它连接到后面 终端服务器在另一台机器上。它不断发送心跳消息,告知它还活着。
问题是当显示QMessageBox时(使用QMessageBox::warning(...)
),它会挂起活动的
父申请,导致错过发送心跳,这
最终由于心跳未命中数超过而导致断线。
如果显示错误消息,则要求禁止用户与其他窗口进行交互。
最有效和最方便的方法是什么?
答案 0 :(得分:1)
如果您发送消息并在主线程中执行一些后台操作,则可以获得一些窗口"冻结"。在另一个线程中完成所有后台操作会更好。
如果你在后台发送的消息就是你所做的,那么使用定时器就足够了,因为QNetworkAccessManager
异步执行,而不会阻塞当前的线程。
QNetworkAccessManager有一个异步API。当调用上面的replyFinished插槽时,它所采用的参数是包含下载数据的QNetworkReply对象以及元数据(标题等)。
答案 1 :(得分:1)
创建QMessageBox::warning()
的实例,而不是使用QMessageBox
,并使用::open()
方法显示它。与::warning()
不同,此功能不会阻止您的应用程序。
确保将QMessageBox的父级设置为您的窗口,否则它将无法阻止用户与窗口进行交互。