在Qt5中将Qt3D内容显示在QWidget内

3

我读完这篇文章后,感到很欣慰,因为Qt3Dv2.0的形式重新出现,实际上即将成为Qt5的一部分,其部分内容已经作为技术预览版可供测试。

我打算在现有基于C++/widgets的应用程序中使用一个小部件来运行Qt3D,但是我唯一能找到的演示如何从C++中使用Qt3D的例子称为basicshapes-cpp,它展示了一些形状在单独的OpenGL/Qt3D准备好的window(扩展了QWindow类)中呈现,而不是在QWidget中。

现在,我了解了QWindowQWidget的作用以及它们之间的关系,但我仍然无法理解如何将Qt3D代码从basicshapes-cpp程序移植到QWidget中运行。需要遵循哪些基本步骤呢?


3
暂时只需使用 QWidget::createWindowContainer。适当的 QWidget 集成将在 5.8 / 5.9 中推出。 - peppe
太好了!将其放入答复中,我会接受它的 :) - Mr. Developerdude
所以只是为了澄清,即使有一个新的QOpenGLWidget,它也不能与Qt3D一起使用? - Mr. Developerdude
不幸的是,那是为用户提供的GL代码而设计的。一个“等效”的解决方案(即一个“适当的QWidget”)可能很容易编写,但它将错过5.7版本。 (拼图中缺少的另一部分是控制Qt3D渲染的外部方式,即具有自定义驱动程序的Qt3D并允许其集成到外部GL代码中的方法) - peppe
@peppe,这个问题有任何更新吗?我目前使用的是Qt 5.12,似乎还没有解决方案。而且没有文档 :-( - Equilibrius
2个回答

4

如果有人感兴趣,我已经实现了一个真正的Qt3D小部件。代码可以在这里找到。


3

这个帖子中提取的内容展示了它的工作方式:

#include <QObject>
#include <QWidget>
#include <Qt3DExtras/Qt3DWindow>

class Qt3DWidget
      : public QWidget
{
    Q_OBJECT
    QWidget *container;

public:
    explicit Qt3DWidget(QWidget *parent = nullptr);

};

Qt3DWidget::Qt3DWidget(QWidget *parent)
   : QWidget(parent)
{
    auto view = new Qt3DExtras::Qt3DWindow();

    // put Qt3DWindow into a container in order to make it possible
    // to handle the view inside a widget
    container = createWindowContainer(view,this);

    // ... further stuff goes here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接