1

我在 mac OS X 上使用 Qt 4.8 作为标题开发了一个程序。现在我面临一个我花了很多时间但仍然无法解决的问题。

我有一个 QWidget(称为 A),它会在一些操作后打开一个 QMainWindow(称为 B)。当B打开时,我需要A被B挡住,所以我将A设置为B的父级,并将B的窗口模态设置为Qt::WindowModal。

在其他平台上,它就像我想的那样工作,但是,在mac上,B没有自己的标题栏,它只是弹出并附加到A的标题栏上。还有,关闭按钮A 的标题栏是灰色的,这意味着我无法通过按钮关闭 B,我需要使用 QMenu 上的退出 QAction 来关闭它。

当我将 B 的父级设置为 0(NULL)而不是 B 时,它具有独立的标题栏,就像在 windows 或 linux 上一样,这就是我想要的。但是它失去了B被A阻挡的财产。

我尝试设置诸如 Qt::CustomizeWindowHint 之类的 Windows 标志,但没有人工作。

有什么办法可以保持A和B的层级关系,在Mac上给B一个独立的标题栏?感谢大家的帮助:)

附言。我尝试了小程序,发现这种情况只发生在 WindowModal 上(NonModal 和 ApplicationModal 工作正常)

4

1 回答 1

1

您所描述的行为在 Mac OS X 上称为工作。正如您所怀疑的,窗口标志枚举有一个值,用于指定窗口是否为工作表。根据文档,似乎setWindowModality()在 OS X 上调用可能会将窗口默认为工作表——这可能是大多数开发人员想要的大多数对话框。您可以在设置模态后尝试测试并明确删除该标志,看看是否有帮助。或者,您可能想要检查设置了哪些标志,并查看这是否会导致解决方案。

于 2012-04-26T19:01:54.063 回答