Qt QGraphicsScene中顯示網格


QGraphicsLineItem

直接添加 QGraphicsLineItem 類型的item即可,在scene中拖動或者縮放時候,網格不會變形和模糊。

QPen pen2(QColor(128, 128, 128, 50));

    for (float x = 0.5 * MAP_SCALE; x <= GRID_RANGE * MAP_SCALE; x += 0.5 * MAP_SCALE)
    {
        QLineF line(x, 0, x, GRID_RANGE * MAP_SCALE);

        QGraphicsLineItem* tmpVertical = new QGraphicsLineItem(line);
        tmpVertical->setPen(pen2);

        gridItermVec.push_back(tmpVertical);

        if (show_grid_)
        {
            addItem(tmpVertical);
        }
    }

    //現在添加水平線
    for (float y = 0.5 * MAP_SCALE; y <= GRID_RANGE * MAP_SCALE; y += 0.5 * MAP_SCALE)
    {
        QLineF line(0, y, GRID_RANGE * MAP_SCALE, y);
        QGraphicsLineItem* tmpHorizontal = new QGraphicsLineItem(line);
        tmpHorizontal->setPen(pen2);
        gridItermVec.push_back(tmpHorizontal);

        if (show_grid_)
        {
            addItem(tmpHorizontal);
        }
    }

顯示效果如下

QPixmap

1. QGraphicsScene繼承類中的構造函數

2.重寫 類的虛函數  void drawBackground(QPainter *painter, const QRectF &rect);

    QPolygonF myPolygon1;
    myPolygon1 << QPointF(0, 10) << QPointF(20, 10);
    QPolygonF myPolygon2;
    myPolygon2 << QPointF(10, 0) << QPointF(10, 20);
    QPixmap pixmap(20, 20);
    pixmap.fill(Qt::transparent);
    QPainter painter(&pixmap);

    QVector<qreal> dashes;//line style--虛線  
    qreal space = 2;
    dashes << 2 << space << 2 << space;
    QPen pen(Qt::lightGray, 1);
    pen.setDashPattern(dashes);
    pen.setWidth(1);

    painter.setPen(pen);
    painter.translate(0, 0);
    painter.drawPolyline(myPolygon1);
    painter.drawPolyline(myPolygon2);
    this->setBackgroundBrush(pixmap);*/

或者如下代碼

    QPolygonF mypolygon1, mypolygon2;
    mypolygon1 << QPointF(0, 5) << QPointF(10, 5);
    mypolygon2 << QPointF(5, 0) << QPointF(5, 10);
    QPixmap pix(10, 10);
    pix.fill(Qt::transparent);
    QPainter painter(&pix);
    QVector <qreal> dashes;
    dashes << 2 << 2 << 2 << 2;
    QPen pen(Qt::darkCyan, 0.2);
    pen.setDashPattern(dashes);
    painter.setPen(pen);
    painter.translate(0, 0);
    painter.drawPolyline(mypolygon1);
    painter.drawPolyline(mypolygon2);
    this->setBackgroundBrush(pix);

二者沒有本質區別都是用Qpixmap 作為背景實現的柵格,但是在 QGraphicsScene 中拖動鼠標時候會造成重影,目前不知道怎么消除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM