4

我无法理解为 a 设置 parent 有什么好处QMessageBox,例如在以下代码中:

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

有人可以帮助我吗?

4

5 回答 5

7

大概有几件事。首先QMessageBox继承自QDialog. 既然QDialog有了父母的概念,QMessageBox也应该为了一致性。

具体来说,文档说:

parent 被传递给 QDialog 构造函数。

至少,一个新的对话框通常显示在其父级的顶部居中。

然而,还有更多!

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

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

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

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

因此,如果您想获得良好的平台特定行为并让您的代码跨平台,您最好将理智的父级传递给它。

于 2011-07-19T21:17:59.223 回答
2

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

于 2011-07-19T21:32:15.697 回答
2

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

于 2011-07-19T21:35:33.473 回答
1

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

于 2011-07-29T07:33:55.030 回答
1

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

于 2011-07-20T13:25:16.117 回答