设置QMessageBox的父类



我不明白为QMessageBox设置parent有什么好处,例如在下面的代码中:

void mainWindow::showMessage(QString msg) {
  QMesageBox::information(this, "title", msg); //'this' is parent
}

谁能帮帮我?

可能有几件事。首先,QMessageBox继承自QDialog。因为QDialog有父节点的概念,QMessageBox也应该有一致性。

具体来说,文档说:

parent被传递给QDialog构造函数。

至少,一个新对话框通常会显示在其父对话框的上方。

然而,还有更多!

根据文档,它可以影响实际功能。例如:

在Mac OS X上,如果你想让你的消息框显示为Qt::Sheet的它的,将消息框的窗口模式设置为Qt::WindowModal或者使用open()。否则,消息框将是一个标准的对话框。

还有一个"窗口模式"one_answers"应用模式"的概念,前者只阻止父窗口的输入,后者阻止整个应用程序的输入。这显然需要知道父节点的概念。

最后,对于某些static函数,例如::about(...),它首先查找要使用的图标是parent->icon()

所以,如果你想要得到很好的平台特定的行为,让你的代码是跨平台的,你最好传递一个相同的父级给它。

对话框的父子层次结构定义了不同平台中的窗口堆叠行为。如果你传递对话框P作为对话框C的父级,那么在所有(桌面)平台上,C都会出现在P的上方。如果你传递0,窗口的堆叠将会不同,并且通常不会像想要的那样表现。我在OS X上见过的最糟糕的问题是,一些消息框出现在主窗口后面,由于消息框是模态的,它被禁用了,没有任何方法可以到达消息框(无论是快捷键还是通过鼠标移动窗口都没有帮助)。总之,我的建议是:总是传递一个明智的父级。

其他答案可能更好,但我自己的小原因是它将消息框放在父元素的中心,而不是屏幕的中心…

不要忘记提到QMessageBox将继承调色板和其父的样式表。相信我,当你使用自定义复杂样式表时,你不会希望你的消息看起来不属于你的应用程序…

如果您不使用静态函数,而是实际创建QMessageBox的实例,那么它对于内存管理也很有用。当父实例被删除时,您的实例也将被删除。

相关内容

  • 没有找到相关文章

最新更新