我想创建一个包含和管理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() 在主要方法中?
答案 0 :(得分:1)
一旦退出initUI,就会调用场景和视图的析构函数,因为它被放在堆栈中。您需要将它放在堆上才能在退出init函数后继续存在。当然你应该照顾悬空指针。