Qt学视觉 2024-06-11 08:51 采纳率: 0%
浏览 54

Qt3DWindow显示问题

Qt3DExtras::Qt3DWindow怎样显示在QWidget中,为啥我将它显示在QWidget后立马就全屏显示了?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-11 08:51
    关注

    引自免费微信小程序:皆我百晓生

    要将Qt3DWindow嵌入到QWidget中而不使其全屏,你需要通过一些额外的步骤来创建一个容器QWidget,然后将QQuickWidgetQQuickView放入其中,并将3D场景加载到这个QQuickWidget上。以下是详细的步骤和代码示例:

    1. 首先,确保你已经安装了Qt3D模块。如果你没有安装,可以通过Qt CreatorAdd Library功能添加。

    2. 创建一个QWidget作为容器。

    3. 在容器QWidget内创建一个QQuickWidgetQQuickView

    4. 将3D场景加载到QQuickWidget上。

    5. 确保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场景,而不是全屏显示。

    注意,QQuickWidgetsetResizeMode方法被设置为SizeRootObjectToView,这样3D场景会根据QWidget的大小自动调整,避免全屏显示。

    确保你的QML场景文件与上述代码中的路径相匹配,且QML文件正确配置了Qt3D组件。这样,你就可以在QWidget中看到你的3D场景,而不会出现全屏显示的问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月11日