Qt pixmaps的QList或指向pixmaps的指针的QList
我必须合并一些pixmaps,我想先将它们添加到qlist中,然后再合并它们。虽然我知道如何合并它们,但我不知道应该使用哪个pixmaps的qlist或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
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绘图系统;
dragImagesAQPixmap
是一个便宜的复制值,因此您不需要使用指针:您可以直接使用这些值。如果您不知道为什么需要使用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});
}