QT5:使用 drawPixMap() 在另一个矩形之上绘制矩形

QT5: Drawing rect on top of another rect using drawPixMap()

我使用 drawPixmap() 正确吗?

本质上,我的目标是拍摄一个 tileset 图像,并用自定义的 tile 图像替换单个 tile。

我可以让两个图像都加载到屏幕上,但是当我调用 drawPixmap() 时,原始图像根本没有改变。

提前致谢。

void replaceCustomTile(QPixmap custom, QPixmap target, int whichTile) {
    QRect rect(0, 0 + (squareTileSize * whichTile), squareTileSize, squareTileSize);
    QRect customRect = custom.rect();
    QPainter painter(this);
    painter.drawPixmap(rect, target, customRect);
    painter.end();
}

编辑:

replaceCustomTile 的调用方式如下:

QPixmap terrainTiles(":/static/Terrain.png");
QPixmap customTile(":/static/Smiles.png");
replaceCustomTile(customTile, terrainTiles, 0);

要通过 this 初始化 QPainter,如果您想在某个小部件上绘制它,则必须从小部件 paintEvent(QPaintEvent *) 调用它。因此,在这种情况下,应该从事件处理程序调用 replaceCustomTile()

要在另一个像素图上绘制一些像素图 QPainter 应该使用 QPainter::begin():

由目标像素图初始化
QPainter painter;
painter.begin(&target);
painter.drawPixmap(rect, custom);
painter.end();

上面的代码在 QPixmap target 上将 QPixmap custom 绘制到给定的 QRect rect 中。 target被修改。