3

QGraphicsView の背景にグリッド線を描画しました

  drawbackground(QPainter *painter, const QRectF &rect)
    {
    QVarLengthArray<QLineF, 100> linesX;
    for (qreal x = left; x < sceneRect.right(); x += gridInterval )
    {

    linesX.append(QLineF(x, sceneRect.top(), x, sceneRect.bottom()));
    }

    QVarLengthArray<QLineF, 100> linesY;
    for (qreal y = top; y < sceneRect.bottom(); y += gridInterval ){

    linesY.append(QLineF(sceneRect.left(), y, sceneRect.right(), y));
    }

    painter->drawLines(linesX.data(), linesX.size());
    painter->drawLines(linesY.data(), linesY.size());
    }

そして、私はビューをスケーリングします

void
ViewPort::zoomIn()
{
    zoom(qreal(1.2));
}

void
ViewPort::zoomOut()
{
    zoom(1 / qreal(1.2));
}

void
ViewPort::zoom(qreal scaleFactor)
{

    qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width();

    if (factor < 1 || factor > 100)
        return;

    scale(scaleFactor, scaleFactor);

}

現在、シーンにはスケーリングする必要があるアイテムがたくさんありますが、graphicsView drawBackground に描画したグリッド線を無視する必要があります。gridLines のスケール変換を無視するにはどうすればよいですか?

QPainter::resetTransform() を試しましたが、無駄でした..

4

1 に答える 1