自定义QGraphicsPixmapItem中的不兼容类型

时间:2013-05-20 01:28:57

标签: qt qgraphicsitem qgraphicsscene

我有以下代码返回“从不兼容的类型'GraphicsPixmapItem *'编译器错误中分配'GraphicsPixmapItem *'。

有人能帮助我吗?

以下是代码:

主文件:

#include "graphicsscene.h"
#include <QApplication>
#include <QGraphicsView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    GraphicsScene scene;
    scene.setSceneRect(0, 0, 318, 458);
    QGraphicsView view(&scene);
    view.setBackgroundBrush(QPixmap(":/images/background.jpg"));
    view.show();
    return a.exec();
}

自定义GraphicsScene标头:

#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H

#include <QGraphicsScene>

#include "graphicspixmapitem.h"

class GraphicsScene : public QGraphicsScene
{
    Q_OBJECT
public:
    explicit GraphicsScene(QWidget *parent = 0);
    QGraphicsPixmapItem *Logo;
};

#endif // GRAPHICSSCENE_H

自定义GraphicsScene cpp:

#include "graphicsscene.h"

GraphicsScene::GraphicsScene(QWidget *parent) :
    QGraphicsScene()
{
    QPixmap Contactinfo(":/images/ScreenContacts.png");
    GraphicsPixmapItem *buf = new GraphicsPixmapItem;
    buf = addPixmap(Contactinfo);
    buf->setPos(0, 40);
    buf->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsScenePositionChanges);
}

自定义QGraphicsPixmapItem标头:

#ifndef GRAPHICSPIXMAPITEM_H
#define GRAPHICSPIXMAPITEM_H

#include <QObject>
#include <QGraphicsPixmapItem>

class GraphicsPixmapItem : public QObject, public QGraphicsPixmapItem
{
    Q_OBJECT
public:
  GraphicsPixmapItem(QGraphicsItem *parent = 0, QGraphicsScene *scene = 0);

protected:
     QVariant itemChange(GraphicsItemChange change, const QVariant &value);
};

#endif // GRAPHICSPIXMAPITEM_H

最后是自定义QGraphicsPixmapItem cpp:

#include "graphicspixmapitem.h"

GraphicsPixmapItem::GraphicsPixmapItem(QGraphicsItem *parent, QGraphicsScene *scene)
  : QGraphicsPixmapItem(parent, scene)
{
}

#include <QDebug>
QVariant GraphicsPixmapItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
    qDebug() << "itemChange Triggered";
    if (change == ItemPositionChange) {
            qDebug() << "Position changed";
        }
    return QGraphicsItem::itemChange(change, value);
}

1 个答案:

答案 0 :(得分:1)

QGraphicsScene :: addPixmap()返回一个QGraphicsPixmapItem。您正在尝试将指向QGraphicsPixmapItem的指针指定给指向GraphicsPixmapItem的指针,这些指针是不同的类型。

另请注意,通过使用new分配buf,然后调用QGraphicsScene::addPixmap(),您将创建两个不同的对象,即一个GraphicsPixmapItem(来自new)和一个QGraphicsPixmap(来自addPixmap })item。

您可能想要的是buf->setPixmap(Contactinfo);,然后从您的场景构造函数中调用addItem(buf);,并取消addPixmap()调用。