当我定义几个具有小尺寸的 QGraphicsitems 例如将公制线直接转换为具有相同长度(例如几米)的 QGraphicLineItems 时,整个重新绘制系统变得非常慢,甚至容易崩溃。另一方面,当项目“更大”(长度> 100)时,不会出现问题。
举一个更具体的例子:我使用以下代码将 QGraphicItems 转换为像素图。
QGraphicsPixmapItem* transformToPixmapItem(std::vector<QGraphicsItem>& items,int maxRes){
QRectF boundingRect;
boostForeach(QGraphicsItem* pItem,items) {
boundingRect = boundingRect.united(pItem->boundingRect());
}
QSize size(boundingRect.size().toSize());
double const scale = std::min(16.0,double(maxRes)/boundingRect.size().width());
QPixmap pixmap(size*scale);
pixmap.fill(Qt::transparent);
QPainter p(&pixmap);
//p.setCompositionMode( QPainter::CompositionMode_Source );
p.translate(-boundingRect.topLeft()*scale);
p.scale(scale,scale);
QStyleOptionGraphicsItem opt;
boostForeach(QGraphicsItem* item,items) {
item->paint(&p, &opt, 0);
}
p.end();
deleteVector(items);
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(pixmap);
item->setScale(1.0/scale);
item->setOffset(boundingRect.topLeft()*scale);
qDebug() << "Pixmap done. 1/Scale " << 1.0/scale;
return item;
}
在“更大”的项目上,这在它崩溃的小项目上运行良好,条件似乎是 1/scale。如果用于缩小生成的像素图项的此值变得太小,则函数完成,但生成的项的呈现会崩溃。除此之外,如前所述,其物理尺寸已增加例如 100 倍的对象的渲染似乎比小对象快得多。关于推荐的图形尺寸是否有一些一般指导方针,这种效果来自哪里?