《Q开发》 基于QtCharts的柱形图绘制
本程序包含的内容如下:
- 通过伪随机函数产生随机数,填充表格
- 同时用产生的随机数绘制柱状图
- 每组包含多个柱状图
效果图如下:
常用类汇总
QBarSet:用于创建柱状图的数据集
QBarSeries:柱状图序列,一个柱状图序列一般包含多个QBarSet数据集
QBarCategoryAxis:柱状图分类坐标,以文字标签形式表示的坐标
QBarSet类的主要函数
分组 |
函数 |
功能描述 |
标签 |
void setLabel() |
设置数据集的标签,用于图例显示的文字 |
void setLabelBrush() |
设置标签的画刷 |
|
void setLabelColor() |
设置标签的文字颜色 |
|
void setLabelFont() |
设置标签的字体 |
|
数据棒/柱子 |
void setBorderColor() |
设置数据集棒图的边框颜色 |
void setBrush() |
设置数据集棒图的画刷 |
|
void setColor() |
设置数据集的棒图填充颜色 |
|
void senPen() |
设置数据集棒图的边框画笔 |
|
数据点 |
void append() |
添加一个数据到数据集 |
void insert() |
在某个位置插入一个数据到数据集 |
|
void remove() |
从某个位置开始删除一定数量的数据 |
|
void replace() |
替换某个位置的数据 |
|
qreal at() |
返回某个位置的数据 |
|
int count() |
返回数据的个数 |
|
qreal sum() |
返回数据集内所有数据的和 |
QBarSeries类的主要函数
分组 |
函数 |
功能描述 |
外观 |
void setBarWidth() |
设置数据棒的宽度 |
void setLabelsVisible() |
设置数据棒的标签可见性 |
|
void setLabelFormat() |
设置数据棒标签的格式,只支持一种:@value |
|
void setLabelAngle() |
设置标签角度 |
|
数据集 |
bool append() |
添加一个QBarSet数据集到序列 |
bool insert() |
在某个位置插入一个数据集到序列 |
|
bool remove() |
移除一个数据集,解除所属关系,并删除数据集对象 |
|
bool take() |
移除一个数据集,但不删除数据集对象 |
|
void clear() |
清除全部数据集,并删除数据集对象 |
|
QList<QBarSet *> barSets() |
返回数据集对象的列表 |
|
int count() |
返回数据集的个数 |
QBarCategoryAxis类的主要函数
分组 |
函数 |
功能描述 |
坐标 内容 |
void append() |
添加一个类别到坐标轴 |
void insert() |
在某个位置插入一个类别到坐标轴 |
|
void replace() |
替换某个类别 |
|
void remove() |
移除某个类别 |
|
void clear() |
删除所有类别 |
|
QString at() |
返回某个索引位置的类别文字 |
|
int count() |
返回类别个数 |
|
void setCategories() |
设置一个QStringList字符串列表作为坐标轴的类别文字,删除所有类别文字 |
|
坐标 范围 |
void setMin() |
设置坐标轴最小值 |
void setMax() |
设置坐标轴最大值 |
|
void setRange() |
设置坐标轴范围 |
程序开发记录
1.工程创建完毕后,添加QtChart模块。Release模式下,项目——属性,添加如下
Debug模式下,也需要添加如上两个内容,第二个图中的库修改为Qt5Chartsd.lib
2.布局如下
3.在头文件中添加引用
#include <QtCharts>
添加如下变量和函数
QChartView *GPSview; //绘图区域的容器
QChart *chartGPS; //绘图区域
QValueAxis *yAxisGPS; //纵轴
QBarCategoryAxis *xAxisGPS; //横轴
QStringList categoriesGPS; //柱状图分类坐标,以文字标签形式表示的坐标
QBarSet *GPS_L1, *GPS_L2, *GPS_L5; //GPS系统对应的载造比
QBarSeries *seriesGPS; //序列
void InitTableWidget();
void InitBarSet(QBarSet *set1, QBarSet *set2, QBarSet *set3);
void InitBarSeries(QBarSeries *barSeries);
void InitAxis();
void InitChart(QChart *chart);
void InitChartView(QChartView *chartView, QWidget *widget);
void Init();
void ClearData();
public slots:
void on_pBtnRandom_clicked();
在源文件中添加如下函数
void BarChartEg::Init()
{
InitTableWidget();
//1.准备QChartView对象,用来显示chart
GPSview = new QChartView(ui.widget);
InitChartView(GPSview, ui.widget);
//2.准备QChart对象,用来绘图
chartGPS = new QChart();
InitChart(chartGPS);
//3.将chart添加到chartView上
GPSview->setChart(chartGPS);
//4.设置坐标轴
InitAxis();
//5.准备barSeries柱状图序列,包含数据集
seriesGPS = new QBarSeries(this);
InitBarSeries(seriesGPS);
//6.准备barSet数据集,创建柱形图
GPS_L1 = new QBarSet("CNR1");
GPS_L2 = new QBarSet("CNR2");
GPS_L5 = new QBarSet("CNR3");
InitBarSet(GPS_L1, GPS_L2, GPS_L5);
//7.为序列barSeries添加数据集barSet
QList<QBarSet *> barSetList_GPS;
barSetList_GPS << GPS_L1 << GPS_L2 << GPS_L5;
seriesGPS->append(barSetList_GPS);
//8.将序列barSeries添加到chart上
chartGPS->addSeries(seriesGPS);
//9.将坐标轴添加到chart上,并指定序列
chartGPS->setAxisX(xAxisGPS, seriesGPS);
chartGPS->setAxisY(yAxisGPS, seriesGPS);
}
void BarChartEg::InitTableWidget()
{
ui.tableWidget->setRowCount(rows);
ui.tableWidget->setColumnCount(cols);
QStringList headerList;
headerList << "CNR1" << "CNR2" << "CNR3";
ui.tableWidget->setHorizontalHeaderLabels(headerList);
}
//设置QChartView布局
void BarChartEg::InitChartView(QChartView *chartView, QWidget *widget)
{
chartView->setBackgroundBrush(QBrush(Qt::white));
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->setContentsMargins(0, 0, 0, 0);
hLayout->addWidget(chartView);
widget->setLayout(hLayout);
}
void BarChartEg::InitChart(QChart *chart)
{
chart->layout()->setContentsMargins(5, 0, 5, 5);
chart->setMargins(QMargins(1, 0, 1, 1));
chart->setBackgroundRoundness(0);
}
void BarChartEg::InitBarSet(QBarSet *set1, QBarSet *set2, QBarSet *set3)
{
//设置数据集标签字体
QFont font("宋体", 8, 0);
font.setBold(true);
set1->setLabelFont(font);
set2->setLabelFont(font);
set3->setLabelFont(font);
//设置数据集标签颜色
set1->setLabelColor(QColor(0,0,0));
set2->setLabelColor(QColor(0, 0, 0));
set3->setLabelColor(QColor(0, 0, 0));
}
void BarChartEg::InitBarSeries(QBarSeries *barSeries)
{
barSeries->setLabelsFormat("@value");
//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsCenter);//设置在柱形图内中间
//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);//设置在柱形图内部顶端
//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideBase);//设置在柱形图内部下端
barSeries->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);//设置在柱形图外部上端
barSeries->setLabelsVisible(true);
barSeries->setBarWidth(0.5);
}
void BarChartEg::InitAxis()
{
xAxisGPS = new QBarCategoryAxis(this);
xAxisGPS->setGridLineVisible(false);
yAxisGPS = new QValueAxis(this);
yAxisGPS->setRange(0, 60);
}
void BarChartEg::on_pBtnRandom_clicked()
{
ClearData();
qsrand(QTime::currentTime().second()); //随机数种子
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
double randomData = 30 + (qrand() % 30); //随机数
ui.tableWidget->setItem(i,j,new QTableWidgetItem(QString::asprintf("%.0f",randomData)));
if (j == 0)
GPS_L1->append(randomData);
if (j == 1)
GPS_L2->append(randomData);
if (j == 2)
GPS_L5->append(randomData);
}
categoriesGPS.append("序列"+QString::number(i+1));
}
xAxisGPS->setCategories(categoriesGPS);
}
void BarChartEg::ClearData()
{
xAxisGPS->clear();
categoriesGPS.clear();
GPS_L1->remove(0, 4);
GPS_L2->remove(0, 4);
GPS_L5->remove(0, 4);
}
《Q开发》 基于QtCharts的柱形图绘制相关推荐
- 小米9开发版已开启Android,小米9迎来最后一个基于安卓9的系统,即将启动安卓q开发版内测...
原标题:小米9迎来最后一个基于安卓9的系统,即将启动安卓q开发版内测 近来小米9的开发版系统发布了在过渡到安卓q前的最终版本(9.7.22),论坛公告也当放出了即将启动内测的消息,这样一来,小米对于系 ...
- 【IOS开发高级系列】异步绘制专题
1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGIm ...
- android opencv 获取小图在大图的坐标_Android开发—基于OpenCV实现相机实时图像识别跟踪...
利用OpenCV实现实时图像识别和图像跟踪 图像识别 什么是图像识别 图像识别,是指利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对像的技术.根据观测到的图像,对其中的物体分辨其类别 ...
- 基于jquery类库的绘制二维码的插件jquery.qrcode.js
jquery.qrcode.min.js 如下 (function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.d ...
- PHP开发基于Mirai的QQ机器人
博客和更新地址:PHP开发基于Mirai的QQ机器人 前言 在完成配置开源安卓QQ协议库Mirai后,便可使用已有开源项目来部署自己的QQ机器人,但自行开发显然更符合需求.借助mirai-api-ht ...
- 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)
目录 前言 第8章 用户认证 第9章 用户角色 第10章 用户资料 第11章 博客文章 第12章 关注者 第13章 用户评论 第14章 应用编程接口 前言 第1章-第7章学习实践记录请参见:< ...
- 利用基于注意力的神经网络绘制化学反应空间图谱
<Mapping the Space of Chemical Reactions Using Attention-Based Neural Networks> 利用基于注意力的神经网络绘制 ...
- QT软件开发-基于FFMPEG设计视频播放器-软解图像(一)
QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...
- 2021年大数据Spark(十一):应用开发基于IDEA集成环境
目录 Spark应用开发-基于IDEA 创建工程 WordCount本地运行 WordCount集群运行 注意 修改代码如下 打成jar包 改名 上传jar包 提交到Yarn WordCount-Ja ...
最新文章
- SRM 563 Div1 500 SpellCards
- PingCode新成员Goals开放内测!
- QIIME 2教程. 17鉴定和过滤嵌合体q2-vsearch(2021.2)
- 设计模式-策略模式(Strategy Pattern)
- 深入理解计算机底层为什么采用补码运算【如何理解二进制计算高位溢出】
- Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态
- 你我是怎么一天天废掉的
- 386bsd 0.0
- 简单 Proxy 自动提款机应用
- Mac 10.10下安装MySQL5.6.21提示安装失败
- ICS Pwn2Own 2022迈阿密黑客大赛的目标和奖金公布
- 大一c语言期末大作业,大一期末C语言大作业—结构体和链表框架
- windows 通过 bat 脚本后台启动 jar 包,通过 jps 找到 pid,然后停止指定 jar 包,附 linux shell 脚本启停脚本
- [Android] Windows 7下 Android studio 安装 Genymotion 来调试 Android 遇到的问题总结
- 虾皮运营-shopee台湾站实战教程
- git pull拉代码git did not exit cleanly (exit code 1)
- 室内环境下的3D 目标检测调研
- List集合(列表)
- C语言初学基础篇:No such file or directory 报错 ( C-Free 5 软件使用 )
- 漏洞解决方案-远程DNS服务允许递归查询