我有以下代码返回“从不兼容的类型'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);
}
答案 0 :(得分:1)
QGraphicsScene :: addPixmap()返回一个QGraphicsPixmapItem。您正在尝试将指向QGraphicsPixmapItem的指针指定给指向GraphicsPixmapItem的指针,这些指针是不同的类型。
另请注意,通过使用new分配buf,然后调用QGraphicsScene::addPixmap()
,您将创建两个不同的对象,即一个GraphicsPixmapItem(来自new
)和一个QGraphicsPixmap(来自addPixmap
})item。
您可能想要的是buf->setPixmap(Contactinfo);
,然后从您的场景构造函数中调用addItem(buf);
,并取消addPixmap()
调用。