2024-12-06 16:58:07 +08:00
|
|
|
|
#ifndef TIMELINEITEM_H
|
|
|
|
|
|
#define TIMELINEITEM_H
|
|
|
|
|
|
|
2024-12-11 15:23:58 +08:00
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
** TimeLine-TimeLineItem
|
2024-12-25 08:34:51 +08:00
|
|
|
|
** author dsc
|
2024-12-11 15:23:58 +08:00
|
|
|
|
**
|
|
|
|
|
|
** 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。
|
|
|
|
|
|
** 这样可以保证拖动时跨越时间区间时,左右时刻可以无缝的转换,从而完成平滑的拖动效果
|
|
|
|
|
|
**
|
|
|
|
|
|
******************************************************************************/
|
2024-12-17 16:48:46 +08:00
|
|
|
|
#include "global.h"
|
2024-12-06 16:58:07 +08:00
|
|
|
|
#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);
|
2024-12-17 16:48:46 +08:00
|
|
|
|
void setState(DateTimeWidgetState);
|
2024-12-11 15:23:58 +08:00
|
|
|
|
|
2025-01-04 18:18:19 +08:00
|
|
|
|
void setTime(const QDateTime&);
|
2024-12-11 15:23:58 +08:00
|
|
|
|
QDateTime time();
|
|
|
|
|
|
|
|
|
|
|
|
qint64 getOffsetTimeValue(int); //获取时间的偏移值(相对当前时间,在鼠标移动拖拽时调用,通过拖拽时同步更改当前时间继而重绘时间轴从而模拟出拖拽效果)
|
2024-12-06 16:58:07 +08:00
|
|
|
|
|
|
|
|
|
|
void zoomIn();
|
|
|
|
|
|
void zoomOut();
|
2024-12-17 16:48:46 +08:00
|
|
|
|
void setTimeUnit(TimeUnit);
|
|
|
|
|
|
TimeUnit timeUnit();
|
2024-12-06 16:58:07 +08:00
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
void drawScaleLine(QPainter*);
|
|
|
|
|
|
void drawTimeText(QPainter*, int);
|
2024-12-11 15:23:58 +08:00
|
|
|
|
QDateTime calculateRightTime(); //计算当前时间右侧第一个需要输出展示的时间点
|
|
|
|
|
|
int calculateRightTimePos(); //计算右侧时间点的坐标位置
|
|
|
|
|
|
QDateTime calculateTime(double); //计算给定参数值所对应的时间,参数为scalesize的倍数
|
|
|
|
|
|
QDateTime getTime(int); //获取坐标点(X)所对应的时间
|
2024-12-06 16:58:07 +08:00
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
TimeLineItemPrivate* d_ptr;
|
|
|
|
|
|
friend class TimeLineWidget;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace TimeLine
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|