本程序包含的内容如下:

  1. 通过伪随机函数产生随机数,填充表格
  2. 同时用产生的随机数绘制柱状图
  3. 每组包含多个柱状图

效果图如下:

常用类汇总

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的柱形图绘制相关推荐

  1. 小米9开发版已开启Android,小米9迎来最后一个基于安卓9的系统,即将启动安卓q开发版内测...

    原标题:小米9迎来最后一个基于安卓9的系统,即将启动安卓q开发版内测 近来小米9的开发版系统发布了在过渡到安卓q前的最终版本(9.7.22),论坛公告也当放出了即将启动内测的消息,这样一来,小米对于系 ...

  2. 【IOS开发高级系列】异步绘制专题

    1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGIm ...

  3. android opencv 获取小图在大图的坐标_Android开发—基于OpenCV实现相机实时图像识别跟踪...

    利用OpenCV实现实时图像识别和图像跟踪 图像识别 什么是图像识别 图像识别,是指利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对像的技术.根据观测到的图像,对其中的物体分辨其类别 ...

  4. 基于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 ...

  5. PHP开发基于Mirai的QQ机器人

    博客和更新地址:PHP开发基于Mirai的QQ机器人 前言 在完成配置开源安卓QQ协议库Mirai后,便可使用已有开源项目来部署自己的QQ机器人,但自行开发显然更符合需求.借助mirai-api-ht ...

  6. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)

    目录 前言 第8章 用户认证 第9章 用户角色 第10章 用户资料 第11章 博客文章 第12章 关注者 第13章 用户评论 第14章 应用编程接口   前言 第1章-第7章学习实践记录请参见:< ...

  7. 利用基于注意力的神经网络绘制化学反应空间图谱

    <Mapping the Space of Chemical Reactions Using Attention-Based Neural Networks> 利用基于注意力的神经网络绘制 ...

  8. QT软件开发-基于FFMPEG设计视频播放器-软解图像(一)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  9. 2021年大数据Spark(十一):应用开发基于IDEA集成环境

    目录 Spark应用开发-基于IDEA 创建工程 WordCount本地运行 WordCount集群运行 注意 修改代码如下 打成jar包 改名 上传jar包 提交到Yarn WordCount-Ja ...

最新文章

  1. SRM 563 Div1 500 SpellCards
  2. PingCode新成员Goals开放内测!
  3. QIIME 2教程. 17鉴定和过滤嵌合体q2-vsearch(2021.2)
  4. 设计模式-策略模式(Strategy Pattern)
  5. 深入理解计算机底层为什么采用补码运算【如何理解二进制计算高位溢出】
  6. Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态
  7. 你我是怎么一天天废掉的
  8. 386bsd 0.0
  9. 简单 Proxy 自动提款机应用
  10. Mac 10.10下安装MySQL5.6.21提示安装失败
  11. ICS Pwn2Own 2022迈阿密黑客大赛的目标和奖金公布
  12. 大一c语言期末大作业,大一期末C语言大作业—结构体和链表框架
  13. windows 通过 bat 脚本后台启动 jar 包,通过 jps 找到 pid,然后停止指定 jar 包,附 linux shell 脚本启停脚本
  14. [Android] Windows 7下 Android studio 安装 Genymotion 来调试 Android 遇到的问题总结
  15. 虾皮运营-shopee台湾站实战教程
  16. git pull拉代码git did not exit cleanly (exit code 1)
  17. 室内环境下的3D 目标检测调研
  18. List集合(列表)
  19. C语言初学基础篇:No such file or directory 报错 ( C-Free 5 软件使用 )
  20. 漏洞解决方案-远程DNS服务允许递归查询

热门文章

  1. 燃料电池氢气消耗量计算
  2. 简单聊聊Echarts伪3D地图实现的相关配置
  3. 利用gitcafe托管静态网页
  4. 统一OneNote的输入字体
  5. IDEA插件系列(3):Maven Helper插件
  6. SpringBoot 通过AJAX获取参数的方式 List集合
  7. HTML及CSS学习笔记
  8. 如何查看进程占用内存的大小以及物理内存和虚拟内存的区别
  9. 《痞子衡嵌入式半月刊》 第 5 期
  10. libpcap解析pcapng文件