我无法理解为 a 设置 parent 有什么好处QMessageBox
,例如在以下代码中:
void mainWindow::showMessage(QString msg) {
QMesageBox::information(this, "title", msg); //'this' is parent
}
有人可以帮助我吗?
我无法理解为 a 设置 parent 有什么好处QMessageBox
,例如在以下代码中:
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()。否则,消息框将是标准对话框。
此外,还有“窗口模态”和“应用程序模态”的概念,前者只阻止父窗口中的输入,后者阻止整个应用程序的输入。这显然需要知道父母的概念。
最后,对于某些static
功能,例如::about(...)
,它首先查找要使用的图标的位置是parent->icon()
。
因此,如果您想获得良好的平台特定行为并让您的代码跨平台,您最好将理智的父级传递给它。
对话框的父子层次结构定义了各种平台中的窗口堆叠行为。如果您将对话框 P 作为对话框 C 的父级传递,则 C 将出现在所有(桌面)平台上的 P 上方。如果您传递 0,则窗口堆叠会有所不同,并且通常不会按预期运行。我在 OS X 上看到的最糟糕的此类问题,其中一些消息框出现在主窗口后面,由于消息框处于模态状态而被禁用,没有任何方法可以进入消息框(快捷方式或通过鼠标移动窗口帮助)。简而言之,我的建议:总是通过一个明智的父母。
其他答案可能更好,但我自己的小理由是它将消息框放在父级的中心而不是屏幕的中心......
如果您不使用静态函数,而是实际创建 QMessageBox 的实例,它对于内存管理也很有用。当父级被删除时,您的实例也将被删除。
不要忘记提及QMessageBox
它将继承调色板及其父级的样式表。相信我,当您使用自定义复杂样式表时,您不希望您的消息像它们不属于您的应用程序一样弹出...