使用继承的QGraphicsScene时的SIGSEGV

时间:2019-01-03 07:49:51

标签: c++ qt inheritance qwidget qgraphicsscene

我正在尝试从QGraphicsScene继承,但是以某种方式使我的程序崩溃时,我会尝试使用它。我想我在某个地方缺少一件小东西,但我无法弄清楚。这是到目前为止我尝试过的最小示例:

myscene.h

#ifndef MYSCENE_H
#define MYSCENE_H

#include <QGraphicsScene>

class MyScene : public QGraphicsScene
{
    Q_OBJECT

    QPen* pen_bg;

public:
    explicit MyScene(QObject* parent=nullptr);
    ~MyScene();
};

#endif // MYSCENE_H

myscene.cpp

#include "myscene.h"

MyScene::MyScene(QObject* parent):
    QGraphicsScene (parent)
{
    pen_bg = new QPen(Qt::blue);
}

MyScene::~MyScene()
{
    delete pen_bg;
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myscene.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{    
    MyScene *m_scene = new MyScene(this);
    ui->graphicView->setScene(m_scene);
}

一旦我调用setScene(m_scene)函数,程序就会因SIGSEGV崩溃。

1 个答案:

答案 0 :(得分:0)

如果使用UI文件,则需要先调用setupUi(),然后再使用它,否则UI元素不会初始化。查看文档:{​​{3}}

添加

 ui->setupUi(this); 

到您的MainWindow构造函数。