Артефакты при попытке нарисовать фоновую сетку без сглаживания в QGraphicsScene - PullRequest
2 голосов
/ 06 мая 2010

Я пытаюсь нарисовать фоновую сетку в функции drawBackground () моего подкласса QGraphicsScene:

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);
}

Однако, если я не включу сглаживание, перемещение элементов вокруг иногда оставляет артефактысетка (области, где она не нарисована).Похоже, это в основном происходит при низких уровнях масштабирования, когда изображение немного уменьшено.Любые идеи, что я мог бы сделать неправильно здесь

1005 * Я бы не хотел включать сглаживание, поскольку линии строго горизонтальны и вертикальны, и я хотел бы, чтобы они были такими же четкими, каквозможно.

Любая помощь очень ценится, С уважением, Элвис

1 Ответ

2 голосов
/ 14 июня 2011

Похоже, вам нужно использовать другой метод обновления окна просмотра:

http://doc.qt.io/qt-5/qgraphicsview.html#viewportUpdateMode-prop

и, возможно, фоновое кэширование:

http://doc.qt.io/qt-5/qgraphicsview.html#cacheMode-prop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...