Почему моя ширина линии выглядит по-разному в QGraphicsScene с той же шириной QPen? - PullRequest
1 голос
/ 20 марта 2012

Я использую QPainter, чтобы нарисовать свой виджет с этим кодом:

QPen pen(Qt::black, 0.6, Qt::SolidLine);
QPainter painter(this);
painter.setPen(pen);

// vertical 
painter.drawLine(startX,0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);

// horizontal 
pen.setWidth(0.7);
painter.setPen(pen);
painter.drawLine(0,grid*2,70,grid*2);
painter.drawLine(0,grid*4,70,grid*4);
painter.drawLine(0,grid*6,70,grid*6);
painter.drawLine(0,grid*8,70,grid*8);

Когда я добавляю этот элемент в QGraphicsScene, ширина линий иногда выглядит по-разному, особеннокогда я увеличиваю изображение. Может ли кто-нибудь объяснить, почему это происходит и что можно сделать, чтобы это исправить?

Этот снимок экрана демонстрирует проблему:

enter image description here

1 Ответ

2 голосов
/ 20 марта 2012

Это побочный эффект округления с плавающей запятой и интерполяции / рендеринга сцены.На большинстве уровней масштабирования не будет идеального однозначного соответствия пикселей сцены для просмотра пикселей.Это особенно верно для дробных ручек ширины.Вы можете сделать вещи немного более плавными, включив сглаживание в своих QGraphicsView:

...
view.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
....

Есть других подсказок рендеринга , которые также могут быть переданы.

...