#include "qimageview.h" #include QImageView::QImageView(QWidget *parent): QGraphicsView(parent) { // 隐藏水平/竖直滚动条 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //QPainter::Antialiasing //绘图抗锯齿 //QPainter::TextAntialiasing //绘制的字体抗锯齿 setRenderHints(QPainter::Antialiasing); //设置背景笔刷 setBackgroundBrush(BackgroundColor); } void QImageView::drawBackground(QPainter *painter, const QRectF &r) { QGraphicsView::drawBackground(painter, r); auto drawGrid = [&](double gridStep) { QRect windowRect = rect(); QPointF tl = mapToScene(windowRect.topLeft()); QPointF br = mapToScene(windowRect.bottomRight()); double left = std::floor(tl.x() / gridStep - 0.5); double right = std::floor(br.x() / gridStep + 1.0); double bottom = std::floor(tl.y() / gridStep - 0.5); double top = std::floor(br.y() / gridStep + 1.0); // vertical lines for (int xi = int(left); xi <= int(right); ++xi) { QLineF line(xi * gridStep, bottom * gridStep, xi * gridStep, top * gridStep); painter->drawLine(line); } // horizontal lines for (int yi = int(bottom); yi <= int(top); ++yi) { QLineF line(left * gridStep, yi * gridStep, right * gridStep, yi * gridStep); painter->drawLine(line); } }; QPen pfine(FineGridColor, 1.0); painter->setPen(pfine); drawGrid(15); QPen p(CoarseGridColor, 1.0); painter->setPen(p); drawGrid(150); }