#ifndef TIMELINEITEM_H #define TIMELINEITEM_H /******************************************************************************* ** TimeLine-TimeLineItem ** author dsc ** ** TimeLine的核心组件,用于展现时间刻度线、时间点文字等信息,通过重绘来模拟 ** 鼠标的拖拽、缩放等操作。 ** 时刻分级必须保证可以被所属时刻区间整除,例如分钟内分级,必须可以被60整除,如3分、20分等,不能是7分、8分等 ** 如此才能保证时间刻度会压在“正点时刻”,例如20mRange,时刻点为20:00、20:20、20:40、21:00,3mRange, ** 时刻点为20:00,20:03、20:06...20:57、21:00。 ** 这样可以保证拖动时跨越时间区间时,左右时刻可以无缝的转换,从而完成平滑的拖动效果 ** ******************************************************************************/ #include "global.h" #include #include namespace TimeLine { class TimeLineItemPrivate; class TimeLineItem : public QGraphicsObject { Q_OBJECT public: explicit TimeLineItem(); virtual ~TimeLineItem(); virtual QRectF boundingRect() const; void updateBoundingRect(const QRect&); void setLineColor(QColor); void setScaleSize(int); void setState(DateTimeWidgetState); void setTime(const QDateTime&); QDateTime time(); qint64 getOffsetTimeValue(int); //获取时间的偏移值(相对当前时间,在鼠标移动拖拽时调用,通过拖拽时同步更改当前时间继而重绘时间轴从而模拟出拖拽效果) void zoomIn(); void zoomOut(); void setTimeUnit(TimeUnit); TimeUnit timeUnit(); protected: virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); private: void drawScaleLine(QPainter*); void drawTimeText(QPainter*, int); QDateTime calculateRightTime(); //计算当前时间右侧第一个需要输出展示的时间点 int calculateRightTimePos(); //计算右侧时间点的坐标位置 QDateTime calculateTime(double); //计算给定参数值所对应的时间,参数为scalesize的倍数 QDateTime getTime(int); //获取坐标点(X)所对应的时间 private: TimeLineItemPrivate* d_ptr; friend class TimeLineWidget; }; } // namespace TimeLine #endif