代码在main中工作,但在其他类中不起作用

时间:2012-08-10 10:56:08

标签: c++ qt qgraphicsview

我正在尝试在我的Qt应用程序中使用QGraphicsViewQGraphicsScene,但出于某种原因,我无法让它工作。我有以下代码,如果我从main类执行它而不是从继承QObject的控制器类中执行它:

 QGraphicsScene scene;
 scene.setSceneRect(0,0,200,200);
 scene.setBackgroundBrush(Qt::blue);
 QGraphicsView *view = new QGraphicsView();
 view->setScene(&scene);
 view->show();

如果我在main中执行此操作,则场景为蓝色,但如果我在其他课程中执行此操作,则场景为白色。发生了什么事?

1 个答案:

答案 0 :(得分:4)

更改为:

{
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

在您的版本中,场景是在堆栈上创建的,因此如果您将此代码放在类中的任何位置,则场景将在函数结束时立即死亡。这就是为什么它是白色的。如果你在堆上分配它,它将在结束括号后保持活着,你将能够看到它。

请不要忘记在删除后删除它!