48 lines
1.6 KiB
C++
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);
|
||
|
|
}
|
||
|
|
|