当前位置: 首页 > wzjs >正文

深圳制作网站主页湘西州住房和城乡建设局网站

深圳制作网站主页,湘西州住房和城乡建设局网站,关键词搜索指数,做网站哪里比较好Qt柱状图 QtChart 首先我们介绍一下 图表建立的基础:Qt Charts QtChart 是Qt框架的一个模块,专注与提供交互式数据可视化功能 俗话就是 用于用户轻松创建各种类型的图表和图形界面 它包含的图表类型有很多:折线图,饼图&#x…

Qt柱状图

QtChart

首先我们介绍一下 图表建立的基础:Qt Charts

QtChart 是Qt框架的一个模块,专注与提供交互式数据可视化功能

俗话就是 用于用户轻松创建各种类型的图表和图形界面

它包含的图表类型有很多:折线图,饼图,散点图,面积图等等,其中也包含我们这节重点要讲解的柱状图

知识点简介

QBarSet:用来存储柱状图中的一个数据集合。每个QBarSet代表一组柱子,每个柱子代表不同的颜色和标签

QBarSeries:同来管理多个QBarSet,将他们组成一个系列。负责处理柱子的布局和交互事件

QChart:图表的核心容器,负责管理所有的数据系列、坐标轴、图例、标题等。用来处理图表的整体样式,动画效果以及将数据渲染到视图

QChartView:用来显示QChart的视图组件,负责图表的可视化呈现

细节点

我们一般是将图标呈现在主控件,通过下面代码实现

this->setCentralWidget();  

那么我们该如何 将图表加入到子控件中呢?

通过布局的方式 先创建一个新控件(Widget),之后向其中加入一个垂直布局(在ui中实现)

然后我们使用布局函数

newLayout->addwidget(图表);

这里大家知道方法就可以了,具体操作,下面我有具体的项目实例

实现步骤

先实现柱状图中的一组数据

最终成果展示

1、输入框输入数据,然后呈现在柱状图中

2、柱状图的纵坐标范围自动根据,输入数据的大小来进行改变

3、表格最多存储6个数据,内部可以修改(改变宏的值),但是有一个专门的容器去存储数据,但是现在缺少一个展示数据的框,大家可以用list widget来实现,这个操作较为简单,大家自行操作

4、加入了动态图表效果,这里不好展示,大家可以自己写一遍运行即可

头文件

项目所需要包含的头文件

#include <QMainWindow>

#include <QVector>

#include <QtCharts/QBarSet>

#include <QtCharts/QBarSeries>

#include <QtCharts/QChart>

#include <QtCharts/QChartView>

#include <QPushButton>

#include <QtCharts/QBarCategoryAxis>

#include <QtCharts/QValueAxis>

QBarSet

.h文件中,创建变量

    QVector<intdataEditEx1;

    QVector<intdataEdit1;

    QVector<intdataEditEx2;

QVector<intdataEdit2;

    QBarSet *setData1;

    QBarSet *setData2;

dataEditEx 实现在图表中展现的数据,我们默认每组数据有

个柱子

dataEdit 用来每次输入的存储数据,让数据存储数量不在局限在6个

setData 柱状图的一组数据

补充

存储数据的方式:append()  或者 重载的<< 运算符

设置图标颜色 setColor()

我这里只提供 函数名 参数还有返回值大家自行利用 Qt Assistant查询即可,Qt内容较多,较杂,大部分东西都需要查,大家在学习工程中一定要学会查询!!

QBarSeries

用来管理多个 QBarSet 对象,定义 柱状图的显示方式

添加数据集(QBarSet)函数:append()

设置柱状宽度比例:setBarWidth()  参数范围0~1

QChart

图表的容器

添加数据集 addSeries()

设置标题 setTitle()

图表添加坐标轴

添加坐标轴的步骤

  1. 将坐标轴添加到图表(chart)中 addAxis
  2. 将坐标轴与数据集联系起来 attachAxis

QChartView

图表的展示

好了基础知识点大家都知道了,现在我给大家补充一些方法和小知识点

知识点与方法

1、补充一个遍历数组和容器的方式

for (元素类型 变量名 : 容器/数组) 

{

// 循环体:每次迭代中,变量名会依次指向容器中的一个元素

}

是一种 范围循环,其作用是 遍历容器或数组中的每一个元素

我们可以用这种方法 遍历容器数据或者 求容器中的最大值

2、更新图表的方式

先关掉数据集,再打开数据集即可

    //更新表格

    dataChart->removeSeries(dataSeries);

    dataChart->addSeries(dataSeries);

项目实现

  1. 页面实现
ui页面

代码部分
.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QVector>
#include <QtCharts/QBarSet>
#include <QtCharts/QBarSeries>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QPushButton>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QValueAxis>
#include <QDebug>
using namespace QtCharts;
#define NUM 6namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();void clearSet(QBarSet *setData);
public slots:void changeData();private:Ui::MainWindow *ui;QVector<int> dataEditEx1;QVector<int> dataEdit1;QVector<int> dataEditEx2;QVector<int> dataEdit2;QStringList category;QBarSet *setData1;QBarSet *setData2;QBarSeries *dataSeries;QChart *dataChart;QChartView *dataView;QBarCategoryAxis *axisX;QValueAxis *axisY;
};#endif // MAINWINDOW_H
知识点补充

再说mainwindow部分之前 我先说一下

坐标轴的添加步骤

分为x轴与y轴

x轴常作为 类别栏

y轴常作为 数值栏

类别栏的实现 有两个步骤

1、创建一个坐标轴

2、设置一个类别列表QStringList

    1. 为什么是列表呢,大家可以查一下 列表轴(QBarCategoryAxis)中的append 函数的参数要求

3、将列表添加到坐标轴中 append函数

数值栏的实现

  1. 创建一个数值轴
  2. 设置范围

数值栏和类别栏都需要的操作是把列表 把坐标轴添加到图表chart中,并于数据集series联系起来上面有讲

ui中按钮快捷键

mainwindow 函数部分
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);//输入框1的呈现数据 默认6个0for(int i = 0;i < NUM;i++){dataEditEx1.push_back(0);}//输入框2的呈现数据 默认6个0for(int i = 0;i < NUM;i++){dataEditEx2.push_back(0);}//将数据输入数据表setData1 = new QBarSet("data1",this);for(QVector<int>::iterator it = dataEditEx1.begin();it != dataEditEx1.end();it++){*setData1 << *it;}setData2 = new QBarSet("data2",this);for(QVector<int>::iterator it = dataEditEx2.begin();it != dataEditEx2.end();it++){*setData2 << *it;}//设置颜色setData1->setColor(Qt::green);setData2->setColor(Qt::red);//将数据表打包dataSeries = new QBarSeries(this);dataSeries->append(setData1);dataSeries->append(setData2);//将数据包 生成图表dataChart = new QChart();dataChart->addSeries(dataSeries);dataChart->setTitle("数据呈现表格");//图表添加坐标轴QBarCategoryAxis *axisX = new QBarCategoryAxis();axisX->append(category);dataChart->addAxis(axisX,Qt::AlignBottom);dataSeries->attachAxis(axisX);QValueAxis *axisY = new QValueAxis;axisY->setRange(0,1);dataChart->addAxis(axisY,Qt::AlignLeft);dataSeries->attachAxis(axisY);//将图表呈现出来dataView =new QChartView(dataChart,this);dataView->setRenderHint(QPainter::Antialiasing); // 抗锯齿ui->myWidgetVLayout->addWidget(dataView);connect(ui->subBtn,&QPushButton::clicked,this,&MainWindow::changeData);
}
按键函数实现
//这个函数用来清空 数据表,我把它封装为了一个函数
void MainWindow::clearSet(QBarSet *setData)
{while(setData->count() > 0){setData->remove(setData->count() - 1);}
}
void MainWindow::changeData()
{//清空数据表clearSet(setData1);clearSet(setData2);//处理显示容器dataEditEx1.remove(dataEditEx1.size() - 1);dataEditEx1.push_front(ui->data1Edit->text().toInt());dataEditEx2.remove(dataEditEx2.size() - 1);dataEditEx2.push_front(ui->data2Edit->text().toInt());//下面代码实现 坐标轴的值追随 展示数据的最大值//求出每个展示容器中的最大值int maxEx1 = 0,maxEx2 = 0;for(int &value : dataEditEx1){maxEx1 = value < maxEx1 ? maxEx1 : value;}for(int &value : dataEditEx2){maxEx2 = value < maxEx2 ? maxEx2 : value;}//重置数值坐标轴的范围axisY->setRange(0,(maxEx1 < maxEx2 ? maxEx2 : maxEx1));//数据输出到数据表for(QVector<int>::iterator it = dataEditEx1.begin();it != dataEditEx1.end();it++){*setData1 << *it;}for(QVector<int>::iterator it = dataEditEx2.begin();it != dataEditEx2.end();it++){*setData2 << *it;}//更新表格dataChart->removeSeries(dataSeries);dataChart->addSeries(dataSeries);//把数据同步到数据存储容器dataEdit1.push_back(ui->data1Edit->text().toInt());dataEdit2.push_back(ui->data2Edit->text().toInt());
}

结束

今天的分享到这里就结束了,如果你喜欢我的分享,请点赞收藏夹关注,谢谢大家


文章转载自:

http://wZaB3Vq9.mnsLh.cn
http://2f0qX0NY.mnsLh.cn
http://PUw1EyYZ.mnsLh.cn
http://FWoqqtnM.mnsLh.cn
http://JakYIRnX.mnsLh.cn
http://eMutE0XZ.mnsLh.cn
http://wO3wjJsa.mnsLh.cn
http://RP0qx074.mnsLh.cn
http://qJ2QPtLL.mnsLh.cn
http://LNX4IgJ9.mnsLh.cn
http://1hX8NBJq.mnsLh.cn
http://qlAtMZgu.mnsLh.cn
http://4grXH0l4.mnsLh.cn
http://OJum5v6T.mnsLh.cn
http://6UNgt1AK.mnsLh.cn
http://dOVU5Qc9.mnsLh.cn
http://xjyoD0eN.mnsLh.cn
http://oQjoAfep.mnsLh.cn
http://2xKpyWX3.mnsLh.cn
http://tgYbxb6T.mnsLh.cn
http://alKPbeGS.mnsLh.cn
http://j9a2DCIa.mnsLh.cn
http://2738lVkP.mnsLh.cn
http://YJKmLKPY.mnsLh.cn
http://YXMRRHWO.mnsLh.cn
http://vh6Econs.mnsLh.cn
http://CRt1oxrQ.mnsLh.cn
http://hZza09yt.mnsLh.cn
http://3y4NRUV7.mnsLh.cn
http://kBUhJ0xC.mnsLh.cn
http://www.dtcms.com/wzjs/613930.html

相关文章:

  • 如何实现一个制作好的网站源码打包成app
  • 什么是网站快照河南宝盈建设集团有限公司网站
  • 深圳网站制作的公司网络服务做品牌推广网站需要多少钱
  • 旅游网站开发文档wordpress 最新版本
  • 深圳app网站网站系统定制
  • 网站做淘宝客还行吗30岁学编程太晚了
  • 做食品企业网站的费用网站架构设计师薪酬
  • 企业网站制作的软件wordpress使用用户字体
  • 一_ 写出几种常见的网站开发语言_试述其特点在西宁做网站可以吗
  • 网站有限公司免费化工网站建设
  • 苏州网站建设公司哪个好程序员用的编程软件
  • c语言做网站账号登录系统东营信息港
  • 网站建设方案如何写湖北seo优化诊断
  • 打码网站建设网站代码优化方法
  • 建立一个网站要多久秋林 做网站
  • 商务类网站荆门城乡建设局网站
  • 网站建设优選宙斯站长农林网站建设
  • 做网站虚拟主机哪里有重庆旅游必去景点
  • 网站建设公司哪家好 运峰科技谁有企业邮箱
  • 专业网站的建设wordpress主题花园
  • 广州网站建设定制多少钱国家住房和城乡建设网站
  • 怎样更换网站模板监利网站
  • wordpress安装主题后不够渭南seo快速排名
  • 北海哪家做网站公司网站外包
  • 信阳网站建设费用wordpress .po文件
  • 网站项目整体思路凡科快图官网登录入口
  • 动态ip建网站鸿科经纬教网店运营推广
  • 做一个网站的费用安徽省建设工程信息网站进不了
  • 福州网站建设发布自己建设网站需要什么
  • 顺德手机网站设计咨询鞍山做网站或