【Qt-24】基于QCharts绘制曲线图

本文介绍了如何在Qt中使用QChart模块创建静态曲线,包括添加库、设置图表和轴属性,以及使用定时器实现动态曲线。展示了创建平均料位图表的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、QChart简介

QChart是Qt中专门用于绘制图表的模块,支持折线图、柱状图、饼图等常见类型。其主要组成部分有:

  • QChart:整个图表的容器,管理图表中的所有数据和图形属性
  • QChartView:继承自QGraphicsView,用于显示QChart,并且支持缩放和平移等交互操作
  • QLineSeries:折线图数据的容器,用于存储和绘制点之间的连线
  • QValueAxis:坐标轴组件,用于显示坐标轴的标签和刻度线

二、绘制静态曲线

1、QT项目pro文件中添加charts

2、.h文件添加库文件

#include <QtCharts>

注:要放在最前面,不然会报一些莫名其妙的错误。

#include <QtCharts>
#include <QtCharts/qsplineseries.h>

private:
    QChart *chart;
	QSplineSeries *series;
    QChartView *chartview;

private slots:
	void MainWindow::Timeout_handler();

3、.cpp文件添加

using namespace QtCharts;

 设置图标标题

chart->setTitle("平均料位");

添加曲线属性

series->setName(tr("Device 1"));
series->setColor(Qt::red);
series->setPen(QPen(Qt::red, 2));
chart->addSeries(series);

设置X轴、Y轴属性

//设置X轴属性
QValueAxis *axisX = new QValueAxis;
chart->addAxis(axisX, Qt::AlignBottom);
axisX->setRange(0, 60);
axisX->setTitleText("Time(s)");
series->attachAxis(axisX);

//设置Y轴属性
QValueAxis *axisY = new QValueAxis;
chart->addAxis(axisY, Qt::AlignLeft);
axisY->setRange(0, 60);
axisY->setTitleText("料位");
series->attachAxis(axisY);

 4、拖入Widget控件,提升为QChartView控件

将图标添加到chartview中

ui->widget->setChart(chart);

 5、完整示例代码

mainwindow.h

#include <QtCharts>
#include <QtCharts/qsplineseries.h>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
    	
private:
    Ui::MainWindow *ui;
    QChart *chart;
	QSplineSeries *series;
	QChartView *chartview;

private slots:
	void MainWindow::Timeout_handler();
}

mainwindow.cpp

#include <QtSerialPort/qserialport.h>
#include <QtSerialPort/qserialportinfo.h>

using namespace QtCharts;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    chart = new QChart();
	series = new QSplineSeries();
	chartview = new QChartView();

	//设置图标标题
	chart->setTitle("平均料位");

	//曲线属性
	series->setName(tr("Device 1"));
	series->setColor(Qt::red);
	series->setPen(QPen(Qt::red, 2));
	chart->addSeries(series);
	

	//设置X轴属性
	QValueAxis *axisX = new QValueAxis;
	chart->addAxis(axisX, Qt::AlignBottom);
	//axisX->setTickCount(5);
	axisX->setRange(0, 30);
	axisX->setTitleText("Time(s)");
	series->attachAxis(axisX);

	//设置Y轴属性
	QValueAxis *axisY = new QValueAxis;
	chart->addAxis(axisY, Qt::AlignLeft);
	axisY->setRange(0, 90);
	axisY->setTitleText("料位");
	series->attachAxis(axisY);

    Timeout_handler();

	//将图标添加到chartview中
	ui->widget->setChart(chart);
}

void MainWindow::Timeout_handler()
{
	QList<double> data = { 1.2,2.5,5.0,8.3,11.9,13.9,22.9,28.9 };
	QList<double> data1 = { 12.76, 45.8,64.9,11.9,36.5,74.9,23.9,55.4 };
	for (int i = 0; i < data.size(); i++)
	{
		series->append(data.at(i), data1.at(i));
	}
}

 运行结果:

三、绘制动态曲线

 使用定时器动态添加数据

QTimer m_timer; // 定时器

connect(&m_timer, &QTimer::timeout, this, &MainWindow::Timeout_handler);
m_timer.start(1000);

参考链接  Qt(C++)使用QChart动态显示3个设备的温度变化曲线 - 知乎

### 安装配置 QCharts 模块 #### 配置环境 对于 Qt 6.3.2 下的 QCharts 使用,确保已经正确安装了 Qt 的基础版本以及所需的开发工具链。通常情况下,在安装 Qt Creator 或者通过命令行安装器安装 Qt 时可以选择是否安装额外模块如 Qt Charts[^1]。 #### 修改 CMakeLists 文件 当项目采用 CMake 构建系统时,需修改 `CMakeLists.txt` 来引入 QCharts 库支持: ```cmake find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Charts) add_executable(${PROJECT_NAME} main.cpp) target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Charts) ``` 这段代码指定了寻找并链接必要的库文件到目标可执行程序中去。 #### .pro 文件设置 (适用于 qmake) 如果是基于 `.pro` 文件构建,则应在该项目文件内添加如下内容来启用图表功能: ```qmake QT += core gui widgets charts ``` 这一步骤告知编译器需要连接哪些特定于 Qt 的库[^3]。 #### 添加命名空间声明 为了能够正常使用来自 QtCharts 的类定义,在源代码顶部应增加相应的命名空间导入语句: ```cpp #include <QtCharts/QChartView> #include <QtCharts/QLineSeries> using namespace QtCharts; // 或者使用宏定义简化书写方式 #define QT_CHARTS_USE_NAMESPACE ``` 上述操作使得后续可以直接调用 `QChart`, `QChartView`, 和其他相关组件而无需每次都指定完整的路径名。 #### 编译与运行测试案例 完成以上步骤之后就可以尝试编写简单的绘图应用程序来进行验证了。下面给出一个绘制折线图的例子作为参考: ```cpp int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建数据序列对象 QLineSeries *series = new QLineSeries(); series->append(0, 6); series->append(2, 4); series->append(3, 8); series->append(7, 4); series->append(10, 5); // 设置标题和其他属性... QChart *chart = new QChart(); chart->legend()->hide(); //隐藏默认显示出来的图例框 chart->addSeries(series); //把刚才创建的数据系列加进来 // ...更多自定义样式调整... // 将图表放入视窗部件展示给用户看 QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); QMainWindow window; window.setCentralWidget(chartView); window.resize(400, 300); window.show(); return app.exec(); } ``` 此段示例展示了如何利用 QtCharts 绘制一条简单曲线,并将其呈现出来供查看。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值