C++ QT5:使用drawPixMap()在另一个矩形上绘制矩形
我是否正确使用了C++ QT5:使用drawPixMap()在另一个矩形上绘制矩形,c++,qt,qpainter,qpixmap,C++,Qt,Qpainter,Qpixmap,我是否正确使用了drawPixmap() 本质上,我的目标是获取一个tileset图像,并用一个自定义tile图像替换单个tile 我可以在屏幕上加载这两个图像,但当我调用drawPixmap()时,原始图像根本不会改变 提前谢谢 void replaceCustomTile(QPixmap custom, QPixmap target, int whichTile) { QRect rect(0, 0 + (squareTileSize * whichTile), squareTile
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);
若要通过
此初始化QPainter
,必须从小部件paintEvent(QPaintEvent*)
调用它,才能在某些小部件上绘制它。因此,在这种情况下,应该从事件处理程序调用replaceCustomTile()
要在另一个pixmap上绘制一些pixmap,目标pixmap应使用QPainter::begin()
初始化QPainter
:
上述代码在QPixmap目标
上将QPixmap自定义
绘制到给定的QRect
中。目标已修改。如何调用replaceCustomTile()
?replaceCustomTile()
应从事件处理程序调用::paintEvent(QPaintEvent*)
。要绘制customTile
,应将其作为此类drawPixmap
版本的第二个参数提供。不清楚为什么您为该函数提供了两个不同的pixmaps。可能我理解不正确。您想在小部件上绘制它,还是只想通过custom
更改target
pixmap的一部分,并将结果保留为另一个pixmap?@OrestHera是的,很抱歉造成混淆。我想通过自定义更改目标的一部分。将结果保留为pixmap很好,或者覆盖现有的目标pixmap也很好。虽然解决方案与我期望的不完全一样,但我认为它会删除现有的平铺,但此解决方案只是覆盖了自定义的覆盖矩形。有没有一个快速的方法来替换它?没关系,找到了擦除的解决方案橡皮擦()
@Mickey您也可以在drawPixmap
之前使用QPaint::CompositionMode\u Clear
(或QPaint::CompositionMode\u Source
)进行检查。
QPainter painter;
painter.begin(&target);
painter.drawPixmap(rect, custom);
painter.end();