Qt图表绘制(QtCharts)-绘制简单的条形图(4) 原创
Qt图表绘制(QtCharts)-绘制简单的条形图(4)😀
更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
注意:我使用的QtCharts是基于Qt 5.12.12版本 |
1、概述😇
Qt Charts 模块提供了一组易于使用的图表组件,能够创建时尚、交互式、以数据为中心的用户界面。
它使用
Qt Graphics View
框架,因此可以轻松地将图表集成到现代用户界面中。Qt Charts 可以用作 QWidgets、QGraphicsWidget 或 QML 类型。 用户可以通过选择图表主题之一轻松创建令人印象深刻的图表。
这一个Demo干了啥:🤏🤏🤏
- 在
initChart()
函数中演示了如何使用QtCharts绘制简单的条形图;- 在源码中包含使用的详细注释和注意事项 ;
- 将UI和代码分离,使实现图表绘制的代码更单一简洁,便于学习。
2、实现步骤👽
-
打开
.pro
文件,输入Qt += charts
,引入Qt Charts模块; -
打开ui设计器,选择一个
Graphics View
控件,鼠标右键提升为; -
输入
QChartView
,点击添加、提升; -
在窗口右上角就可以看见控件类型变成
QChartView
了,然后将控件命名为chartView; 注意:由于QChartView需要引入命名空间,所以这里提升后编译时不通过的。 -
在代码中添加QtCharts头文件,引入命名空间;一般我们最好在
cpp文件
中添加头文件和引入命名空间,尽量避免在.h文件
中引入(这里为了方便,代码简洁直接在头文件中引入命名空间),而在cpp文件中引入命名空间需要在ui_widget.h文件前,否则编译会失败,因为在ui文件中会用到QChartView类。#include <QtCharts> // 导入QtCharts所有的头文件,也可以单独导入某一个 // 引入qchart命名空间(注意:如果是在ui中提升为QChartView, // 则QT_CHARTS_USE_NAMESPACE一定要放在#include "ui_widget.h"前面,否则编译会失败) QT_CHARTS_USE_NAMESPACE
3、主要使用的类🤡
类名 | 作用 |
---|---|
QBarSet | QBarSet 类表示条形图中的一组条形 |
QBarSeries | 将一系列数据显示为按类别分组的垂直条形图 |
QBarCategoryAxis | 将类别添加到图表的轴。 |
QValueAxis | 将数值添加到图表的轴 |
4、主要代码😸
- 在
widget.cpp
的构造函数中调用initChart()
函数;
/**
* @brief 初始化绘制条形图
*/
void Widget::initChart()
{
// QBarSet 类表示条形图中的一组条形
QBarSet* set0 = new QBarSet("C++");
QBarSet* set1 = new QBarSet("java");
QBarSet* set2 = new QBarSet("python");
QBarSet* set3 = new QBarSet("html");
QBarSet* set4 = new QBarSet("css");
// 为每一个条形添加数据
*set0 << 1 << 2 << 3 << 4 << 5 << 6;
*set1 << 5 << 0 << 0 << 4 << 0 << 7;
*set2 << 4 << 5 << 8 << 13 << 8 << 5;
*set3 << 5 << 6 << 7 << 3 << 4 << 5;
*set4 << 9 << 7 << 5 << 3 << 1 << 2;
// QBarSeries 类将一系列数据显示为按类别分组的垂直条。
QBarSeries* series = new QBarSeries();
series->append(set0);
series->append(set1);
series->append(set2);
series->append(set3);
series->append(set4);
// QChart 类管理图表系列(series)、图例(legends)和轴(axes)。
QChart* chart = ui->chartView->chart(); // 获取QChartView自带的chart
chart->addSeries(series); // 将创建好的条形图series添加进chart中
chart->setTitle("关于学习编程时间的条形图"); // 设置标题
chart->setAnimationOptions(QChart::SeriesAnimations); // 设置图表变化时的动画效果
QStringList categories; // X轴分类,一般与QBarSet中添加的数据个数相同,如果少了则会显示不全,多了不影响,但是不能重复
categories << "星期一" << "星期二" << "星期三"
<< "星期四" << "星期五" << "星期六" << "星期天"; // 星期天当然是休息了...
QBarCategoryAxis* axisX = new QBarCategoryAxis(); // QBarCategoryAxis类向图表的轴添加类别。
axisX->setTitleText("X轴名称是:星期几"); // 设置X轴标题
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom); // 将X轴放在图表的底部
series->attachAxis(axisX); // 将axis指定的轴附着到series。
QValueAxis* axisY = new QValueAxis(); // 创建Y轴
axisY->setRange(0, 24); // 设置Y轴范围(学习啊,当然是24小时喽)
axisY->setTitleText("Y轴当然是:学习时间"); // 设置Y轴标题
chart->addAxis(axisY, Qt::AlignLeft); // Y轴左对齐
series->attachAxis(axisY);
chart->legend()->setVisible(true); // 设置图例是否可见(默认是可见的)
chart->legend()->setAlignment(Qt::AlignRight); // 设置图例显示的位置
ui->chartView->setRenderHint(QPainter::Antialiasing); // 设置抗锯齿(不过在条形图中不设置也没关系)
}
5、实现效果🙉
6、源代码🤖
😮💨😮💨😮💨😮💨😮💨😮💨😮💨😮💨
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)