Qt4应用程序崩溃,单击连接按钮时出现段故障

时间:2015-11-14 17:30:18

标签: c++ qt4

我用QGraphicsView创建了一个简单的应用程序,我遇到了连接按钮的问题。 有一个带QGraphicsScene的简单窗口和一个QPushButton以及一个应该在我的场景中添加一个矩形的函数。编译是好的,它工作,并在我单击此按钮应用程序崩溃后。

.h文件:

class Canvas : public QWidget{
    Q_OBJECT
public:
    Canvas(QWidget *parent = 0);

private slots:
    void addPoint();

private:
    QGraphicsScene *scene;
    QPushButton *btn;

};

.cpp文件:

Canvas::Canvas(QWidget *parent)
    : QWidget(parent)
{
    QVBoxLayout *vbox = new QVBoxLayout(this);
    vbox->setSpacing(1);
    QPushButton *btn = new QPushButton("test", this);
    QGraphicsView *view = new QGraphicsView(this);
    QGraphicsScene *scene = new QGraphicsScene(this);
    view->setScene(scene);
    vbox->addWidget(view);
    vbox->addWidget(btn);
    setLayout(vbox);
    connect(btn, SIGNAL(clicked()), this, SLOT(addPoint()));
}

void Canvas::addPoint()
{
    scene->addRect(100,0,80,100);
}
也是debuger说:

The inferior stopped because it received a signal from the Operating System.

Signal name : SIGSEGV
Signal meaning : Segmentation fault

并指出这一行:

{ return addRect(QRectF(x, y, w, h), pen, brush); }

我做错了什么?提前谢谢。

1 个答案:

答案 0 :(得分:3)

构造函数中的以下语句是局部变量定义和初始化:

QGraphicsScene *scene = new QGraphicsScene(this);  

实际的scene成员变量永远不会被初始化,任何尝试使用this->scene的内容都会使应用程序崩溃。

如果要初始化现有的scene变量,则应省略变量前面的类型:

scene = new QGraphicsScene(this);