QGraphicsVeiw сделаны следующие настройки:
view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
view->setResizeAnchor(QGraphicsView::AnchorViewCenter);
view->setRenderHints(QPainter::Antialiasing|QPainter::NonCosmeticDefaultPen);
view->setViewportUpdateMode( QGraphicsView::SmartViewportUpdate );
view->setCacheMode(QGraphicsView::CacheNone);
view->setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing);
view унаследован от QGrraphicsView и переопределена отрисовка (за ради повышения её скорости )
void CMyGraphicsView::paintEvent ( QPaintEvent * event )
{
QPaintEvent adjusted = *event;
if(event->region().rects().size() > 10)
{
QRect rect = event->region().boundingRect().adjusted(-1,-1,1,1);
adjusted = QPaintEvent(rect);
}
QGraphicsView::paintEvent(&adjusted);
return;
}
Унаследовал item от QGraphicsPolygonItem и переопределил отрисовку (боремся за скорость отрисовки
)
void CMyPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
//pen создан в конструкторе item'а
painter->setPen(pen);
painter->setClipRect( option->exposedRect ); // собственно скорость это тут
painter->setRenderHint(QPainter::Antialiasing);
QPainterPath path;
//my_polygon - QPolygonF
path.moveTo(my_polygon.at(0));
int i=1;
while (i + 2 < my_polygon.size())
{
//тут Безье куда без него :)
path.cubicTo(my_polygon.at(i), my_polygon.at(i+1), my_polygon.at(i+2));
i += 3;
}
while(i < my_polygon.size())
{
path.lineTo(my_polygon.at(i));
++i;
}
painter->strokePath(path, pen);
return;
}
И глюк вот такой - полки, т.е. горизонтальные линии рисуются очень тонкими, я бы сказал волосяными. Если, утрировано, толщина pen задана 5, то полки рисуются визуально с толщиной пера 1.
Такой эффект проявляется как при маштабе 1:1, так и при увеличении (например к примеру толщина 10 тогда полки 2 )
Как с этим побороться?
ЗЫ Такой же глюк имеет место быть и для вертикальных полок (не написал сразу).
тут вот Alex03 мне подсказывает мол "надо выложить код который можно собрать и потестить". Я то надеялся, что кто нибудь сталкивался с подобным.
утрированый пример глюка во вложении: