-1

I want to create a file that contains and manages the entire UI outside of the main.cpp and its main function.

To start I used the code from this answer, which worked fine from inside the main method.

To prevent information loss I show the code below as well:

#include ...

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene;
    QGraphicsView view(&scene);
    QGraphicsPixmapItem item(QPixmap("c:\\test.png"));
    scene.addItem(&item);
    view.show();
    return a.exec();
}

I tried to outsource this code into an own class, but after executing the shown code the just created window disappeared again within a few milliseconds without a warning or an error.

To check if I made a mistake within my own class I tried to use this code from an own function within my main.cpp

void initUI(QApplication * application){
    QGraphicsScene scene;
    QGraphicsView view(&scene);
    QGraphicsPixmapItem item(QPixmap(application->applicationDirPath() + "\\graphics\\Theme1\\background.png"));
    scene.addItem(&item);
    view.show();
}

But the same problem ocurs here. Why does the shown code needs to be executed within the main method, and how could you outsource it?

In case this information helps: I'm running on windows with Qt Creator 3.6.1 based on Qt 5.6.0 (MSVC 2013, 32 bit)

Edit: Here is my main method

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    initUI(&a);
    return a.exec();
}

Edit 2: The error does not occur when I add an

application->exec();

Can somebody explain why this happens? What is the difference between the call of application->exec() in the initUI-method and the a.exec() call within the main method?

Community
  • 1
  • 1
Nerethar
  • 327
  • 2
  • 16

1 Answers1

1

The destructors of scene and view are called once you exit initUI, as it is put on the stack. You need to put it on the heap in order to survive after exiting the init function. Of course you should take care of dangling pointers.

JefGli
  • 781
  • 3
  • 15