我试图在我的Qt应用程序中使用QGraphicsViewQGraphicsScene,但是由于某些原因,我无法使其正常工作。我有以下代码,如果我从main类执行它,而不是从继承QObject的 Controller 类执行它,它将起作用:

 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

在您的版本中,场景是在堆栈上创建的,因此,如果将此代码放在类中的任何位置,则场景将在函数末尾立即消失。这就是为什么它是白色的。如果在堆上分配它,它将在右括号后保持 Activity 状态,并且可以看到它。

请不要忘记以后将其删除!

关于c++ - 代码在主要类中起作用,但在其他类中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11900237/

10-11 22:37
查看更多