我正在使用QGraphicsPixmapItem在显示器上显示图片。现在,我希望能够动态更新这个图片,但是似乎遇到了一些问题。
这是头文件:
class Enemy_View : public QGraphicsPixmapItem
{
public:
Enemy_View(QGraphicsScene &myScene);
void defeat();
private:
QGraphicsScene &scene;
QPixmap image;
}
这里是cpp文件。
Enemy_View::Enemy_View(QGraphicsScene &myScene):
image{":/images/alive.png"}, scene(myScene)
{
QGraphicsPixmapItem *enemyImage = scene.addPixmap(image.scaledToWidth(20));
enemyImage->setPos(20, 20);
this->defeat();
}
void Enemy_View::defeat(void)
{
image.load(":/images/dead.png");
this->setPixmap(image);
this->update();
}
所以我的想法是在对象上调用defeat
方法,然后编辑一些属性并最终更改图像。然而,我现在做的事情不起作用。 alive.png
图像显示出来了,但没有更新为dead.png
。
更新1
正如Marek R所提到的,我似乎复制了很多内置功能。我试图清理这个问题,但现在场景中什么都没有显示出来了。
.h 文件
class Enemy_View : public QGraphicsPixmapItem
{
public:
Enemy_View(QGraphicsScene &myScene);
void defeat();
private:
QGraphicsScene &scene;
/* Extra vars */
};
.cpp文件
Enemy_View::Enemy_View(QGraphicsScene &myScene):
scene(myScene)
{
/* This part would seem ideal but doesn't work */
this->setPixmap(QPixmap(":/images/alive.png").scaledToWidth(10));
this->setPos(10, 10);
scene.addItem(this);
/* This part does render the images */
auto *thisEl = scene.addPixmap(QPixmap(":/images/Jackskellington.png").scaledToWidth(10));
thisEl->setPos(10, 10);
scene.addItem(this);
this->defeat();
}
void Enemy_View::defeat(void)
{
this->setPixmap(QPixmap(":/images/dead.png"));
}
我已经移除了QPixmap
,但我不确定是否可以移除QGraphicsScene
。在我的cpp
文件中,你可以看到我现在有两个版本的构造函数。第一个部分使用this
似乎是一个理想的解决方案,但是没有将图像显示在屏幕上(虽然它确实可以编译而没有错误)。带有thisEl
的第二个版本确实可以渲染它。我在第一个版本中做错了什么?
QGraphicsPixmapItem
?QGraphicsPixmapItem
已经拥有了你所需要的所有功能。而且你添加的那些新字段并没有起到任何作用,它们只是试图复制已经存在的功能(但是这种实现方式却没有任何作用)。 - Marek REnemy_View
添加到场景中? - thuga