1

我想创建一个窗口,Qt3DWindow在后面和QPushButton上面一些。但是,只Qt3DWindow显示动画,QPushButton看不到 s。我也想有Qt3DWindow功能和QPushButtons (所以我可以点击后面的按钮或 3D 动画)。Qt3DWindow仅当我将透明度设置为较低值时才能看到按钮。当然,在这种情况下,按钮只能看到但没有功能。

class MainWindow(QMainWindow):
    def __init__(self, *args):
        QMainWindow.__init__(self, *args)

        self.window = Window()  # Qt3DExtras.Qt3DWindow
        self.container = self.createWindowContainer(self.window)

        self.buttons = Buttons()
        self.layout().addWidget(self.buttons.view)  # QtWidgets.QGraphicsView
        self.layout().addWidget(self.container)
4

2 回答 2

1

根据评论,QMainWindow使用自己的布局类型,该类型负责其大部分(大部分)功能——停靠小部件、工具栏等。

您需要创建自己的小部件层次结构并将其传递QMainWindow::setCentralWidget.

如果您希望Buttons位于 前面,container您可以使用QGridLayout.

因此,您可以尝试(未经测试)...

class MainWindow(QMainWindow):
    def __init__(self, *args):
        QMainWindow.__init__(self, *args)

        self.window = Window()  # Qt3DExtras.Qt3DWindow
        self.container = self.createWindowContainer(self.window)
        self.buttons = Buttons()
        central_widget = QWidget()
        central_widget_layout = QGridLayout()
        central_widget_layout.addWidget(self.container, 0, 0, 2, 1)
        central_widget_layout.addWidget(self.buttons.view, 0, 0, 1, 1)
        central_widget.setLayout(central_widget_layout)
        setCentralWidget(central_widget)
于 2018-02-28T13:48:06.800 回答
1

QWidget::createWindowContainer() 将处理窗口的几何形状,但它确实改变了托管窗口仍然覆盖包含小部件的窗口的事实。因此,该小部件的任何子部件都将不可见,因为它会被 Qt3DWindow 遮挡。

唯一可行的选择是将要覆盖的小部件移动到它们自己的窗口中并自己处理它的几何形状。

或者在 QDeclarativeWidget 中使用 Scene3D,但这会影响性能。

于 2018-04-20T18:45:12.887 回答