#pragma once #include #include "Defines.h" #include "iPlotBase_global.h" class ZxSubAxisBase; class QPainter; // 该类是ZxSubAxisBase的分发处理 class I_PLOTBASE_EXPORT ZxAxisHelper : public QObject { Q_OBJECT public: static const float g_Sub_ScaleTick_Len; static const float g_Main_ScaleTick_Len; public: explicit ZxAxisHelper(ZxSubAxisBase* p); ~ZxAxisHelper(); // 统一调用接口 virtual void getPreferedSize(QPainter* painter, \ float& w, float& h);//预估大小 virtual void drawAxis(QPainter* painter); //绘制坐标 virtual void drawGrids(QPainter* painter, QRectF& rtInner);//Plot网格线 virtual QRectF getAxisRect(); //最大外范围 // 获取类型 AxisType getAxisType(); protected: // 预估大小 virtual void getPreferedTitleSize(QPainter* painter, \ float& w, float& h);//预估大小 virtual void getPreferedTickSize(QPainter* painter, \ float& w, float& h);//预估大小 virtual QRectF getPreferedTickSumRect(QPainter* painter); virtual void adjustPreferedSize(float& w, float& h); // 取得待显示的刻度文本标识 virtual QMap getTickInfos(); // 绘制函数 virtual void drawBaseLine(QPainter* painter, QRectF& rt); virtual void drawTickAndTags(QPainter* painter, QRectF& rt); virtual void drawTitle(QPainter* painter, QRectF& rt); virtual void drawFocus(QPainter* painter, QRectF& rt); virtual void drawOneTickLine(QPainter* painter, float fPos, bool bMainInterval); virtual void drawOneTickTag(QPainter* painter, float fPos, QString s); virtual void drawOneGridLine(QPainter* painter, float fPos, QRectF& rtInner); // 获取绘制的位置信息 virtual void locateOneTickTag(QPainter* painter, float fPos, QString s, \ QRectF& rt, int& flag); virtual void locateTitle(QPainter* painter, QString s, \ QRectF& rt, int& flag); virtual void metricStr(QPainter* painter, QString s, float& w, float& h); protected: // 范围判断 bool isMidIn(float f, float f1, float f2); // 从坐标轴获取参数 void bindParas(); // 是否可以显示 virtual bool canTickShow(QRectF rt); // 裁剪区 virtual void clipBounds(QPainter* painter, QRectF& rt); // 合并Rect void uniteTickBound(QRectF rt); // 旋转式绘制 void rotateText(QPainter* painter, QRectF& rt, \ int flag, QString s, float fAngle); public slots: protected: // 载体及载体类型 ZxSubAxisBase* m_pAxis; AxisType m_oAxisType; // x or y and out or inner bool m_bAxisX; bool m_bScaleOut; // 范围 QRectF m_rtBound; //whole QRectF m_rtTickSum; //所有刻度文字的范围合集 QRectF m_rtTickLastVisible; QRectF m_rtTitle; friend class ZxSubAxisBase; };