gpt4 book ai didi

c++ - 为同一类的两个对象绘制不同的图像

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:42 27 4
gpt4 key购买 nike

我有两个对象,whitepawn 和 blackpawn,都是 Piece 类型。除了使用的图像外,关于这两个对象的一切都是相同的。目前这是我用来绘制白色棋子的代码,

void Pawn::paintEvent(QPaintEvent *)
{
pixmap.load(":/whitepawn.png");

QPainter paint(this);
paint.drawPixmap(x, y, pixmap);
}

有没有办法通过创建新类并覆盖新类的 paintEvent 函数来为 blackpawn 使用不同的图像?

编辑:旧标题是针对不同问题的,如果你看到了请忽略它。

最佳答案

当然可以

class Pawn {
public:
virtual char const* imageFileName() = 0;
};

对不起,我上次的解释有点草率,让它看起来好像没有额外的类(class),真的应该有:

class WhitePawn : public Pawn {
public:
virtual char const* imageFileName();
};

然后覆盖(+声明):

char const* WhitePawn::imageFileName() { return "./whitepawn.png"; }

char const* BlackPawn::imageFilename() { return "./blackpawn.png"; }

并从paintEvent()调用imageFilename():

void Pawn::paintEvent(QPaintEvent *)
{
pixmap.load(imageFilename());

QPainter paint(this);
paint.drawPixmap(x, y, pixmap);
}

但我个人喜欢 Kerrek 将其设为变量的想法。您甚至可以在不创建额外类(class)的情况下做到这一点:

class Pawn {
public:
Pawn(char const *filename) : filename(filename) { }

private:
char const *filname;
};

Pawn whitePawn("./whitepawn.png");

关于c++ - 为同一类的两个对象绘制不同的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com