QGraphicsScene에서 안티 앨리어싱없이 배경 눈금을 그리는하려고 할 때 : 나는이 켜지지 않는 한,유물 내가 QGraphicsScene 서브 클래스의 drawBackground() 함수의 배경 눈금을 그릴려고
void Scene::drawBackground(QPainter *painter, const QRectF &rect)
{
const int gridSize = 50;
const int realLeft = static_cast<int>(std::floor(rect.left()));
const int realRight = static_cast<int>(std::ceil(rect.right()));
const int realTop = static_cast<int>(std::floor(rect.top()));
const int realBottom = static_cast<int>(std::ceil(rect.bottom()));
// Draw grid.
const int firstLeftGridLine = realLeft - (realLeft % gridSize);
const int firstTopGridLine = realTop - (realTop % gridSize);
QVarLengthArray<QLine, 100> lines;
for (qreal x = firstLeftGridLine; x <= realRight; x += gridSize)
lines.append(QLine(x, realTop, x, realBottom));
for (qreal y = firstTopGridLine; y <= realBottom; y += gridSize)
lines.append(QLine(realLeft, y, realRight, y));
//painter->setRenderHint(QPainter::Antialiasing);
painter->setPen(QPen(QColor(220, 220, 220), 0.0));
painter->drawLines(lines.data(), lines.size());
// Draw axes.
painter->setPen(QPen(Qt::lightGray, 0.0));
painter->drawLine(0, realTop, 0, realBottom);
painter->drawLine(realLeft, 0, realRight, 0);
}
그러나 앤티 앨리어싱을 사용하면 주위의 항목을 이동하면 그리드에 아티팩트가 남을 수 있습니다 (그려지지 않은 부분). 보기가 약간 축소되면 낮은 줌 레벨에서 주로 발생합니다. 내가 여기서 잘못하고있는 아이디어가 있습니까?
라인이 엄격하게 수평 및 수직이므로 앤티 앨리어싱을 켜고 싶지는 않을 것입니다. 가능한 한 선명하게 보이기를 바랍니다.
http://doc.qt.io/qt-5/qgraphicsview.html#viewportUpdateMode-prop
아마도 배경 캐싱 :
http://doc.qt.io/qt-5/qgraphicsview.html#cacheMode-prop
어떤 도움이 많이 다른 뷰포트 업데이트 방법을 사용할 필요가 같은
그림을 그리기 전에 장면의 내용을 명시 적으로 지우려고 했습니까? 눈금 선을 그리기 전에 흰색 직사각형 (또는 배경색이 무엇이든간에)을 그려보고 도움이되는지 확인하십시오. – Thomi
먼저 기본 클래스 함수를 호출 해 보았습니까? 어쩌면 배경을 먼저 지우는 것이 좋습니다 :'QGraphicsScene :: drawBackground (painter, rect)'그리고 모든 사용자 정의 코드. –
프로그램 시작시 setViewportUpdateMode (QGraphicsView :: FullViewportUpdate)를 호출 해 보았습니까? – Tom