Почему у Qt проблемы с обработкой небольших QGraphicsItems

Когда я определяю несколько 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 / масштаб. Если это значение, используемое для уменьшения размера результирующего элемента растрового изображения, становится слишком маленьким, функция завершается, но рендеринг результирующего элемента происходит сбой.
Помимо этого, как уже говорилось, визуализация объектов, физический размер которых был увеличен, например, в 100 раз кажется намного быстрее, чем маленькие объекты.
Есть ли какие-то общие указания по рекомендуемым размерам графики и откуда этот эффект?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector