Search code examples
c++qt5qwidgetqt3dqwindow

Show Qt3D stuff inside QWidget in Qt5


So I felt all warm and fuzzy inside after reading that Qt3D has re-emerged in a v2.0 and is in fact becoming a part of Qt5 soon and that parts of it is already available for testing as a tech preview.

I set out with a simple plan, I would have Qt3D working inside a widget in my existing C++/widgets based application. However the only example I could find that shows how to use Qt3D from C++ is called basicshapes-cpp, and it shows some shapes rendered in a separate OpenGL/Qt3D prepared window (class that extends QWindow) as opposed from a QWidget.

Now I read about the role of QWindow vs. QWidget and how it all hangs together neatly, but I am still struggling to understand how I can port the Qt3D code from the basicshapes-cpp program to run inside a QWidget. What are the basic steps that need to observed?


Solution

  • This extraction of this post shows how it works:

    #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
    }