1

「互換性のない型 '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);
}
4

1 に答える 1

2

QGraphicsScene::addPixmap() は QGraphicsPixmapItem を返します。QGraphicsPixmapItem へのポインターを、異なるタイプの GraphicsPixmapItem へのポインターに割り当てようとしています。

また、 new を使用して buf に割り当ててから を呼び出すとQGraphicsScene::addPixmap()、2 つの異なるオブジェクト、つまり 1 つの GraphicsPixmapItem (からnew) と 1 つの QGraphicsPixmap (からaddPixmap) アイテムが作成されることに注意してください。

おそらくあなたが望むのは、シーンコンストラクターから呼び出して、呼び出しを排除するbuf->setPixmap(Contactinfo);よう なものです。addItem(buf);addPixmap()

于 2013-05-20T02:54:55.593 に答える