从主方法

时间:2016-05-19 13:04:09

标签: c++ qt user-interface

我想创建一个包含和管理main.cpp及其主要功能之外的整个UI的文件。

首先,我使用了this answer中的代码,该代码运行良好 从主方法内部。

为防止信息丢失,我也会显示以下代码:

#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();
}

我试图将这些代码外包给自己的代码 class,但在执行显示的代码之后刚刚创建的窗口 在没有警告或错误的情况下在几毫秒内再次消失。

要检查我是否在自己的班级中犯了错误,我尝试使用此代码 来自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();
}

但同样的问题出在这里。为什么显示的代码需要在main方法中执行,你怎么能外包呢?

如果此信息有帮助:我使用Qt Creator 3.6.1在Windows上运行 基于Qt 5.6.0(MSVC 2013,32位)

编辑: 这是我的主要方法

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

编辑2: 添加

时不会发生错误
application->exec();

有人可以解释为什么会这样吗?有什么区别 在initUI方法和a.exec()调用中调用application-> exec() 在主要方法中?

1 个答案:

答案 0 :(得分:1)

一旦退出initUI,就会调用场景和视图的析构函数,因为它被放在堆栈中。您需要将它放在堆上才能在退出init函数后继续存在。当然你应该照顾悬空指针。