我试图在场景中添加一个QPushButton,但是当我尝试将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

最佳答案

您的UpgradeCromagnon构造函数调用UpgradeCromagnon::teste,后者又调用QGraphicsItem::scene。那时QGraphicsItem::scene必须返回一个空指针,因为不可能在构造函数完成之前将UpgradeCromagnon实例添加到QGraphicsScene中(无论如何不按照您提供的代码)。

关于qt - 添加QGraphicsProxyWidget时崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38588440/

10-12 05:52