合并多个QPixmap的问题

时间:2019-05-31 06:39:12

标签: c++ qt qlabel qpixmap

我正在开发类似画家的应用程序,并且我希望我的应用程序具有用于不同图形的多层。为此,我有一个数组,其中包含具有透明背景的QPixmaps,并且我有一个合并两个QPixmaps(在另一个上绘制)的函数。就像这样:

    void MeasuresWidget::MergePixmaps(QPixmap source, QPixmap target)//draw source on target
{
    QPainter painter(&target);
    painter.drawPixmap(target.rect(),source,source.rect());
    painter.end();
    imageLabel->setPixmap(target);
}

我100%确保像素图数组( AllLayers 数组)包含我想要的所有图形。现在,我要一致地将所有图形与原始图像合并。这是我尝试实现的方法:

void MeasuresWidget::on_actionAct_triggered()
{
    ForMerging = &OriginalImage;
    for(int i=0;i<5;i++)
        MergePixmaps(AllLayers[i], *ForMerging);
}

其中 ForMerging 是用于合并的临时QPixmap对象,而 OriginalImage 无疑是包含原始图像的QPixMap。 同样,我100%确信,所有图层都包含透明背景上的图像。我面临的问题是,结果原始图像仅与最后一个图形合并,即与 AllLayers [4] 合并。例如,如果我使 i 从0到2(不包括在内)运行,则结果将是仅与 AllLayers [1] 合并的原始图像。我已经为这个问题苦苦挣扎了一段时间,不知道可能出什么问题了,所以我正在寻求任何可能的帮助。

1 个答案:

答案 0 :(得分:1)

尝试在对MergePixmaps的同一调用中合并所有QPixmap。为此,将MergePixmap函数中的Source变量更改为AllLayers对象,如下所示:

void MeasuresWidget::MergePixmaps(AllLayers *source, QPixmap target)//draw source on target
{
    QPainter painter(&target);
    for(int i = 0; i < source->lenght();i++){ 
       painter.drawPixmap(target.rect(),source->at(i),source->at(i).rect());
    }
    painter.end();
    imageLabel->setPixmap(target);
}