c++ - 代码在 main 中有效,但在其他类中无效

标签 c++ qt qgraphicsview

我试图在我的 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

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

请不要忘记删除!

关于c++ - 代码在 main 中有效,但在其他类中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11900237/

相关文章:

c++ - 在 Winsock ws 客户端和 Websocket 服务器之间建立握手

c++ - 如何调整可扩展对话框的大小?

python - PySide:容器类中 QGraphicsView 的事件过滤器

c++ - 我可以在枚举中使用枚举吗?

c++ - 如何打印出 DECIMAL (tagDEC) 类型的值?

c++ - 在 Qt 中建模自修改数据/包装器模型

c++ - Qt 在寻找匹配项时出现意外的 EOF

drag-and-drop - 如何在 KSnapshot 中的 QLabel 上选择带有 QRubberBand 的区域?

c++ - QGraphicsView适合任何尺寸的图像,没有滚动条

c++ - 使用 SQlite 在 QT5 上关闭和打开数据库时出错