SIGSEGV при использовании унаследованного QGraphicsScene - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь унаследовать от 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 голосов
/ 03 января 2019

Если вы используете файл пользовательского интерфейса, вам необходимо сначала вызвать setupUi() перед его использованием, в противном случае элементы пользовательского интерфейса не инициализируются.См. Документы: http://doc.qt.io/qt-5/designer-using-a-ui-file.html

Добавьте

 ui->setupUi(this); 

в ваш MainWindow конструктор.

...