84 lines
1.5 KiB
C++
84 lines
1.5 KiB
C++
//
|
|
// Created by ricardo on 2022/6/28.
|
|
//
|
|
|
|
#ifndef AUTO_BUS_GUI_BUS_WIDGET_H
|
|
#define AUTO_BUS_GUI_BUS_WIDGET_H
|
|
#include "QGraphicsPixmapItem"
|
|
#include "QTransform"
|
|
#include "QPropertyAnimation"
|
|
|
|
#include "PosPair.h"
|
|
#include "define.h"
|
|
|
|
/**
|
|
* 显示公交车的对象
|
|
* 继承了QObject QGraphicsPixmapItem
|
|
* 用以使用qt的动画框架
|
|
*/
|
|
class BusItem: public QObject, public QGraphicsPixmapItem
|
|
{
|
|
// 调用这个宏使其qt对象化
|
|
Q_OBJECT
|
|
// 注册了一个QPointF类型的变量pos
|
|
// 读取这个变量通过 pos()函数
|
|
// 写入这个变量通过 setPos()函数
|
|
Q_PROPERTY(QPointF pos READ pos WRITE setPos)
|
|
public:
|
|
explicit BusItem(const QPixmap& pixmap);
|
|
};
|
|
|
|
/**
|
|
* 公交车显示动画控制类
|
|
*/
|
|
class BusWidget
|
|
{
|
|
public:
|
|
/**
|
|
* 真正的公交车显示对象
|
|
*/
|
|
BusItem *item;
|
|
|
|
explicit BusWidget();
|
|
|
|
~BusWidget();
|
|
|
|
/**
|
|
* 重置公交车
|
|
* @param s 位置对数组的头指针
|
|
* @param num 站点数目
|
|
*/
|
|
void ResetBusPos(PosPair *s, int num);
|
|
|
|
/**
|
|
* 开始公交车动画
|
|
* @param direction 动画的方向
|
|
* @param duration 动画持续的时间 ms
|
|
*/
|
|
void StartAnimation(int direction, int duration);
|
|
|
|
private:
|
|
/**
|
|
* 存储各个站点位置对的数组
|
|
*/
|
|
PosPair *pos_pairs = nullptr;
|
|
|
|
/**
|
|
* 动画对象
|
|
*/
|
|
QPropertyAnimation *animation;
|
|
|
|
/**
|
|
* 公交车所在的站点
|
|
*/
|
|
int pos = 0;
|
|
|
|
/**
|
|
* 站点总数
|
|
*/
|
|
int node_num = 0;
|
|
};
|
|
|
|
|
|
#endif //AUTO_BUS_GUI_BUS_WIDGET_H
|