关于c++:Qt-自定义组件动态曲线

55次阅读

共计 1767 个字符,预计需要花费 5 分钟才能阅读完成。

自定义组件_滚动横幅 & 弹窗 & 对话框 & 字体图标等
自定义组件_圆弧进度条
自定义组件_水波进度条
自定义组件_多彩仪表盘
自定义组件_通用仪表盘
自定义组件_网格组件 (GirdWidget)
自定义组件_动静曲线

仓库

个性

  1. 可设置 Y 轴范畴、标签格局、tick 数量
  2. 可设置 X 轴时间跨度、工夫格局、tick 数量
  3. 可显示任意多条曲线、设置对应曲线色彩及数值点是否显示
  4. 可设置曲线更新工夫距离
  5. 可抉择暗藏曲线
  6. 自适应窗体拉伸,图表主动缩放
#ifndef DYNAMICLINE_H
#define DYNAMICLINE_H

#include <QChart>
#include <QChartView>
#include <QDateTime>
#include <QDateTimeAxis>
#include <QLineSeries>
#include <QTimer>
#include <QValueAxis>
#include <QVector>
#include <QWidget>

using namespace QtCharts;

/* 动静曲线
 * 1. 可设置 Y 轴范畴、标签格局、tick 数量
 * 2. 可设置 X 轴时间跨度、工夫格局、tick 数量
 * 3. 可显示任意多条曲线、设置对应曲线色彩及数值点是否显示
 * 4. 可设置曲线更新工夫距离
 * 5. 可抉择暗藏曲线
 * 6. 自适应窗体拉伸,图表主动缩放
 */

class DynamicLine : public QWidget
{
    Q_OBJECT

public:
    explicit DynamicLine(QWidget *parent = nullptr);
    ~DynamicLine();

    void start(int intervalMsec = 1000);                        // 开始更新图表
    void stop();                                                // 进行更新图表

    int count() const;                                          // 曲线数量
    qint64 timeAxisXSpanSecs() const;                           // X 轴时间跨度
    void addSplineSeries(const QString &name = "", const QPen &pen = QPen(), bool pointsVisible = false);  // 增加一条新的曲线

public slots:
    void setSeriesValues(int index, int value);                 // 设置曲线值
    void setSeriesVisible(int index, bool visible);             // 设置曲线是否可见
    void setChartTitle(const QString &title);                   // 设置图表题目

    void setTimeAxisXSpanSecs(qint64 secs);                     // 设置 X 轴时间跨度
    void setTimeAxisXFormat(const QString &format = "HH:mm");   // 设置 X 轴工夫格局
    void setTimeAxisXTickCount(int tickCount);                  // 设置 X 轴 tick 数量

    void setAxisYRange(qreal min, qreal max);                   // 设置 Y 轴范畴
    void setpAxisYTickCount(int count);                         // 设置 Y 轴 tick 数量
    void setAxisYLabelFormat(const QString &format);            // 设置 Y 轴标签格局

private:
    void initUi();
    void initCtrl();

    QLineSeries *createSeries(QChart *chart, const QString &name, const QPen &pen, bool pointsVisible = false);

private slots:
    void updateChart();

private:
    QVector<QLineSeries*> m_series;
    QChartView*           m_pChartView = nullptr;
    QChart*               m_pChart     = nullptr;
    QDateTimeAxis*        m_pTimeAxisX = nullptr;
    QValueAxis*           m_pAxisY     = nullptr;

    qint64 m_spanSecs = 60;
    QVector<int> m_lastValues;
    bool m_isFirstTime = false;

    QTimer m_timer;
};

#endif // DYNAMICLINE_H

正文完
 0