2

我正在尝试在我的 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场景中这样做是蓝色的,但如果我在其他班级中这样做,则场景是白色的。到底是怎么回事?

4

1 回答 1

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

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

请不要忘记删除后!

于 2012-08-10T11:06:01.907 回答