C++ 代码在main中工作,但在其他类中不工作

C++ 代码在main中工作,但在其他类中不工作,c++,qt,qgraphicsview,C++,Qt,Qgraphicsview,我试图在我的Qt应用程序中使用QGraphicsView和qgraphicscene,但由于某些原因,我无法让它工作。如果我从main类执行以下代码,而不是从继承QObject的控制器类执行,则以下代码将起作用: QGraphicsScene scene; scene.setSceneRect(0,0,200,200); scene.setBackgroundBrush(Qt::blue); QGraphicsView *view = new QGraphicsView(); view

我试图在我的Qt应用程序中使用
QGraphicsView
qgraphicscene
,但由于某些原因,我无法让它工作。如果我从
main
类执行以下代码,而不是从继承
QObject
的控制器类执行,则以下代码将起作用:

 QGraphicsScene scene;
 scene.setSceneRect(0,0,200,200);
 scene.setBackgroundBrush(Qt::blue);
 QGraphicsView *view = new QGraphicsView();
 view->setScene(&scene);
 view->show();
如果在
main
中执行,则场景为蓝色,但如果在其他类中执行,则场景为白色。发生了什么事?

更改为:

{
QGraphicsScene * scene = new QGraphicsScene();//note that we allocate it on the heap
scene->setSceneRect(0,0,200,200);
scene->setBackgroundBrush(Qt::blue);
QGraphicsView *view = new QGraphicsView();
view->setScene(scene);
view->show();
<...>
}//your function ends here
{
qgraphicscene*scene=new qgraphicscene();//注意,我们在堆上分配它
场景->设置场景(0,02000);
场景->设置背景笔刷(Qt::蓝色);
QGraphicsView*视图=新的QGraphicsView();
查看->设置场景(场景);
查看->显示();
}//您的函数到此结束
在您的版本中,场景是在堆栈上创建的,因此如果将此代码放在类中的任何位置,场景将在函数结束时立即消失。这就是为什么它是白色的。如果您在堆上分配它,它将在结束括号后保持活动状态,您将能够看到它

请不要忘记删除它后

更改为:

{
QGraphicsScene * scene = new QGraphicsScene();//note that we allocate it on the heap
scene->setSceneRect(0,0,200,200);
scene->setBackgroundBrush(Qt::blue);
QGraphicsView *view = new QGraphicsView();
view->setScene(scene);
view->show();
<...>
}//your function ends here
{
qgraphicscene*scene=new qgraphicscene();//注意,我们在堆上分配它
场景->设置场景(0,02000);
场景->设置背景笔刷(Qt::蓝色);
QGraphicsView*视图=新的QGraphicsView();
查看->设置场景(场景);
查看->显示();
}//您的函数到此结束
在您的版本中,场景是在堆栈上创建的,因此如果将此代码放在类中的任何位置,场景将在函数结束时立即消失。这就是为什么它是白色的。如果您在堆上分配它,它将在结束括号后保持活动状态,您将能够看到它


请不要忘记删除它后

首先,这段代码不会编译为
视图
是指针,但您正在使用
访问成员。首先,这段代码不会编译为
视图
是指针,但您正在使用
访问成员。