2016-07-26 6 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 생성자는, 차례로, QGraphicsItem::scene를 호출 UpgradeCromagnon::teste 호출합니다. 그 시점에서 UpgradeCromagnon 인스턴스가 QGraphicsScene에 추가 될 수있는 방법이 없기 때문에 null 포인터를 반환해야합니다 (임의의 속도로 제공 한 코드가 아닌).