• 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 中拖动鼠标时候会造成重影,目前不知道怎么消除

  • 相关阅读:
    HDU 5698 瞬间移动
    HDU 5695 Gym Class
    HDU 5694 BD String
    HDU 5692 Snacks
    HDU 5691 Sitting in Line
    胜利大逃亡
    BFS(广度优先搜索)
    计算直线的交点数
    Division
    Jesse's Code
  • 原文地址:https://www.cnblogs.com/flyinggod/p/12970874.html
Copyright © 2020-2023  润新知