我正在尝试在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);
}
但是,除非我打开消除锯齿功能,否则移动项目有时会在网格中留下瑕疵(未绘制的区域)。当视图缩小一点时,它似乎主要发生在低缩放级别。我在这里做错了什么想法?
我真的不想打开抗锯齿,因为线条是严格水平和垂直的,我希望它们尽可能清晰。
任何帮助都很受欢迎, 此致,猫王
答案 0 :(得分:2)