C++ 如何使用复选框更改QGraphicsView背景

C++ 如何使用复选框更改QGraphicsView背景,c++,qt,background,qt5,qgraphicsview,C++,Qt,Background,Qt5,Qgraphicsview,在这段代码中,它改变了QGraphicsView背景。现在,当我选中true复选框时,我需要改变背景。当我设置为checkBox以选中true时,我需要像这样设置背景。当我设置checkBox以选中false时。我需要将QGraphicsView设置为正常默认方式。我怎样才能做到这一点 这是我的密码: main window.cpp #include "mainwindow.h" #include <QGraphicsTextItem> MainWindow::MainWindow

在这段代码中,它改变了
QGraphicsView
背景。现在,当我选中true
复选框时,我需要改变背景。当我设置为
checkBox
以选中
true
时,我需要像这样设置背景。当我设置
checkBox
以选中
false
时。我需要将
QGraphicsView
设置为正常默认方式。我怎样才能做到这一点

这是我的密码:

main window.cpp

#include "mainwindow.h"
#include <QGraphicsTextItem>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    scene = new Scene(this);
    scene->setSceneRect(10,10,260,200);
    view = new QGraphicsView(scene);
    setCentralWidget(view);
}
#include "scene.h"

Scene::Scene(QObject *parent) : QGraphicsScene(parent), gridSize(20)
{
    Q_ASSERT(gridSize > 0);
}

void Scene::drawBackground(QPainter *painter, const QRectF &rect)
{
        QColor c (10,140,255,155);
        painter->setPen(c);
        qreal left = int(rect.left()) - (int(rect.left()) % gridSize);
        qreal top = int(rect.top()) - (int(rect.top()) % gridSize);
        QVarLengthArray<QLineF,100> lines;
        for (qreal x = left; x < rect.right(); x += gridSize)
            lines.append(QLineF(x,rect.top(),x,rect.bottom()));

        for (qreal y = top; y < rect.bottom(); y += gridSize)
            lines.append(QLineF(rect.left(),y,rect.right(),y));
        painter->drawLines(lines.data(),lines.size());
}
#包括“mainwindow.h”
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父窗口)
{
场景=新场景(此);
场景->设置场景(10,10260200);
视图=新的QGraphicsView(场景);
setCentralWidget(视图);
}
main window.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsView>
#include "scene.h"
#include "customrectitem.h"

class MainWindow : public QMainWindow
{
public:
    explicit MainWindow(QWidget *parent = 0);
private:
    QGraphicsView* view;
    QGraphicsScene* scene;
};

#endif // MAINWINDOW_H
#ifndef SCENE_H
#define SCENE_H

#include <QGraphicsScene>
#include <QPainter>
#include <QApplication>

class Scene : public QGraphicsScene
{
    Q_OBJECT
public:
    explicit Scene(QObject *parent = 0);
    int getGridSize() const {return this->gridSize;}

protected:
    void drawBackground (QPainter* painter, const QRectF &rect);
private:
    int gridSize;

};

#endif // SCENE_H
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括“scene.h”
#包括“customrectitem.h”
类主窗口:公共QMainWindow
{
公众:
显式主窗口(QWidget*parent=0);
私人:
QGraphicsView*视图;
qgraphicscene*场景;
};
#endif//main窗口
场景.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsView>
#include "scene.h"
#include "customrectitem.h"

class MainWindow : public QMainWindow
{
public:
    explicit MainWindow(QWidget *parent = 0);
private:
    QGraphicsView* view;
    QGraphicsScene* scene;
};

#endif // MAINWINDOW_H
#ifndef SCENE_H
#define SCENE_H

#include <QGraphicsScene>
#include <QPainter>
#include <QApplication>

class Scene : public QGraphicsScene
{
    Q_OBJECT
public:
    explicit Scene(QObject *parent = 0);
    int getGridSize() const {return this->gridSize;}

protected:
    void drawBackground (QPainter* painter, const QRectF &rect);
private:
    int gridSize;

};

#endif // SCENE_H
#如果场景不可用#
#定义场景
#包括
#包括
#包括
课堂场景:公共Qgraphicscene
{
Q_对象
公众:
显式场景(QObject*parent=0);
int getGridSize()常量{返回此->gridSize;}
受保护的:
无效牵引地面(油漆工*油漆工、施工工和维修工);
私人:
整数网格大小;
};
#endif//SCENE_H
场景.cpp

#include "mainwindow.h"
#include <QGraphicsTextItem>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    scene = new Scene(this);
    scene->setSceneRect(10,10,260,200);
    view = new QGraphicsView(scene);
    setCentralWidget(view);
}
#include "scene.h"

Scene::Scene(QObject *parent) : QGraphicsScene(parent), gridSize(20)
{
    Q_ASSERT(gridSize > 0);
}

void Scene::drawBackground(QPainter *painter, const QRectF &rect)
{
        QColor c (10,140,255,155);
        painter->setPen(c);
        qreal left = int(rect.left()) - (int(rect.left()) % gridSize);
        qreal top = int(rect.top()) - (int(rect.top()) % gridSize);
        QVarLengthArray<QLineF,100> lines;
        for (qreal x = left; x < rect.right(); x += gridSize)
            lines.append(QLineF(x,rect.top(),x,rect.bottom()));

        for (qreal y = top; y < rect.bottom(); y += gridSize)
            lines.append(QLineF(rect.left(),y,rect.right(),y));
        painter->drawLines(lines.data(),lines.size());
}
#包括“scene.h”
场景::场景(QObject*父对象):QGraphicscene(父对象),gridSize(20)
{
Q_断言(gridSize>0);
}
无效场景::牵引地面(油漆工*油漆工、施工工和rect)
{
QColor c(1014025555);
画师->设置笔(c);
qreal left=int(rect.left())-(int(rect.left())%gridSize);
qreal top=int(rect.top())-(int(rect.top())%gridSize);
QVarLengthArray线;
对于(qreal x=left;x绘图线(lines.data(),lines.size());
}

我想到了两个绘制网格的机会:

  • QGraphicsView
    派生类,重载
    paintEvent()
    并绘制网格,然后返回到
    QGraphicsView::paintEvent()

  • 在允许控制可见性的
    QGraphicsItemGroup
    下添加网格线作为场景项

  • 第一种方法的优点是它可以无缝地适应视口的任何大小调整

    这是我的示例代码testQGraphicsView BgGrid.cc

    #include <QtWidgets>
    
    class Canvas: public QGraphicsView {
      private:
        int _gridSize;
        QColor _gridColor;
        bool _gridVisible;
    
      public:
        explicit Canvas(QWidget *pQParent = nullptr):
          QGraphicsView(pQParent),
          _gridSize(20), _gridColor(0x0a8affu), _gridVisible(true)
        { }
    
        bool gridVisible() const { return _gridVisible; }
        void setGridVisible(bool gridVisible)
        {
          _gridVisible = gridVisible;
          viewport()->update();
        }
    
      protected:
        virtual void paintEvent(QPaintEvent *pQEvent) override
        {
          QPainter qPainter(viewport());
          if (_gridVisible) {
            const int wView = viewport()->width(), hView = viewport()->height();
            qPainter.setPen(_gridColor);
            for (int x = _gridSize / 2; x < wView; x += _gridSize) {
              qPainter.drawLine(x, 0, x, hView - 1);
            }
            for (int y = _gridSize / 2; y < hView; y += _gridSize) {
              qPainter.drawLine(0, y, wView - 1, y);
            }
          }
          QGraphicsView::paintEvent(pQEvent);
        }
    };
    
    void makeGrid(
      QGraphicsItemGroup &qItemGrp, const QSize &size,
      int gridSize = 20, const QColor &gridColor = 0x0a8affu)
    {
      const int wView = size.width(), hView = size.height();
      for (int x = gridSize / 2; x < wView; x += gridSize) {
        QGraphicsLineItem *pQItem = new QGraphicsLineItem(x, 0, x, hView - 1);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
      for (int y = gridSize / 2; y < hView; y += gridSize) {
        QGraphicsLineItem *pQItem = new QGraphicsLineItem(0, y, wView - 1, y);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
    }
    
    int main(int argc, char **argv)
    {
      QApplication app(argc, argv);
      // setup GUI
      QWidget qWnd;
      QGridLayout qGrid;
      QLabel qLblL(QString::fromUtf8("Grid as part of scene"));
      qGrid.addWidget(&qLblL, 0, 0);
      QCheckBox qTglGridL(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridL, 0, 1);
      QGraphicsView qGraphView;
      qGrid.addWidget(&qGraphView, 1, 0, 1, 2);
      QLabel qLblR(QString::fromUtf8("Grid painted as background"));
      qGrid.addWidget(&qLblR, 0, 2);
      QCheckBox qTglGridR(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridR, 0, 3);
      Canvas canvas;
      qGrid.addWidget(&canvas, 1, 2, 1, 2);
      qWnd.setLayout(&qGrid);
      qWnd.show();
      // init GUI
      QGraphicsScene qGraphSceneL;
      QGraphicsItemGroup qItemGrid;
      makeGrid(qItemGrid, qGraphView.viewport()->size());
      qGraphSceneL.addItem(&qItemGrid);
      qGraphView.setScene(&qGraphSceneL);
      qTglGridL.setCheckState(
        qItemGrid.isVisible() ? Qt::Checked : Qt::Unchecked);
      qTglGridR.setCheckState(
        canvas.gridVisible() ? Qt::Checked : Qt::Unchecked);
      // install signal handlers
      QObject::connect(&qTglGridL, &QCheckBox::stateChanged,
        [&qItemGrid](int state)
        {
          qItemGrid.setVisible(state != Qt::Unchecked);
        });
      QObject::connect(&qTglGridR, &QCheckBox::stateChanged,
        [&canvas](int state)
        {
          canvas.setGridVisible(state != Qt::Unchecked);
        });
      // runtime loop
      return app.exec();
    }
    
    #include <QtWidgets>
    
    class Canvas: public QGraphicsView {
      private:
        int _gridSize;
        QColor _gridColor;
        bool _gridVisible;
    
      public:
        explicit Canvas(QWidget *pQParent = nullptr):
          QGraphicsView(pQParent),
          _gridSize(20), _gridColor(0x0a8affu), _gridVisible(true)
        { }
    
        bool gridVisible() const { return _gridVisible; }
        void setGridVisible(bool gridVisible)
        {
          _gridVisible = gridVisible;
          viewport()->update();
        }
    
      protected:
        virtual void paintEvent(QPaintEvent *pQEvent) override
        {
          QPainter qPainter(viewport());
          if (_gridVisible) {
            const int wView = viewport()->width(), hView = viewport()->height();
            const QPointF offs = mapToScene(0, 0);
            qPainter.setPen(_gridColor);
            for (int x = (int)offs.x() % _gridSize; x < wView; x += _gridSize) {
              qPainter.drawLine(x, 0, x, hView - 1);
            }
            for (int y = (int)offs.y() % _gridSize; y < hView; y += _gridSize) {
              qPainter.drawLine(0, y, wView - 1, y);
            }
          }
          QGraphicsView::paintEvent(pQEvent);
        }
    };
    
    void makeGrid(
      QGraphicsItemGroup &qItemGrp, const QRect &rect,
      int gridSize = 20, const QColor &gridColor = 0x0a8affu)
    {
      for (int x = rect.x(), xE = x + rect.width(); x < xE; x += gridSize) {
        QGraphicsLineItem *pQItem
          = new QGraphicsLineItem(x, rect.y(), x, rect.height() - 1);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
      for (int y = rect.y(), yE = y + rect.height(); y < yE; y += gridSize) {
        QGraphicsLineItem *pQItem
          = new QGraphicsLineItem(rect.x(), y, rect.width() - 1, y);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
    }
    
    int main(int argc, char **argv)
    {
      QApplication app(argc, argv);
      // setup GUI
      QWidget qWnd;
      QGridLayout qGrid;
      QLabel qLblL(QString::fromUtf8("Grid as part of scene"));
      qGrid.addWidget(&qLblL, 0, 0);
      QCheckBox qTglGridL(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridL, 0, 1);
      QGraphicsView qGraphView;
      qGrid.addWidget(&qGraphView, 1, 0, 1, 2);
      QLabel qLblR(QString::fromUtf8("Grid painted as background"));
      qGrid.addWidget(&qLblR, 0, 2);
      QCheckBox qTglGridR(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridR, 0, 3);
      Canvas canvas;
      qGrid.addWidget(&canvas, 1, 2, 1, 2);
      qWnd.setLayout(&qGrid);
      qWnd.show();
      // init GUI
      QGraphicsScene qGraphSceneL;
      QGraphicsItemGroup qItemGrid;
      makeGrid(qItemGrid, QRect(0, 0, 320, 240));
      qGraphSceneL.addItem(&qItemGrid);
      qGraphView.setScene(&qGraphSceneL);
      qTglGridL.setCheckState(
        qItemGrid.isVisible() ? Qt::Checked : Qt::Unchecked);
      qTglGridR.setCheckState(
        canvas.gridVisible() ? Qt::Checked : Qt::Unchecked);
      // install signal handlers
      QObject::connect(&qTglGridL, &QCheckBox::stateChanged,
        [&qItemGrid](int state)
        {
          qItemGrid.setVisible(state != Qt::Unchecked);
        });
      QObject::connect(&qTglGridR, &QCheckBox::stateChanged,
        [&canvas](int state)
        {
          canvas.setGridVisible(state != Qt::Unchecked);
        });
      // runtime loop
      return app.exec();
    }
    
    在cygwin上的
    bash
    中构建和测试:

    $qmake-qt5 testQGraphicsView-BgGrid.pro
    $make
    g++-c-fno保持内联dllexport-D_GNU_SOURCE-pipe-O2-Wall-W-D_REENTRANT-DQT_NO_DEBUG-DQT_WIDGETS-LIB-DQT_GUI_LIB-DQT_CORE_LIB-I.-isystem/usr/include/qt5-isystem/usr/include/qt5/QtWidgets-isystem/usr/include/QtGui/QtGui-isystem/usr/include/QtGui-isystem/usr/QtCore/QtCore-I.-I/usr/qt5/qts/cygwtestQGraphicsView-BgGrid.cc
    g++-o testQGraphicsView-BgGrid.exe testQGraphicsView-BgGrid.o-lQt5Widgets-lQt5Gui-lQt5Core-lGL-lpthread
    $./testQGraphicsView BgGrid
    
    与X11应用程序相同的程序:


    另一个更新:

    我必须承认,在我的第一个版本中,我着重于如何使用复选框更改QGraphicsView背景,重点是复选框忽略(我不知道)和忽略网格渲染本身的问题(我使用了它)。正如中所指出的,这两种解决方案都存在一些弱点(至少)我应该记录下来

  • 左视图(将栅格包含到场景中)不一定会填充
    视口()
    。IMHO,如果网格填充场景使用的相关范围,这是可以接受的。(这可能是为了将场景可视化为仅覆盖
    视口()
    的一部分)但是,
    makeGrid()
    的参数
    const QSize&size
    与此意图有关,是一个不幸的选择。我修复了这个设计问题,用
    constqrect&rect
    替换它

  • >P>右视图(重载<代码> PANTEVION()/代码>)没有考虑场景的可能滚动。通过将左上角映射到场景坐标(<代码> const qPototfOffs= MpToSCONEN(0, 0);),并将偏移作为循环起始值考虑。 更新示例代码
    TestQGraphicsView BgGrid.cc

    #include <QtWidgets>
    
    class Canvas: public QGraphicsView {
      private:
        int _gridSize;
        QColor _gridColor;
        bool _gridVisible;
    
      public:
        explicit Canvas(QWidget *pQParent = nullptr):
          QGraphicsView(pQParent),
          _gridSize(20), _gridColor(0x0a8affu), _gridVisible(true)
        { }
    
        bool gridVisible() const { return _gridVisible; }
        void setGridVisible(bool gridVisible)
        {
          _gridVisible = gridVisible;
          viewport()->update();
        }
    
      protected:
        virtual void paintEvent(QPaintEvent *pQEvent) override
        {
          QPainter qPainter(viewport());
          if (_gridVisible) {
            const int wView = viewport()->width(), hView = viewport()->height();
            qPainter.setPen(_gridColor);
            for (int x = _gridSize / 2; x < wView; x += _gridSize) {
              qPainter.drawLine(x, 0, x, hView - 1);
            }
            for (int y = _gridSize / 2; y < hView; y += _gridSize) {
              qPainter.drawLine(0, y, wView - 1, y);
            }
          }
          QGraphicsView::paintEvent(pQEvent);
        }
    };
    
    void makeGrid(
      QGraphicsItemGroup &qItemGrp, const QSize &size,
      int gridSize = 20, const QColor &gridColor = 0x0a8affu)
    {
      const int wView = size.width(), hView = size.height();
      for (int x = gridSize / 2; x < wView; x += gridSize) {
        QGraphicsLineItem *pQItem = new QGraphicsLineItem(x, 0, x, hView - 1);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
      for (int y = gridSize / 2; y < hView; y += gridSize) {
        QGraphicsLineItem *pQItem = new QGraphicsLineItem(0, y, wView - 1, y);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
    }
    
    int main(int argc, char **argv)
    {
      QApplication app(argc, argv);
      // setup GUI
      QWidget qWnd;
      QGridLayout qGrid;
      QLabel qLblL(QString::fromUtf8("Grid as part of scene"));
      qGrid.addWidget(&qLblL, 0, 0);
      QCheckBox qTglGridL(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridL, 0, 1);
      QGraphicsView qGraphView;
      qGrid.addWidget(&qGraphView, 1, 0, 1, 2);
      QLabel qLblR(QString::fromUtf8("Grid painted as background"));
      qGrid.addWidget(&qLblR, 0, 2);
      QCheckBox qTglGridR(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridR, 0, 3);
      Canvas canvas;
      qGrid.addWidget(&canvas, 1, 2, 1, 2);
      qWnd.setLayout(&qGrid);
      qWnd.show();
      // init GUI
      QGraphicsScene qGraphSceneL;
      QGraphicsItemGroup qItemGrid;
      makeGrid(qItemGrid, qGraphView.viewport()->size());
      qGraphSceneL.addItem(&qItemGrid);
      qGraphView.setScene(&qGraphSceneL);
      qTglGridL.setCheckState(
        qItemGrid.isVisible() ? Qt::Checked : Qt::Unchecked);
      qTglGridR.setCheckState(
        canvas.gridVisible() ? Qt::Checked : Qt::Unchecked);
      // install signal handlers
      QObject::connect(&qTglGridL, &QCheckBox::stateChanged,
        [&qItemGrid](int state)
        {
          qItemGrid.setVisible(state != Qt::Unchecked);
        });
      QObject::connect(&qTglGridR, &QCheckBox::stateChanged,
        [&canvas](int state)
        {
          canvas.setGridVisible(state != Qt::Unchecked);
        });
      // runtime loop
      return app.exec();
    }
    
    #include <QtWidgets>
    
    class Canvas: public QGraphicsView {
      private:
        int _gridSize;
        QColor _gridColor;
        bool _gridVisible;
    
      public:
        explicit Canvas(QWidget *pQParent = nullptr):
          QGraphicsView(pQParent),
          _gridSize(20), _gridColor(0x0a8affu), _gridVisible(true)
        { }
    
        bool gridVisible() const { return _gridVisible; }
        void setGridVisible(bool gridVisible)
        {
          _gridVisible = gridVisible;
          viewport()->update();
        }
    
      protected:
        virtual void paintEvent(QPaintEvent *pQEvent) override
        {
          QPainter qPainter(viewport());
          if (_gridVisible) {
            const int wView = viewport()->width(), hView = viewport()->height();
            const QPointF offs = mapToScene(0, 0);
            qPainter.setPen(_gridColor);
            for (int x = (int)offs.x() % _gridSize; x < wView; x += _gridSize) {
              qPainter.drawLine(x, 0, x, hView - 1);
            }
            for (int y = (int)offs.y() % _gridSize; y < hView; y += _gridSize) {
              qPainter.drawLine(0, y, wView - 1, y);
            }
          }
          QGraphicsView::paintEvent(pQEvent);
        }
    };
    
    void makeGrid(
      QGraphicsItemGroup &qItemGrp, const QRect &rect,
      int gridSize = 20, const QColor &gridColor = 0x0a8affu)
    {
      for (int x = rect.x(), xE = x + rect.width(); x < xE; x += gridSize) {
        QGraphicsLineItem *pQItem
          = new QGraphicsLineItem(x, rect.y(), x, rect.height() - 1);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
      for (int y = rect.y(), yE = y + rect.height(); y < yE; y += gridSize) {
        QGraphicsLineItem *pQItem
          = new QGraphicsLineItem(rect.x(), y, rect.width() - 1, y);
        pQItem->setPen(gridColor);
        qItemGrp.addToGroup(pQItem);
      }
    }
    
    int main(int argc, char **argv)
    {
      QApplication app(argc, argv);
      // setup GUI
      QWidget qWnd;
      QGridLayout qGrid;
      QLabel qLblL(QString::fromUtf8("Grid as part of scene"));
      qGrid.addWidget(&qLblL, 0, 0);
      QCheckBox qTglGridL(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridL, 0, 1);
      QGraphicsView qGraphView;
      qGrid.addWidget(&qGraphView, 1, 0, 1, 2);
      QLabel qLblR(QString::fromUtf8("Grid painted as background"));
      qGrid.addWidget(&qLblR, 0, 2);
      QCheckBox qTglGridR(QString::fromUtf8("Show Grid"));
      qGrid.addWidget(&qTglGridR, 0, 3);
      Canvas canvas;
      qGrid.addWidget(&canvas, 1, 2, 1, 2);
      qWnd.setLayout(&qGrid);
      qWnd.show();
      // init GUI
      QGraphicsScene qGraphSceneL;
      QGraphicsItemGroup qItemGrid;
      makeGrid(qItemGrid, QRect(0, 0, 320, 240));
      qGraphSceneL.addItem(&qItemGrid);
      qGraphView.setScene(&qGraphSceneL);
      qTglGridL.setCheckState(
        qItemGrid.isVisible() ? Qt::Checked : Qt::Unchecked);
      qTglGridR.setCheckState(
        canvas.gridVisible() ? Qt::Checked : Qt::Unchecked);
      // install signal handlers
      QObject::connect(&qTglGridL, &QCheckBox::stateChanged,
        [&qItemGrid](int state)
        {
          qItemGrid.setVisible(state != Qt::Unchecked);
        });
      QObject::connect(&qTglGridR, &QCheckBox::stateChanged,
        [&canvas](int state)
        {
          canvas.setGridVisible(state != Qt::Unchecked);
        });
      // runtime loop
      return app.exec();
    }
    
    #包括
    类画布:公共QGraphicsView{
    私人:
    整数网格大小;
    QColor\u gridColor;
    布尔网格可见;
    公众:
    显式画布(QWidget*pQParent=nullptr):
    QGraphicsView(pQParent),
    _gridSize(20),\u gridColor(0x0a8affu),\u gridVisible(true)
    { }
    bool gridVisible()常量{return\u gridVisible;}
    void setGridVisible(bool gridVisible)
    {
    _gridVisible=gridVisible;
    viewport()->update();
    }
    受保护的:
    虚拟无效paintEvent(QPaintEvent*pQEvent)覆盖
    {
    QPainter QPainter(视口());
    如果(_gridVisible){
    const int wView=视口()->宽度(),hView=视口()->高度();
    常数QPointF offs=maptosene(0,0);
    qPainter.setPen(_gridColor);
    对于(int x=(int)offs.x()%\u gridSize;x