Qt3DExtras::Qt3DWindow怎样显示在QWidget中,为啥我将它显示在QWidget后立马就全屏显示了?
3条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
要将
Qt3DWindow嵌入到QWidget中而不使其全屏,你需要通过一些额外的步骤来创建一个容器QWidget,然后将QQuickWidget或QQuickView放入其中,并将3D场景加载到这个QQuickWidget上。以下是详细的步骤和代码示例:-
首先,确保你已经安装了
Qt3D模块。如果你没有安装,可以通过Qt Creator的Add Library功能添加。 -
创建一个
QWidget作为容器。 -
在容器
QWidget内创建一个QQuickWidget或QQuickView。 -
将3D场景加载到
QQuickWidget上。 -
确保
QWidget的大小适应你的布局需求。
下面是一个具体的代码示例,展示如何实现这一过程:
#include <QtWidgets/QApplication> #include <QtWidgets/QWidget> #include <QtWidgets/QVBoxLayout> #include <QtQuick/QQuickWidget> #include <Qt3DExtras/Qt3DWindow> class My3DWidget : public QWidget { Q_OBJECT public: explicit My3DWidget(QWidget *parent = nullptr) : QWidget(parent) { QVBoxLayout *layout = new QVBoxLayout(this); // 创建一个QQuickWidget作为3D场景的容器 QQuickWidget *quickWidget = new QQuickWidget; quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); // 加载3D场景 quickWidget->setSource(QUrl(QStringLiteral("qrc:///My3DScene.qml"))); layout->addWidget(quickWidget); setLayout(layout); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); My3DWidget widget; widget.show(); return app.exec(); }在这个示例中,
My3DScene.qml是你的3D场景文件,应该位于项目的资源文件中(qrc文件中)。这将确保QQuickWidget加载并显示3D场景,而不是全屏显示。注意,
QQuickWidget的setResizeMode方法被设置为SizeRootObjectToView,这样3D场景会根据QWidget的大小自动调整,避免全屏显示。确保你的
QML场景文件与上述代码中的路径相匹配,且QML文件正确配置了Qt3D组件。这样,你就可以在QWidget中看到你的3D场景,而不会出现全屏显示的问题。解决评论 打赏 举报 编辑记录无用 1-