我使用Qt 4.8作为标题在Mac OS X上开发程序。 现在我遇到了一个问题,我花了很多时间在上面,但仍然无法解决。
我有一个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阻挡的财产。
我试图设置Windows标志,如Qt :: CustomizeWindowHint等,但没有人工作。
有没有办法保持A和B之间的层级关系,并在Mac上给B一个独立的标题栏?感谢大家的帮助:)
PS。我试过小程序,发现这种情况只发生在WindowModal上(NonModal和ApplicationModal工作正常)
答案 0 :(得分:1)
您所描述的行为在Mac OS X上称为表。正如您所怀疑的那样,窗口标志枚举有一个值,用于指定窗口是否为工作表。基于the documentation,似乎在OS X上调用setWindowModality()
可能会将窗口默认为工作表 - 这可能是大多数开发人员想要的大多数对话框。在设置模态后,您可以尝试测试并明确删除该标志,看看是否有帮助。或者,您可能想要检查设置了哪些标志,并查看是否会导致解决方案。