0

当我定义几个具有小尺寸的 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 倍的对象的渲染似乎比小对象快得多。关于推荐的图形尺寸是否有一些一般指导方针,这种效果来自哪里?

4

0 回答 0