Это должно центрировать диалог на основном рабочем столе, но я не тестировал его на настройке нескольких экранов.
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% случаев.
В любом случае, все, что работает, хорошо:)