Important: Please read the Qt Code of Conduct -

[SOLVED]integrate QML into existing C++

  • Every tutorial (and all my google searchs) on using QML - demo's using QML from the start. I have an existing QT project with lot's of UI files (actually not my code). I want to be able to code a QML dialog and and then from a c++ menu display it. I'm trying to learn - how to use QML. Below is my code that I added to main.cpp - but it opens a second window (not part of my mainwindow) and does not display correctly - I get a blank white window.

    Can someone please explain how to integrate QML into an exist C++ with lots of forms already?

    void showTest()
    QQmlEngine engine;
    QQmlContext *context = new QQmlContext(engine.rootContext());

    QQuickView view(QUrl::fromLocalFile("guiclient/test.qml"));
    QQmlComponent component(&engine, QUrl::fromLocalFile("/u/Download/postbooks_source/qt-client/guiclient/test.qml"));

    /*if (component.status() == QQmlComponent::Ready) {
    QObject object = component.create(context);
    // removing below prevents the window from opening.
    QEventLoop loop;

  • It looks like this is not going to work at least not in 5.1.

    Thanks for those who viewed


  • Moderators

  • I have attempted to use the example but I must be missing something!

    I'm guessing that the "widgetLayout->" is the parent?? Since other things did not work.

    Could you provide a sample of a function that really works. BTW others are suggesting that it can't be done until 5.2. I know I'm asking a lot but I was about to give up on Qt until I saw your post. I'm still not to sure it works? No I'm not saying it's BS I just don't understand it.

  • Moderators

    Where did you see that suggestion? It can definitely be done in Qt 5.1 -- I'm doing it in a project of mine.

    widgetLayout is a QLayout in the parent QWidget. You cannot add a child widget directly into the parent widget; you need to add it to the parent's layout. See the "Layout Management": page for details.

    Here's how I did it:
    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    // Integrate the UI file into C++

    // Create the QML view
    QQuickView* quickView = new QQuickView(QUrl("MyScene.qml"));
    // Make the QML view resize when the parent is resized
    // Add the QML view to my widget layout (centralVBoxLayout),
    // which I added in Qt Designer
    QWidget* quickWidget = QWidget::createWindowContainer(quickView);


  • That seems to work - thanks.

    BTW - I got the suggestion from two (2) people (one on Qt private IRC) and the other from a friend trying to do something similar.

    As a noob I'm learning at a very high curve (I haven't programmed in C++ in 20 years) and the tutorials do not cover what I'm trying to do (that is integrate QML into an exist C++ Qt program).

  • Moderators

    Please don't be discouraged; we all start as newbies but we all improve with practice :)

    There are many tutorials/examples about integrating QML into a C++ program. I think one of the issues is that there's too many tutorials, so it's hard for a newcomer to know what to read! This is probably a good place to start for you:

    If you have any more questions about a specific task you want to do, feel free to make a new post and someone will point you in the right direction.

Log in to reply