设置QMessageBox的父级

时间:2011-07-19 20:57:14

标签: c++ qt qmessagebox

我无法理解为QMessageBox设置父级的好处,例如在以下代码中:

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

有人能帮助我吗?

5 个答案:

答案 0 :(得分:6)

可能是一些事情。首先QMessageBox继承自QDialog。由于QDialog具有父级概念,因此QMessageBox也应该具有一致性。

具体来说,文档说:

  

父传递给QDialog构造函数。

至少,新对话框通常以其父对象的顶部为中心显示。

然而,还有更多!

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

  

在Mac OS X上,如果您希望消息框显示为Qt :: Sheet   其,将消息框的窗口模态设置为Qt :: WindowModal   或使用open()。否则,消息框将是标准对话框。

此外,还有“窗口模态”和“应用程序模态”的概念,前者仅阻止父窗口中的输入,后者阻止整个应用程序的输入。这显然需要知道父母的概念。

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

所以,如果你想获得很好的平台特定行为并让你的代码跨平台,你最好把一个理智的父母传递给它。

答案 1 :(得分:2)

对话框的父子层次结构定义了各种平台中的窗口堆叠行为。如果将对话框P作为对话框C的父对象传递,则C将出现在所有(桌面)平台上的P之上。如果传递0,则窗口堆叠将不同,通常不会按预期运行。我在OS X上看到的最糟糕的问题,其中一些消息框出现在主窗口后面,由于消息框是模态的,因此无法进入消息框(既没有快捷方式也没有通过鼠标移动窗口)帮助)。 简而言之,我的建议是:总是通过一个明智的父母。

答案 2 :(得分:2)

其他答案可能更好,但我自己的小理由是它将消息框放在父级的中心而不是屏幕的中心......

答案 3 :(得分:1)

不要忘记提及QMessageBox将继承调色板及其父级的样式表。相信我,当你使用自定义的复杂样式表时,你不希望你的消息流行,就像它们不属于你的应用程序一样......

答案 4 :(得分:0)

如果您不使用静态函数,但实际上创建了QMessageBox的实例,它对内存管理也很有用。删除父项后,您的实例也将被删除。