【问题标题】:Unable to display graphics scene in Qt无法在 Qt 中显示图形场景
【发布时间】:2014-07-03 10:00:09
【问题描述】:

我正在 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 工作正常。

我无法弄清楚缺少什么。请帮我看看如何在主窗口中显示图形场景?

【问题讨论】:

  • 创建不意味着它会被添加到场景中吗?如果没有,如何将其添加到图形区域?
  • 您可以将图形场景添加到布局中,并将此布局添加到区域中。我更新了我的答案。

标签: c++ qt qwidget qgraphicsscene


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您在构造函数中只声明了一个局部变量。 程序离开构造函数后,您的“cadviewer viewer”将被删除。

    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();
    

    其他布局也是可能的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多