Я разрабатываю приложение, похожее на художника, и хочу, чтобы в моем приложении было несколько слоев для разных рисунков. Для этой цели у меня есть массив, содержащий 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% уверен, что массив растровых изображений (массив Все слои) содержит весь рисунок, который я хочу. Теперь я хочу последовательно объединить все рисунки с исходным изображением. Вот как я пытаюсь этого добиться:
void MeasuresWidget::on_actionAct_triggered()
{
ForMerging = &OriginalImage;
for(int i=0;i<5;i++)
MergePixmaps(AllLayers[i], *ForMerging);
}
где Для слияния — это временный объект QPixmap для, ну, слияния, а Исходное изображение — это, несомненно, QPixMap, содержащий исходное изображение. Опять же, я на 100% уверен, что все слои содержат его изображение на прозрачном фоне. Проблема, с которой я столкнулся, заключается в том, что в результате исходное изображение объединяется только с последним рисунком, то есть с Все слои[4]. Если я заставлю я работать от 0 до 2 (не включая), например, результатом будет исходное изображение, объединенное только с Все слои[1]. Я боролся с этой проблемой в течение определенного периода времени и понятия не имею, что может быть не так, поэтому я ищу любую возможную помощь.
Попробуйте объединить все QPixmap при одном и том же вызове MergePixmaps. Для этого измените свою переменную Source
в функции MergePixmap на свой объект 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);
}
Я применил ваше предложение, и оно, наконец, сработало. Однако я не использовал ваш код, но все же пометил ваш пост как ответ. Спасибо, сэр
Вы передаете
QPixmap
в качестве параметра значения. Итак,target
— это скопировано вMergePixmaps
. Передайте свои параметры в качестве эталонаMergePixmaps(QPixmap const& source, QPixmap& target)
.