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

  • 相关阅读:
    Golden Tiger Claw (KM算法)
    Xor Sum题解>----(思维+递归)
    Mister B and PR Shifts(思维)
    Traffic Real Time Query System-(点双缩点+LCA)
    最大的位或----(极简代码)
    萌萌哒题解_倍增并查集
    连续攻击游戏(递增1)题解------(并查集)
    道路与航线 (连通块Dijkstra+拓扑序||spfa+slf优化)
    美团校招-表达式求值
    天猫前端电话面试
  • 原文地址:https://www.cnblogs.com/flyinggod/p/12970874.html
Copyright © 2011-2022 走看看