Qt5.5 почему не отображается сообщение об ошибке?

Я использую Qt5.5 и написал приложение, я хотел бы использовать QErrorMessage для отображения ошибки, если она возникает во время запуска приложения.

Я добавил:

    QErrorMessage errmsg(this);
    errmsg.showMessage("HELLO WORLD");

Этот код был вставлен в конец моего конструктора главного окна, ничего не отображается, почему?


person SPlatten    schedule 24.03.2016    source источник


Ответы (1)


В документации можно прочитать:

Показывает заданное сообщение, сообщение и немедленно возвращается. Если пользователь запросил, чтобы сообщение больше не отображалось, эта функция ничего не делает.

Это означает, что как только errmsg будет уничтожен, никакие сообщения больше не будут отображаться. Вы должны использовать класс QErrorMessage в качестве члена/глобальной переменной:

this->errmsg = new QErrorMessage(this);
this->errmgs->showMessage("HELLO WORLD");

В качестве альтернативы вы можете использовать QErrorMessage::qtHandler() — это возвращает глобальный экземпляр ошибки обработчик сообщений:

QErrorMessage::qtHandler()->showMessage("HELLO WORLD");

Но если вы это сделаете, имейте в виду, что QDebug также будет использовать это:

Статическая функция qtHandler() устанавливает обработчик сообщений с помощью qInstallMessageHandler() и создает QErrorMessage, который отображает сообщения qDebug(), qWarning() и qFatal(). Это наиболее полезно в средах, где нет консоли для отображения предупреждений и сообщений об ошибках.

person Felix    schedule 24.03.2016
comment
Спасибо, это может быть из-за того, что мое приложение завершает работу, я хотел бы, чтобы пользователю отображалось сообщение в результате проблемы во время запуска, приложение не может быть запущено. Если приложение умрет, это предотвратит отображение сообщения об ошибке? - person SPlatten; 24.03.2016
comment
Да, это было бы. Для этого вам придется использовать QMessageBox::critical. Это блокирующий вызов, который будет ждать, пока пользователь не закроет диалоговое окно. - person Felix; 24.03.2016