Qt pixmaps的QList或指向pixmaps的指针的QList

Qt pixmaps的QList或指向pixmaps的指针的QList,qt,Qt,我必须合并一些pixmaps,我想先将它们添加到qlist中,然后再合并它们。虽然我知道如何合并它们,但我不知道应该使用哪个pixmaps的qlist或pixmaps指针的qlist,区别是什么,以及是否可以使用pixmaps指针的qlist进行合并 GraphicsPixmapItem *pix =static_cast<QGraphicsPixmapItem *>(item1); QGraphicsPixmapItem *pix2 =static_cast<QGraph

我必须合并一些pixmaps,我想先将它们添加到qlist中,然后再合并它们。虽然我知道如何合并它们,但我不知道应该使用哪个pixmaps的qlist或pixmaps指针的qlist,区别是什么,以及是否可以使用pixmaps指针的qlist进行合并

 GraphicsPixmapItem *pix =static_cast<QGraphicsPixmapItem *>(item1);
 QGraphicsPixmapItem *pix2 =static_cast<QGraphicsPixmapItem *>(item2);


 ////////////////Merge Pixmaps/////////////////////

 int pix_height=75;
 int pix_width=50;
 //use QList of pixmaps
 QList <QPixmap> dragImages;
 dragImages<<pix->pixmap()<<pix2->pixmap();//it works
 QSize dragPixSize(pix_width*dragImages.size()+50,pix_height);
 QPixmap dragpix(dragPixSize);
 dragpix.fill(Qt::transparent);
 QPainter painter;
 painter.begin(&dragpix);

 for(int i=0; i < dragImages.size(); ++i){
 painter.drawPixmap(pix_width*i,0,pix_width,pix_height,dragImages.at(i));
 }
 painter.end();
 //////////////////////////////////////////
 //or use Qlist of pointers to pixmaps?
 QList <QPixmap*> pix; //how do I add pix->pixmap() here? 
GraphicsPixmapItem*pix=static\u cast(项目1);
QGraphicsPixmapItem*pix2=静态_-cast(项目2);
////////////////合并像素贴图/////////////////////
int pix_高度=75;
int pix_宽度=50;
//使用pixmaps的QList
QList绘图系统;

dragImagesA
QPixmap
是一个便宜的复制值,因此您不需要使用指针:您可以直接使用这些值。如果您不知道为什么需要使用
QList
:不要使用它。在这种情况下不推荐使用它-使用
QVector

首先,让我们从图形项向量中提取像素贴图:

#include <QtWidgets>
#include <algorithm>

using QPixmapVector = QVector<QPixmap>;

QPixmapVector getPixmaps(const QVector<QGraphicsItem*> &items) {
  QPixmapVector ret;
  for (auto item : items) {
    auto *pixItem = qgraphicsitem_cast<QGraphicsPixmapItem*>(item);
    if (pixItem)
      ret.push_back(pixItem->pixmap());
  }
  return ret;
}
您想要的合并操作的特定变体是:

QPixmap myMerge(QGraphicsItem *item1, QGraphicsItem *item2) {
  auto pixmaps = getPixmaps({item1, item2});
  return mergePixmaps(pixmaps, {50, 75});
}

QPixmap是写时复制类型,所以您通常应该将它们作为值(或引用,如果需要)处理。这同样适用于所有Qt容器。如果您有指向CoW类型的指针,您应该怀疑原因。
QList
:)
QPixmap myMerge(QGraphicsItem *item1, QGraphicsItem *item2) {
  auto pixmaps = getPixmaps({item1, item2});
  return mergePixmaps(pixmaps, {50, 75});
}