67 lines
2.2 KiB
C++
67 lines
2.2 KiB
C++
#ifndef TIMELINEITEM_H
|
||
#define TIMELINEITEM_H
|
||
|
||
/*******************************************************************************
|
||
** TimeLine-TimeLineItem
|
||
** author 段胜超
|
||
**
|
||
** 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 <QGraphicsObject>
|
||
#include <QDateTime>
|
||
|
||
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(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
|