Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT5:使用drawPixMap()在另一个矩形上绘制矩形_C++_Qt_Qpainter_Qpixmap - Fatal编程技术网

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();