QGraphicsView编写五芒星图

之前利用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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生卍流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值