之前利用QPainter简单绘制过五芒星图,本次利用Qt的场景图元编写五芒星图,
增加了五芒星缩放动画,悬浮效果等。
效果图
注:由于录制原因,悬浮效果没有录制下来。
头文件
#ifndef QWHPENTACLEVIEW_H
#define QWHPENTACLEVIEW_H
/*
* 五芒星图
* 目前提供十种颜色,故而只支持十份数据
*/
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsLineItem>
#include <QTimeLine>
#include <QGraphicsItemAnimation>
#include <QResizeEvent>
#include "qwhrectitem.h"
#include "qwhpathitem.h"
class QWHPentacleView : public QGraphicsView
{
Q_OBJECT
public:
explicit QWHPentacleView(QWidget *parent = nullptr);
~QWHPentacleView();
QSize sizeHint();
public:
//添加数据
void addData(QVector<qreal> data, const QString &text);
//设置图例和区域颜色,从默认颜色的首部替换(如需设置,请在创建对象后,addData函数调用前使用)
void setColor(QVector<QColor> colors);
protected:
void resizeEvent(QResizeEvent *event);
private:
//绘制背景
void drawBg();
//获取五角星的五个顶点
QPolygonF getPentaclePolygonF(int radius);
private slots:
//图例进入事件
void onLegendEnter();
//图例离开事件
void onLegendLeave();
//区域进入事件
void onAreaEnter();
//区域离开事件
void onAreaLeave();
//鼠标点击事件
void onClicked();
private:
QGraphicsScene *m_scene; //场景
QString m_title; //标题
QStringList m_text; //坐标轴文本
QVector<QWHRectItem *> m_vecLegend; //图例
QVector<QGraphicsSimpleTextItem *> m_vecLegendText; //图例文本
QVector<QWHPathItem *> m_vecArea; //区域
QVector<QList<QGraphicsItem *>> m_vecPoint; //区域点
QVector<QGraphicsItemGroup *> m_vecGroup; //区域和区域点绑定的组
QVector<QTimeLine *> m_vecTimeLine; //区域动画时间线
QVector<QGraphicsItemAnimation *> m_vecAnimation; //区域动画
QVector<QColor> m_vecLegendColor; //图例颜色
QColor m_legendTextColor; //图例文字颜色
QColor m_legendTextHideColor; //图例隐藏时的图例文字颜色
};
#endif // QWHPENTACLEVIEW_H