如何将 QPushButton 放入小部件中的 Qt3DWindow 中?

Posted

技术标签:

【中文标题】如何将 QPushButton 放入小部件中的 Qt3DWindow 中?【英文标题】:How to put QPushButton into Qt3DWindow which is in the widget? 【发布时间】:2019-08-11 13:51:20 【问题描述】:

我想在 Qt3DWidget 之上拥有一个或多个 QPushButtons 或其他小部件,但它是不可见的。不知道为什么。

在我的 mainwindow.cpp 中有这样的代码:

this->renderer = new Qt3DExtras::Qt3DWindow(); 
this->renderer->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d41));
this->rendererContainer = QWidget::createWindowContainer(this->renderer);
ui->centralWidget->layout()->addWidget(this->rendererContainer);

this->shotButton = new QPushButton("Make photo", this->rendererContainer);
this->shotButton->move(this->rendererContainer->width() / 2 - (this->shotButton->width()-20) / 2, this->rendererContainer->height()-40);

当我尝试使用 QOpenGLWidget 时它起作用了,但是使用 Qt3DWindow 这个按钮总是不可见的。看起来 Qt3DWindow 在它上面绘制。

【问题讨论】:

【参考方案1】:

我找到了原因,但我不能说我找到了解决方案。根据文档,由“createWindowContainer”提供的小部件绘制在父窗口的所有内容之上。与它处于同一位置的每个小部件都将位于其下方并且对用户不可见。 我发现在 Qt3D 之上添加内容的唯一方法是使用 QtQuick 和 QScene3D 编写应用程序。

【讨论】:

也许您可以在 Qt 论坛中询问如何在 QML 中实现在 Qt3D 窗口顶部绘图。据我所知,没有 QScene3D C++ 类,所以也许他们在纯 QML 中实现了这一点。那么问题来了,这是否可以转移到 C++。 或者是否可以将按钮添加为容器小部件的子项?也许这样你可以使按钮可见。

以上是关于如何将 QPushButton 放入小部件中的 Qt3DWindow 中?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4:使用 QPushButton 小部件从 QList 小部件中删除项目

更改按钮文本时如何自动更改 QPushButton 宽度和 QMenuBar 角小部件宽度?

QPushButton 在另一个小部件上对齐

QPushButton在顶部另一个小部件上对齐

通过按钮显示图像

QPushButton 更改同一布局中其他小部件的边距