Центр Qt QMessageBox 'критический' в настольном компьютере - PullRequest
0 голосов
/ 15 октября 2018

Критический метод QMessageBox имеет 4 переопределенных метода, а также отдельные методы для установки заголовка, текста сообщения и родителя.

Я хочу отобразить диалоговое окно с критической ошибкой в ​​центре рабочего стола.У меня есть геометрия рабочего стола, мне нужна геометрия окна сообщения, чтобы я мог применить ее к геометрии рабочего стола, чтобы центрировать диалоговое окно с ошибкой.

Но это курица и яйцо, я не могу получитьдиалоговое окно с ошибкой до того, как оно будет отображено для позиционирования, так как мне это сделать?Я не хочу прибегать к магическим числам, чтобы применить смещение.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Фактическое решение было намного проще, просто удаление родительского параметра из вызова к критическому дает желаемый эффект:

    const QString csMsg("\'" + strConfig + "\' does not exist!");
    const QString csTitle("Error");
    QMessageBox msgBox;
    msgBox.critical(nullptr, csTitle, csMsg);
    QApplication::quit();
0 голосов
/ 15 октября 2018

Это должно центрировать диалог на основном рабочем столе, но я не тестировал его на настройке нескольких экранов.

 QMessageBox message(QMessageBox::Critical, QObject::tr("Error!"),
                     QObject::tr("This is a critical error!"),
                     QMessageBox::Ok,
                     QApplication::desktop()); 
 message.exec();

EDIT Это действительно один из конструкторов QMessageBox, как правильно указал пользователь Scheff,Это решение использует поведение Qt по умолчанию для центрирующих диалогов по сравнению с родительским виджетом.

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

В любом случае, все, что работает, хорошо:)

...