QT 动态绘制 chart 类完整 实现
时间: 2024-03-02 10:53:46 浏览: 22
好的,下面是一个完整的 Qt 动态绘制 chart 类的实现,供你参考:
chartwidget.h
```c++
#ifndef CHARTWIDGET_H
#define CHARTWIDGET_H
#include <QWidget>
#include <QtCharts/QChart>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QChartView>
#include <QTimer>
QT_CHARTS_USE_NAMESPACE
class ChartWidget : public QWidget
{
Q_OBJECT
public:
explicit ChartWidget(QWidget *parent = nullptr);
~ChartWidget();
private:
QChart *chart; // chart 对象
QLineSeries *series; // 数据系列
QChartView *chartView; // chart 显示
QTimer *timer; // 定时器
void setupChart(); // 初始化 chart
void setupTimer(); // 初始化定时器
private slots:
void updateChart(); // 更新 chart
};
#endif // CHARTWIDGET_H
```
chartwidget.cpp
```c++
#include "chartwidget.h"
ChartWidget::ChartWidget(QWidget *parent) :
QWidget(parent)
{
// 初始化 chart、series 和 chartView
chart = new QChart();
series = new QLineSeries();
chart->addSeries(series);
chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->setMinimumSize(640, 480);
chartView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// 设置 chart 的标题和标签
chart->setTitle("Chart Title");
chart->setAxisX(new QValueAxis(), chart->series().at(0));
chart->setAxisY(new QValueAxis(), chart->series().at(0));
// 初始化定时器
setupTimer();
// 布局
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(chartView);
}
ChartWidget::~ChartWidget()
{
delete timer;
}
void ChartWidget::setupChart()
{
// 清空之前的数据
series->clear();
// 添加新数据
for (int i = 0; i < 10; i++) {
qreal x = i;
qreal y = qrand() % 100;
series->append(x, y);
}
// 更新 chart 显示
chartView->setChart(chart);
}
void ChartWidget::setupTimer()
{
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateChart()));
timer->start(1000); // 每秒钟更新一次
}
void ChartWidget::updateChart()
{
// 添加新数据
qreal x = series->count();
qreal y = qrand() % 100;
series->append(x, y);
// 更新 chart 显示
chartView->setChart(chart);
}
```
在使用这个类时,只需要在所需的地方创建一个 ChartWidget 对象并添加到布局即可。
```c++
ChartWidget *chartWidget = new ChartWidget();
layout->addWidget(chartWidget);
```
以上就是一个 Qt 动态绘制 chart 类的完整实现,希望能对你有所帮助。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)