Files
2024-02-27 14:55:21 +08:00

48 lines
1.6 KiB
C++

#include "qimageview.h"
#include <cmath>
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);
}