Несовместимый тип в пользовательском QGraphicsPixmapItem

У меня есть следующий код, который возвращает ошибку компилятора «присвоение '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

Пользовательский cpp GraphicsScene:

#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

и, наконец, пользовательский cpp QGraphicsPixmapItem:

#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);
}

person huston    schedule 20.05.2013    source источник


Ответы (1)


QGraphicsScene::addPixmap() возвращает объект QGraphicsPixmapItem. Вы пытаетесь присвоить указатель на QGraphicsPixmapItem указателю на GraphicsPixmapItem, которые относятся к разным типам.

Также обратите внимание, что, назначая buf с помощью new, а затем вызывая QGraphicsScene::addPixmap(), вы создаете два разных объекта, а именно один элемент GraphicsPixmapItem (из new) и один элемент QGraphicsPixmap (из addPixmap).

Вероятно, вам нужно что-то вроде buf->setPixmap(Contactinfo);, а затем вызвать addItem(buf); из конструктора сцены и исключить вызов addPixmap().

person LLLL    schedule 20.05.2013