#pragma once #include "../RenderAble.h" namespace YSG { // const double delta = event->angleDelta().y(); // double wheelSteps = delta / 120.0; // double factor = qPow(0.8, wheelSteps); struct AbsAxis_Prop{ int x{}; int y{}; Qt::Orientation orientation = Qt::Horizontal; int tickLength = 10; int subTickLength = 5; double coordStart = 0; double coordLength = 20; QColor color = Qt::white; QChar formatChar = 'f'; QLocale locale; QString unitText = ""; QFont unitTextFont; QPen unitTextPen = QPen(Qt::white); QBrush unitTextBackgroundBrush = QBrush(Qt::black); int rotate = 0; // 不旋转 }; struct AbsAxisPrivate; class LIB_DECL AbsAxis : public RenderAble { public: Q_Ptr2(AbsAxis) PROP(int, x) PROP(int, y) PROP(Qt::Orientation, orientation) PROP(size_t, pixelSize) PROP(int, tickLength) PROP(int, subTickLength) PROP(QColor, color) PROP(QChar, formatChar) PROP(QLocale, locale) PROP(QString, unitText) PROP(QFont, unitTextFont) PROP(QPen, unitTextPen) PROP(QBrush, unitTextBackgroundBrush) PROP(int, rotate) // 不旋转 [[nodiscard]] virtual double pixelToCoord(double pixel, SRC src); [[nodiscard]] virtual double coordToPixel(double coord, SRC src); [[nodiscard]] virtual double getTickStep(const Range &range); [[nodiscard]] virtual int getSubTickCount(double tickStep); virtual QString getTickLabel(double tick, SRC); virtual QVector createTickVector(double tickStep, const Range &range); virtual QVector createSubTickVector(int subTickCount, const QVector &ticks, const Range& range); virtual QVector createLabelVector(const QVector &ticks, SRC); double startCoord(SRC=SRC::Auto); double endCoord(SRC=SRC::Auto); Range coordRange(SRC=SRC::Auto); int getPixelPointSize(Range range, SRC=SRC::Cache); int getPixelPointSize(SRC=SRC::Cache); template struct BuilderT; }; template struct AbsAxis::BuilderT : protected AbsAxis_Prop { PROP_BT(int, x) PROP_BT(int, y) PROP_BT(Qt::Orientation, orientation) PROP_BT(size_t, pixelSize) PROP_BT(int, tickLength) PROP_BT(int, subTickLength) PROP_BT(QColor, color) PROP_BT(QChar, formatChar) PROP_BT(QLocale, locale) PROP_BT(QString, unitText) PROP_BT(QFont, unitTextFont) PROP_BT(QPen, unitTextPen) PROP_BT(QBrush, unitTextBackgroundBrush) PROP_BT(int, rotate) // 不旋转 SETTER_T(QString, layerName, "axis") protected: Plot *plot{}; void set(AbsAxis* ret); }; }