s2s
s2s

Reputation: 13

QT QMainWindow from subroutine

I have problems to create a QMainWindow object from a subroutine. I need this to create a different number of windows on the user's request.

The problem lies in the fact that if I create it from a subroutine, it is created as a local variable and only shows for a split second. Usually I would need to return a pointer, but I have not managed to do it with this object. Here is the code:

#include <QApplication>
#include <QMainWindow>

QMainWindow runGUI(){
    QMainWindow window;
    window.show();
    window.resize(340,260);
    return window;
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    /*
    QMainWindow window;
    window.show();
    window.resize(340,260);
    */
    runGUI();
    return app.exec();
}

How do I do this correctly?

Upvotes: 1

Views: 157

Answers (1)

rocambille
rocambille

Reputation: 15976

Returning your QMainWindow from runGUI() calls the copy constructor: Qt objects are not designed to be copied. You should indeed return a pointer, and dynamically allocate the window:

#include <QApplication>
#include <QMainWindow>

QMainWindow* runGUI(){
    QMainWindow* window = new QMainWindow;
    window->setAttribute(Qt::WA_DeleteOnClose);
    window->show();
    window->resize(340,260);
    return window;
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QMainWindow* window = runGUI();
    return app.exec();
}

Note the use of Qt::WA_DeleteOnClose to ensure the window will be deleted when it is closed, avoiding memory leaks.

Upvotes: 5

Related Questions