我有一个由主窗口和一个设置窗口组成的qt应用程序,我正在尝试将其移植到Qt5。
我使用 QWidget::setParent()
将我的设置窗口完全设置在我的主窗口的顶部(并覆盖),并且在使用 qt5.1.1(我使用的先前版本是 qt 4.8.5)之前,此方法工作正常。
我现在遇到的问题是设置窗口显示正确,但几乎所有鼠标事件(减去鼠标悬停在某些按钮上)都直接传递到下面的主窗口。
我尝试为设置窗口设置不同的标志,但不起作用。
此问题不会在窗口上重现。
一段时间以来,我一直在寻找解决这个问题的方法。
我在MacOSX 10.7.5上使用qt 5.1.1
你的问题是兄弟姐妹重叠。当您重新设置窗口的父级时,它在主窗口中具有与其重叠的各种同级。正如您刚刚了解到的那样,这似乎具有未定义的行为。您的窗口不会仅仅通过重定父级而添加到任何布局中。如果将其添加到布局中(堆叠布局除外),则不会有此问题,当然它看起来也不会正确。
便携式解决方案涉及使用以下任一方法:
-
QStackedLayout
作为主窗口中的基本布局。请注意,这不适用于未直接应用容器布局的QMainWindow
、QScrollArea
和类似窗口。 -
作为基构件类的
QStackedWidget
,其中插入了QMainWindow
或类似的类。
在这两种情况下,您都可以临时将设置窗口插入堆栈中,然后翻转页面。
请注意,从用户体验的角度来看,此行为是有问题的。