Настройка родителя для QMessageBox
Я не могу понять, в чем выгода установки parent для QMessageBox
, например, в следующем коде:
void mainWindow::showMessage(QString msg) {
QMesageBox::information(this, "title", msg); //'this' is parent
}
Может кто-нибудь помочь мне ?
5 ответов:
Вероятно, несколько вещей. Прежде всего
QMessageBox
наследует отQDialog
. ПосколькуQDialog
имеет понятие родителя,QMessageBox
тоже должен для согласованности.В частности, в документации говорится:
Parent передается конструктору QDialog.
По крайней мере, новый диалог часто отображается по центру в верхней части своего родителя.
Однако есть и еще кое-что!Согласно документации он может фактически влиять на функциональность. Например:
На Mac OS X, если вы хотите, чтобы ваше окно сообщения отображалось как Qt:: лист его родитель, установите модальность окна окна сообщения в Qt:: WindowModal или используйте open (). В противном случае окно сообщения будет стандартным диалогом.
Кроме того, существует понятие как "модальности окна", так и "модальности приложения", где первая предотвращает ввод только в Родительском окне, а вторая предотвращает ввод для всего приложения. Это, очевидно, требует концепции родителя, чтобы быть известный.
Наконец, для некоторых функцийstatic
, таких как::about(...)
, первым местом, где он ищет значок, являетсяparent->icon()
. Таким образом, если вы хотите получить хорошее поведение для конкретной платформы и сделать свой код кроссплатформенным, вам лучше передать ему здравомыслящего родителя.
Иерархия диалоговых окон "родитель-потомок" определяет поведение стекирования окон на различных платформах. Если вы передадите dialog P в качестве родителя dialog C, C появится над P на всех (настольных) платформах. Если вы передадите 0, то укладка окон будет отличаться и, как правило, вести себя не так, как хотелось бы. Худшие такие проблемы я видел на OS X, где некоторые окна сообщений показывались за главным окном, которое было отключено, поскольку окна сообщений были модальными, без какого-либо способа добраться до окна сообщений (ни ярлыков ни перемещение окон с помощью мыши не помогло). Короче говоря, мое предложение: Всегда передайте разумному родителю.
Другие ответы, вероятно, лучше, но моя собственная маленькая причина заключается в том, что он помещает окно сообщения в центр родителя, а не в центр экрана...