2016-07-26 79 views
0

我想在我的場景中有QPushButton,但是當我試圖將QGraphicsProxyWidget添加到場景時,它崩潰了。添加QGraphicsProxyWidget時崩潰

所以這裏的.cpp

#include "upgradecromagnon.h" 
#include "game.h" 
#include <QGraphicsProxyWidget> 
#include <qDebug> 

extern Game *game; 
UpgradeCromagnon::UpgradeCromagnon() 
{ 

    this->setRect(-50,0,150,50); 
    buttonAmelio = new QPushButton("salut"); 
    teste(); 
} 

void UpgradeCromagnon::teste() 
{ 
    QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget(); 
    proxy->setWidget(buttonAmelio); 
    scene()->addItem(proxy); 
} 

及其.h

#ifndef UPGRADECROMAGNON_H 
#define UPGRADECROMAGNON_H 
#include <QPainter> 
#include <QGraphicsRectItem> 
#include <QPushButton> 
class UpgradeCromagnon: public QGraphicsRectItem 
{ 
public: 
    UpgradeCromagnon(); 
    void teste(); 
private: 
    QPushButton *buttonAmelio; 
}; 

#endif // UPGRADECROMAGNON_H 
+0

在'UpgradeCromagnon :: teste'中調用'scene()'是否肯定返回非null? –

+0

那麼我可以有其他類之前,所以現場已設置在這一點:) – noonana

回答

0

UpgradeCromagnon構造函數調用UpgradeCromagnon::teste,反過來,調用QGraphicsItem::scene。此時QGraphicsItem::scene必須返回一個空指針,因爲在它的構造函數完成之前(不是根據您提供的代碼),UpgradeCromagnon實例可能已經被添加到QGraphicsScene中。