我无法理解为QMessageBox
设置父级的好处,例如在以下代码中:
void mainWindow::showMessage(QString msg) {
QMesageBox::information(this, "title", msg); //'this' is parent
}
有人能帮助我吗?
答案 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的实例,它对内存管理也很有用。删除父项后,您的实例也将被删除。