我用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); }
我做错了什么?提前谢谢。
答案 0 :(得分:3)
构造函数中的以下语句是局部变量定义和初始化:
QGraphicsScene *scene = new QGraphicsScene(this);
实际的scene
成员变量永远不会被初始化,任何尝试使用this->scene
的内容都会使应用程序崩溃。
如果要初始化现有的scene
变量,则应省略变量前面的类型:
scene = new QGraphicsScene(this);