У меня есть приложение для внешнего интерфейса Qt, которое подключается к серверу конца на другом компьютере. И он продолжает посылать сообщения о сердечном ритме, чтобы сообщить, что он жив.Действия родительского окна приостановлены, когда отображается MessageBox
Проблема заключается в том, когда QMessageBox показано (с помощью QMessageBox::warning(...)
), он приостанавливает деятельность родительского приложение, которое вызывает пропустить отправку биения сердца, которые в конечном счете приводит к отключению из-за сердечный подсчет биений промаха превышать.
Требование состоит в том, чтобы запретить пользователю взаимодействовать с другими окнами, если отображается сообщение об ошибке.
Каков наиболее эффективный и удобный способ сделать это?
Как вы посылаете сердечные сокращения? Таймеры Qt обычно не приостанавливаются модальными окнами (хотя, как правило, обработка протокола связи выполняется в отдельном потоке, чтобы избежать подобных проблем). –
Вы можете создать собственный QThread для сообщений о сердцебиении, это будет работать независимо от любых действий в основном потоке. –
'QMessageBox' заставляет остальную часть GUI замораживать до тех пор, пока окно сообщения не будет отклонено, если вы используете hartbeats для других элементов GUI - возможно, это так, я рекомендовал бы вам использовать [QTimer] (http://doc.qt.io /qt-4.8/qtimer.html#details) из потока non-gui с помощью [QThread :: exec] (http://doc.qt.io/qt-4.8/qthread.html#exec) или проверьте QNetworAccessManager как @ 0x35 предложил. –