无法在Qt中显示图形场景

Unable to display graphics scene in Qt

本文关键字:显示图 图形 显示 Qt      更新时间:2023-10-16

我正在Qt小部件应用程序中创建图形场景。应用程序运行成功,但没有显示任何图形场景。

我用来创建场景的代码是:

cadviewer::cadviewer(QGraphicsScene *parent) :
QGraphicsScene(parent)
{
QGraphicsScene scene;
scene.addLine(10,10,20,20);
QGraphicsView view(&scene);
view.show();
qDebug() << "cadviewer";
} 

对上述类的调用在另一个类中进行。相同的代码是:

graphicsarea::graphicsarea(QWidget *parent) :
QWidget(parent),
ui(new Ui::graphicsarea)
{
ui->setupUi(this);
cadviewer viewer;
qDebug() << "graphicsarea";
}

在这两个类中使用的qDebug正在工作。

我不知道少了什么。请告诉我如何在主窗口中显示图形场景?

我不会重复棘轮怪物告诉你的话。克服这个问题的解决方案之一就是在类属性中添加QGraphicsScene scene;QGraphicsView view;

这样,在构造函数结束时,它们仍然是活动的并显示出来!

在构造函数中只声明了一个局部变量。在程序离开构造函数后,你的"cadviewer查看器"将被删除。

graphicsarea::graphicsarea(QWidget *parent) :
QWidget(parent),
ui(new Ui::graphicsarea)
{
ui->setupUi(this);
cadviewer viewer; //delete after constructor
qDebug() << "graphicsarea";
}

尝试将其用作类属性/成员。当应用程序离开构造函数时,类成员仍然存活。

更新:

下面是一个如何将你的图形场景添加到区域的小示例:

QLayout* testLayout = new QVBoxLayout();
cadviewer* view = new cadviewer();
layout->addWidget(view);
graphicsarea* area = new graphicsarea();
area->setLayout(testLayout);
area->show();