Qt QMessageBox Gui работает при компиляции для Linux, но не для Windows - PullRequest
0 голосов
/ 03 октября 2018

У меня есть программа, которую я скомпилировал для Linux и Windows.В Linux все работает гладко, однако в Windows я получаю сообщение об ошибке, когда пытаюсь использовать QMessageBox, чтобы вывести уведомление об успехе или сбое.Ошибка говорит о том, что все QWidgets должны быть в основном потоке графического интерфейса.Виджеты создаются и принадлежат MainWindow, которое полностью находится в главном потоке (создается и используется только в основном).С идентичным кодом исполняемый файл без проблем работает в Linux.Почему есть разница, и что я могу сделать, чтобы исправить это на стороне окон?Я даже не уверен, как переместить окна сообщений в основной поток (как указано в ошибке Windows), учитывая, что они создаются и используются классом mainwindow, который уже находится в основном потоке.

дляНапример, я добавил приведенный ниже код, показывающий, как два QMessageBoxs создаются MainWindow.

void MainWindow::retryCallback()
{
    QMessageBox popup(this);
    popup.critical(this, "Failed", "There was an error loading. Please try 
    again.");
}

void MainWindow::successCallback()
{
    QMessageBox popup(this);
    popup.information(this, "Complete", "The operation was successful");
}

Опять же, этот код прекрасно работает в моем приложении linux.Кроме того, я могу использовать QProgressDialog для вызова индикатора выполнения, используя ту же технику.Он создан и принадлежит MainWindow и не вызывает никаких проблем ни в Windows, ни в Linux.

...