Qt 小例子学习26 - 画网格
GraphicsScene.h
#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H
#include <QGraphicsScene>
#include <QPainter>
class GraphicsScene : public QGraphicsScene
{
int mGridSize;
QColor mGridColor;
bool mGridVisible;
Q_OBJECT
public:
GraphicsScene(QObject *parent = Q_NULLPTR)
: QGraphicsScene(parent), mGridSize(20), mGridColor(0x0a8affu),
mGridVisible(true) {}
bool gridVisible() const { return mGridVisible; }
void setGridVisible(bool gridVisible)
{
if (mGridVisible != gridVisible)
{
mGridVisible = gridVisible;
update();
}
}
protected:
void drawBackground(QPainter *painter, const QRectF &rect)
{
if (mGridVisible)
{
QRect r = rect.toRect();
int xmin = r.left() - r.left() % mGridSize - mGridSize;
int ymin = r.top() - r.top() % mGridSize - mGridSize;
int xmax = r.right() - r.right() % mGridSize + mGridSize;
int ymax = r.bottom() - r.bottom() % mGridSize + mGridSize;
for (int x = xmin; x <= xmax; x += mGridSize)
{
painter->drawLine(x, r.top(), x, r.bottom());
}
for (int y = ymin; y <= ymax; y += mGridSize)
{
painter->drawLine(r.left(), y, r.right(), y);
}
}
}
};
#endif // GRAPHICSSCENE_H
main.cpp
#include "graphicsscene.h"
#include <QApplication>
#include <QCheckBox>
#include <QGraphicsView>
#include <QVBoxLayout>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget widget;
QVBoxLayout lay(&widget);
QCheckBox checkbox("Show Grid");
QGraphicsView view;
GraphicsScene scene;
view.setScene(&scene);
lay.addWidget(&checkbox);
lay.addWidget(&view);
QObject::connect(&checkbox, &QCheckBox::stateChanged, [&scene](int state)
{
scene.setGridVisible(state != Qt::Unchecked);
});
scene.addRect(40, 40, 100, 100, QPen(Qt::red), QBrush(Qt::blue));
widget.show();
return app.exec();
}