【QT】——QChartView,QChart,QValueAxis类的使用,折线图,柱状图,饼状图的实现

news2024/9/28 1:10:08

目录

1.QChartView——视图

2.QChart——图表

 3.QValueAxis类方法——坐标轴类

4.QAbstractSeries

5.折线图的实现

6.柱状图的实现

7.饼状图的实现


QChart主要由一下几个大类组成:QChartView类、QChart类、QAbstractSeries类、QValueAxis类

  • QChartView类 为视图对象。 
  • QChart类是真正的图表对象,QChart需要添加在QChartView对象下才可在正确展示出
  • QAbstractSeries类是数据集合主要子类为QLineSeries——折现类,在QChart中添加QAbstractSeries,才可以展示出数据,否则QChart只能展现坐标轴
  • QValueAxis类是坐标轴类,用来设置QChart类的坐标轴属性,包括范围、精度等,也用来将QAbstractSeries类与QChart类对应起来。    

1.QChartView——视图

这个类是专门来显示图表的独立部件,每一个Chart对象都需要在QChartView中显示


//构造函数
QChartView::QChartView(QWidget *parent = nullptr)
//将图表绑定视图上
void setChart(QChart *chart)

2.QChart——图表


// 设置图表的标题
void setTitle(const QString &title)
// 设置绘制标题的画刷
void setTitleBrush(const QBrush &brush)
// 设置标题的字体 
void setTitleFont(const QFont &font)

// 添加自定义坐标轴	Qt::AlignLeft 左侧X轴	Qt::AlignBottom 下端Y轴
void addAxis(QAbstractAxis *axis, Qt::Alignment alignment)  


//同时设置曲线以及值到X/Y轴上
void setAxisX(QAbstractAxis *axis, QAbstractSeries *series = nullptr)
void setAxisY(QAbstractAxis *axis, QAbstractSeries *series = nullptr)

 3.QValueAxis类方法——坐标轴类

//设置坐标轴的范围
void setRange(qreal min, qreal max)
void setMax(qreal max)
void setMin(qreal min)

// 设置坐标轴的标题
void setTitleText(const QString &title)//标题名称
void setTitleFont(const QFont &font)
void setShadesColor(QColor color)
void setShadesPen(const QPen &pen)
void setShadesBrush(const QBrush &brush)
void setTitleVisible(bool visible = true)

//  设置主要刻度线的可见性
void setGridLineVisible(bool visible = true)

//  隐藏刻度线 
void QAbstractAxis::hide()

//设置主要刻线线,设置为11,则按范围等分为10份, 在 QValueAxis::TicksFixed 时生效
void setTickCount(int count)


void setPointLabelsClipping(bool enabled = true)
// 设置点的标签的颜色
void setPointLabelsColor(const QColor &color)
// 设置点的标签的字体
void setPointLabelsFont(const QFont &font)

4.QAbstractSeries

  • QAbstractSeries类是数据集合,主要子类为QLineSeries——折线类,在QChart中添加QAbstractSeries,才可以展示出数据,否则QChart只能展现坐标轴。
  • QAbstractSeries为系列的基类,其下又分为 QXYSeries类(折线图、样条曲线图、散点图的基类)、QPieSeries类(饼状图)、QAbstractBarSeries类(条状图)
// 1.1 添加单个数据 不推荐        
void append(qreal x, qreal y)
// 1.2 添加单个数据 不推荐        
void append(const QPointF &point)
// 1.3 添加多个数据 不推荐        
void append(const QList<QPointF> &points)
// 1.4 替换单个数据 不推荐   
void replace(qreal oldX, qreal oldY, qreal newX, qreal newY)
// 1.5 替换多个数据 不推荐     
void replace(QList<QPointF> points)
// ***1.6 替换多个数据 极力推荐     (使用replace时,将不需要使用clear())
void replace(QVector<QPointF> points)
// 2 在系列中根据索引获取坐标
const QPointF &at(int index) const
// 3 插入某个点   
void insert(int index, const QPointF &point)
// 4 获取画刷 
QBrush brush() const
// 5 清空
void clear()
// 6 获取颜色   折线图、样条曲线图的线条颜色  散点图的填充颜色
virtual QColor color() const
// 7 获取点的数量
int count() const
// 8 获取绘制轮廓的笔
QPen pen() const

注意:

使用图表的时候,需要在.pro文件中加入QT+=charts

5.折线图的实现

1.创建QChartView 和 QChart 显示在中间,将QChart与QChartView进行绑定。

2.创建QLineSeries曲线,将数据填充到曲线中,并将曲线添加到图表当中

3.创建x/y坐标轴,将坐标轴根据曲线的数据填充到图表当中

(需要先设置曲线(数据)设置进图表当中,再设置X/Y轴进入图表当中。否则曲线的值与坐标轴不会相对应。)

实现:


#include<QtCharts>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //1.创建视图
    QChartView* v=new QChartView;
    //2.创建图表
    QChart* chart=new QChart;
    chart->setTitle("2023年1-6月的生活开销");
    //3.将图表绑定在视图上
    v->setChart(chart);
    //4.将视图显示在窗口中间
    this->setCentralWidget(v);
    



    //创建曲线,给曲线设置值
    QLineSeries* xline=new QLineSeries;
    xline->append(0,0);
    xline->append(1,1560);
    xline->append(2,1630);
    xline->append(3,1540);
    xline->append(4,1200);
    xline->append(5,1350);
    xline->append(6,1290);
    
    //创建X坐标轴
    QValueAxis* ax=new QValueAxis;
    ax->setRange(0,6);
    ax->setTitleText("月份");
    ax->setTickCount(7);
    
    //创建Y轴坐标轴
    QValueAxis* ay=new QValueAxis;
    ay->setRange(0,2000);
    ay->setTitleText("生活开销");
    ay->setTickCount(5);

    //将曲线添加到图表当中
    chart->addSeries(xline);
    //安装xline的数据设置X/y轴
    chart->setAxisX(ax,xline);
    chart->setAxisY(ay,xline);
}

6.柱状图的实现

步骤:

1.创建QChartView 和 QChart 显示在中间,将QChart与QChartView进行绑定。 

2.创建QBarSet对象(条状对象),并给QBarSet对象设置相应的值。

3.将每一个QBarSet封装进QStackedBarSeries对象当中,并设置进图表当中

3.创建x/y坐标轴,将坐标轴根据 条状对象 的数据填充到图表当中

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建视图和图表
    QChartView* view=new QChartView;
    QChart* chart=new QChart;

    view->setChart(chart);
    this->setCentralWidget(view);

    //创建柱状形集对象
    QBarSet* set1=new QBarSet("语文");
    QBarSet* set2=new QBarSet("数学");
    QBarSet* set3=new QBarSet("英语");

    //给每个人的每一科成绩赋值
    *set1<<130<<120<<110<<97<<88;
    *set2<<148<<128<<137<<98<<99;
    *set3<<123<<87<<99<<130<<120;
    
    //设置条状的颜色
    set1->setLabelColor(QColor(0,0,255));
    set2->setLabelColor(QColor(0,0,22));
    set3->setLabelColor(QColor(0,0,110));

    //将QBarSet对象封装成QStackedBarSeries类型的对象
    //再设置进图表当中
    QStackedBarSeries* bar1=new QStackedBarSeries();
    bar1->append(set1);
    QStackedBarSeries* bar2=new QStackedBarSeries();
     bar2->append(set2);
    QStackedBarSeries* bar3=new QStackedBarSeries();
     bar3->append(set3);

    
    chart->addSeries(bar1);
    chart->addSeries(bar2);
    chart->addSeries(bar3);


    //创建x轴
    QStringList list={"小张","王五","李四","小明","子龙"};
    QBarCategoryAxis* ax=new QBarCategoryAxis;
    ax->append(list);
    ax->setTitleText("姓名");

    //创建y轴
    QValueAxis* ay=new QValueAxis;
    ay->setRange(0,150);
    ay->setTitleText("成绩");
    ay->setTickCount(6);

    //设定坐标轴,x坐标轴或与y坐标轴 要与数据相对应
    chart->setAxisX(ax,bar1);
    chart->setAxisY(ay,bar1);

    chart->setAxisX(ax,bar2);
    chart->setAxisY(ay,bar2);

    chart->setAxisX(ax,bar3);
    chart->setAxisY(ay,bar3);
}

1.x轴采取QBarCategoryAxis,是因为需要将名字显示在柱状图的中间。再单元格的中间.

 2.QBarSet类型封装成QStackedBarSeries类型,是因为chart->append不能接收QBarSet的类型。

一个QStackedBarSeries对应一种颜色的条状结构。

 3.需要先将柱状图设置设置进图表,在设置坐标轴

7.饼状图的实现

1.创建QChartView 和 QChart 显示在中间,将QChart与QChartView进行绑定。 

2.创建QPieSeries对象(饼状图),设置各个切片的数据和比例

3.将饼状图设置进图表当中。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QChartView* view=new QChartView;
    QChart* chart=new QChart;
    chart->setTitle("第一次月考语文成绩所占的百分比");
    view->setChart(chart);

    this->setCentralWidget(view);

    //设置饼状图
    QPieSeries* pie=new QPieSeries;
    QPieSlice* s1=pie->append("60分以下",30);
    QPieSlice* s2=pie->append("60~80分",40);
    QPieSlice* s3=pie->append("80~90分",20);
    QPieSlice* s4=pie->append("90分以上",10);

    //设置各个模块的颜色    
    s1->setColor(QColor(255,0,0,255));
    s2->setColor(QColor(0,255,0,255));
    s3->setColor(QColor(0,0,255,255));
    s4->setColor(QColor(255,255,0,255));

    //将饼状图设置进图表中
    chart->addSeries(pie);
}

QPieSlice 类表示饼图中的单个切片,饼图的数据类型是QPieSeries。

QPieSeries的公共成员函数:
bool append(QPieSlice *slice)
bool append(const QList<QPieSlice *> &slices)

将切片附加到饼图中。切片所有权传递给饼图。返回是否追加成功。
QPieSlice *append(const QString &label, qreal value)

//将具有指定值和标签的单个切片附加到饼图。
//切片所有权传递给饼图。如果 value 为 NaN、Inf 或 -Inf,
//则返回 null,并且不向饼图中添加任何内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么Qt框架没有广泛流行起来?

Qt框架实际上是相当流行和广泛使用的框架之一&#xff0c;尤其在跨平台应用程序开发领域。然而&#xff0c;以下是一些可能解释为什么Qt框架没有在某些领域或某些地区广泛流行起来的原因&#xff1a; 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 缺乏…

【Java】一只小菜坤的编程题之旅【1】

文章目录 1.判断是否为回文字符串&#xff08;题号&#xff1a;牛客NC141 &#xff09;2、求平方根&#xff08;题号&#xff1a;牛客NC32 &#xff09;3.截断句子&#xff08;力扣&#xff09;4.删除有序数组中的重复项&#xff08;力扣&#xff09; 1.判断是否为回文字符串&a…

Simulink仿真模块 - Memory

Memory:输出上一个时间步的输入 在仿真库中的位置为:Simulink / Discrete HDL Coder / Discrete 模型为: 双击模型打开参数设置界面,如图所示: 说明 Memory 模块将其输入保持并延迟一个主积分时间步。当放置于迭代子系统中时,该模块将其输入保持并延迟一个迭代。…

聚焦前沿技术产业应用,文心大模型应用研讨会于广州顺利举办

当前&#xff0c;人工智能已经成为新一轮科技革命和产业变革的重要驱动力量&#xff0c;基于强算法、大算力和大数据的大模型成为人工智能发展的主流方向。 为进一步探索AI大模型的产业实践&#xff0c;2023年7月4日下午&#xff0c;由文心大模型和飞桨主办的“AI私享会-文心大…

STM32使用printf重定向到USART(串口)并打印数据到串口助手

STM32使用sprintf打印数据到串口助手 一.背景知识二. 重定向printf到USART1三.使用printf打印hello,world到串口助手3.1 usart.c3.2 usart.h3.3 main.c 四. 实验现象五.结语 一.背景知识 我们知道我们在进行编程的时候&#xff0c;遇到问题&#xff0c;经常通过打印信息进行调…

【MySQL】不允许你不会创建高级联结

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…

浅谈一下 webpack 以及 loader 和 plugin

话说&#xff0c;前端练习时长也快两年了&#xff0c;但是关于 webpack 的东西好像也没怎么研究过 &#x1f605; &#x1f6a9;一是没有这方面的需求&#xff1a;回想一下&#xff0c;关于 webpack 的配置相关工作&#xff0c;也就只有自己配置过一次 loader「使用 svg-sprit…

5G工业路由器赋能无人驾驶技术发展,无线车联网应用方案

随着无人驾驶技术进入大众视野&#xff0c;5G技术已广泛应用在各行各业中&#xff0c;无人驾驶也成了汽车自动化发展的核心趋势。无人驾驶技术需要满足低时延、高效率、大带宽、稳定性等硬性要求&#xff0c;工业路由器IR2730采用5G网络快速接入&#xff0c;拥有广泛连接能力&a…

appium 笔记

配置相关信息查看 appium.io 初始化&#xff1a; desired_caps {} desired_caps["automationName"] "UiAutomator2" desired_caps["platformName"] "Android" # 操作系统类型 desired_caps["platformVersion"] "5…

[入门必看]数据结构6.2:图的存储及基本操作

[入门必看]数据结构6.2&#xff1a;图的存储及基本操作 第六章 图6.2 图的存储及基本操作知识总览6.2.1 邻接矩阵法6.2.2 邻接表法6.2.36.2.4 十字链表、邻接多重表6.2.5 图的基本操作 6.2.1 邻接矩阵法图的存储——邻接矩阵法邻接矩阵法存储带权图&#xff08;网&#xff09;邻…

OpenAI再建顶级团队,重金招聘核心岗成员,阻止超级AI的威胁!

“AI确实可能会杀死人类。”这并不是哪家自媒体为博人眼球而发表的谣言&#xff0c;而是ChatGPT之父、OpenAI CEO山姆奥尔特曼在今年3月与MIT研究科学家Lex Fridman对话时亲口所说的一句话。 如今&#xff0c;这位全世界最受瞩目的老板决定采取行动&#xff0c;以阻止自己的预…

【算法】AcWing算法基础课笔记 第一章 基础算法 Part 1

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;AcWing &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对你…

Python程序设计基础:列表与元组(一)

文章目录 一、列表的表示与访问1、列表的表示2、列表的访问 二、列表的元素操作1、元素的修改2、元素的增加3、元素的删除4、其他操作 三、列表操作1、列表的遍历2、列表的排序3、列表的切片4、列表的扩充5、列表的复制6、列表的删除 一、列表的表示与访问 1、列表的表示 列表…

自营外卖配送平台的商家如何对接第三方美饿的订单

自营外卖跑腿平台对接第三方美饿的好处 单说美团饿了么自身的流量优势&#xff0c;很多商家不能忽视&#xff0c;但是美团饿了么的高额配送成本与抽成&#xff0c;同样也不能忽视。很多商家希望选择自配送或者其他更划算的配送方式来节省成本。这时&#xff0c;区域性的自建外…

【Java】单例模式

单例模式 设计模式概述单例模式实现思路饿汉式懒汉式饿汉式 vs 懒汉式 设计模式概述 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱&#xff0c;不同的棋局&#xff0c;我…

AttributeError: module ‘collections‘ has no attribute ‘Iterable‘

vitables 出现 AttributeError: module collections has no attribute Iterable错误修改如下图&#xff1a;

PCIE转PMC载板

描述 这是一款被动适配卡&#xff0c;它支持通过要转换为 PCIe x4 通道边缘连接器的 AMC 接头&#xff0c;来选择 TI EVM&#xff1b;因此它可被插入一个台式计算机或使用 PCIe 接头的任何位置。选定的 TI EVM 支持 DSP 上的本地 PCIe。此卡作为适配器&#xff0c;需要可与 AMC…

Linux与Windows:操作系统的比较与技巧分享

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Java 动态规划 Leetcode 62. 不同路径

代码展示&#xff1a; class Solution {public int uniquePaths(int m, int n) {//定义dp数组//二维数组多增加一行一列&#xff0c;方便对数组进行初始化int[][]dpnew int[m1][n1];//初始化dp[0][1]1;//填充数组for(int i1;i<m;i){for(int j1;j<n;j){dp[i][j]dp[i-1][j…

@Around踩坑记录

Around踩坑记录 先上结论&#xff1a; 如果你在定义切面的时候打算使用环绕通知➕定义注解的方式&#xff0c;那么在进行*Around*("(annotation(costTrace))") 类似这样的定义的时候&#xff0c;”costTrace“一定要与你定义切面中入参的参数名字一致&#xff0c;而…