PowerMaster/util/TimeLine/timeLineItem.h

67 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef TIMELINEITEM_H
#define TIMELINEITEM_H
/*******************************************************************************
** TimeLine-TimeLineItem
** author dsc
**
** TimeLine的核心组件用于展现时间刻度线、时间点文字等信息通过重绘来模拟
** 鼠标的拖拽、缩放等操作。
** 时刻分级必须保证可以被所属时刻区间整除例如分钟内分级必须可以被60整除如3分、20分等不能是7分、8分等
** 如此才能保证时间刻度会压在“正点时刻”例如20mRange时刻点为20:00、20:20、20:40、21:003mRange
** 时刻点为20:0020: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