c++ - Qt4应用程序崩溃,单击连接按钮时出现段错误

标签 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);
}

还有调试者说:

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

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

最佳答案

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

QGraphicsScene *scene = new QGraphicsScene(this);  

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

因为要初始化已有的scene变量,需要省略变量前面的类型:

scene = new QGraphicsScene(this); 

关于c++ - Qt4应用程序崩溃,单击连接按钮时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711247/

相关文章:

c++ - 在 C++ 中创建可变数量的 vector

c++ - 为流运算符返回代理类时解包参数

c++ - 在什么情况下,c++的析构函数不会被调用?

c++ - 如何重新启动我自己的 qt 应用程序?

qt4 - 使用 Qt 4.6 钩住键盘上的键和组合键

c++ - 你如何在 Qt 中使用 unicode?

c++ 转换与 if_then_else 控制结构

c++ - 将两个整数相除而不转换为 double

c++ - 带有时间戳的 qDebug 控制台输出

c++ - 如何更改 qt 4.3 中 Q3Table 的垂直标题列的宽度?