Qt Charts示例
Qt 5.7 有一些变化,把原来商业版的几个模块用GPLv3协议放到了社区版本里:
- Qt Charts (GPLv3)
- Qt Data Visualization (GPLv3)
- Qt Virtual Keyboard (GPLv3)
- Qt Purchasing (LGPLv3)
- Qt Quick 2D renderer (GPLv3)
这些模块都是非常赞的!
Qt 5.7 的一些消息,具体参看:
- http://blog.qt.io/blog/2016/06/16/qt-5-7-released/
- https://wiki.qt.io/New_Features_in_Qt_5.7
之前在论坛上看好多人在找可以在Qt中使用的图表库,现在好了,官方的有了。还有Qt Quick 2D renderer,支持在没有OpenGL支持的设备上使用Qt Quick,对于一些嵌入式设备来讲,简直是福音。
好久没弄Qt了,发现版本更新好快,我写《Qt Quick核心编程》和《Qt on Android核心编程》时,版本是5.3,现在5.8 alpha都出来了……我已经Out了……
现在偶有时间,赶紧试用了下Qt Charts,简单,好用,没说的啊。
示例效果
先上一个小demo的效果图:
基本用法
Qt Charts作为模块随Qt SDK发布,要使用,首先需要在 pro 文件中加入下面的语句:
QT += charts
然后,在代码中加入下面的语句:
#include <QtCharts>
using namespace QtCharts;
再接下来就可以使用Qt Charts模块的各种类库了。介绍下比较常见的类库:
>> QChart
最主要的类了,用来显示各种 Charts 。它是QGraphicsWidget的派生类,所以,可以放在 QGraphicsView 中来显示。我提供的简单示例,就是把 6 个 QChart 放在同一个 QGraphicsScene 中展示出来。
使用 QChart 分三步:
- 构造一个实例,比如 new QChart()
- 调用 addSeries() 添加图表数据,调用 addAxis 、 setAxisX 或 setAxisY 配置坐标轴,以及其他一些设置背景、图例的方法
- 使用 QChartView 或 QGraphicsScene + QGraphicsView 来显示 QChart
>> QChartView
这是一个方便类,从QGraphicsView继承而来,专门用于显示 QChart ,而且,窗口大小变化时,它会自动缩放 QChart 。
你可以独立使用QChartView,也可以把它嵌在你的其它UI界面中。最简单的用法是:
auto chart = new QChart();
// ...configure chart
QChartView view(lineChart);
view.show();
如果你想使用 QGraphicsView + QGraphicsScene 这种组合,代码类似下面这样:
auto chart = new QChart();
// ...configure chart
QGraphicsScene scene(0, 0, 500, 400);
scene.addItem(chart);
QGraphicsView view(&scene);
view.show();
注意,使用 QGraphicsView 直接显示 QChart 时,QChart的大小不会随着窗口大小变化而自动变化哦,如有需要,可以自己设置。
>>各种Series及配套的set
Qt Charts用 QAbstractSeries来表示各类图表数据,它有各种各样的派生类。
QAbstractBarSeries 又是一个抽象类,定义柱状图数据;从它派生的可以实例化的代表柱状图数据的类有:
- QBarSeries
- QHorizontalBarSeries
- QHorizontalPercentBarSeries
- QHorizontalStackedBarSeries
- QPercentBarSeries
- QStackedBarSeries
我的示例里演示了 QBarSeries 和 QPercentBarSeries 的用法。其它的类,看Qt文档即可快速了解用法。
QAreaSeries 定义区块图数据,就是我们示例效果中左下角那个图表那样的。
QBoxPlotSeries 定义箱线图(金融类软件常用)。
QPieSeries 定义饼图数据。
QXYSeries则是诸如 QLineSeries、QScatterSeries的基类。我的示例演示了 QLineSeries (折线图)的用法。
代码
Show me the code !
#include <QApplication>
#include <QtCharts>
using namespace QtCharts;int main(int argc, char *argv[])
{QApplication a(argc, argv);// use QGraphicsScene + QGraphicsView instead of QChartViewQGraphicsScene scene(0, 0, 960, 560);QGraphicsView view(&scene);view.setRenderHint(QPainter::Antialiasing);view.setMinimumSize(1000, 600);view.setSceneRect(0, 0, 960, 560);// Line Chartauto lineChart = new QChart();lineChart->setTitle("Simple Line Chart");lineChart->legend()->setVisible(false);auto lines = new QLineSeries();lines->append(5, 5);lines->append(10, 38);lines->append(35, 60);lines->append(50, 20);lines->append(80, 90);lines->append(100, 70);lineChart->addSeries(lines);lineChart->setGeometry(10, 4, 300, 260); // the method of QGraphicsWidget, move && resizelineChart->createDefaultAxes();lineChart->setBackgroundVisible(true);lineChart->setBackgroundPen(QPen(Qt::lightGray)); // the framelineChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));scene.addItem(lineChart);// Bar Chartsauto barChart = new QChart();barChart->setTitle("Simple Bar Charts");barChart->setAnimationOptions(QChart::SeriesAnimations);auto bars = new QBarSeries();//QBarSet, value sets, from 0 ~ N, 0 <--> categories 0auto setJan = new QBarSet("Jan");setJan->setBrush(QBrush(Qt::darkRed));*setJan << 20 << 120 << 60 << 40;bars->append(setJan);auto setFeb = new QBarSet("Feb");setFeb->setBrush(QBrush(Qt::darkBlue));bars->append(setFeb);setFeb->append(50);setFeb->append(160);setFeb->append(80);setFeb->append(100);auto setMar = new QBarSet("Mar");bars->append(setMar);*setMar << 40 << 140 << 120 << 100;barChart->setGeometry(320, 4, 300, 260);barChart->setBackgroundPen(QPen(Qt::lightGray)); barChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));barChart->addSeries(bars);QStringList categories;categories << "Jan" << "Feb" << "Mar" << "Apr";auto axisX = new QBarCategoryAxis();axisX->append(categories);barChart->createDefaultAxes();barChart->setAxisX(axisX, bars);barChart->legend()->setVisible(true);barChart->legend()->setAlignment(Qt::AlignBottom);scene.addItem(barChart);// Pie Chartsauto pieChart = new QChart();pieChart->setTitle("Simple Pie Charts");auto pies = new QPieSeries();pies->append("Qt", 60);pies->append("MFC", 25);pies->append("FLTK", 10);auto gtkSlice = new QPieSlice("GTK", 5);pies->append(gtkSlice);pieChart->addSeries(pies);pieChart->setGeometry(630, 4, 300, 260);pieChart->setBackgroundPen(QPen(Qt::lightGray)); pieChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));pieChart->legend()->setVisible(true);pieChart->legend()->setAlignment(Qt::AlignBottom);scene.addItem(pieChart);// Area Chartsauto upperBounds = new QLineSeries();*upperBounds << QPointF(20, 20) << QPointF(40, 80) << QPointF(80, 60);auto lowerBounds = new QLineSeries();*lowerBounds << QPointF(30, 5) << QPointF(45, 30) << QPointF(70, 10);auto area = new QAreaSeries(upperBounds, lowerBounds);auto areaChart = new QChart();areaChart->legend()->setVisible(false);areaChart->setTitle("Simple Area Chart");areaChart->addSeries(area);areaChart->setGeometry(10, 280, 300, 260);areaChart->setBackgroundPen(QPen(Qt::lightGray)); areaChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));areaChart->createDefaultAxes();scene.addItem(areaChart);// BoxPlot Chartsauto boxplots = new QBoxPlotSeries();auto boxset1 = new QBoxSet(5, 20, 60, 80, 120);auto boxset2 = new QBoxSet();*boxset2 << 20 << 40 << 80 << 100 << 110;auto boxset3 = new QBoxSet();QList<qreal> vals = {0 ,60 ,76 ,120 ,150};boxset3->append(vals);boxplots->append(boxset1);boxplots->append(boxset2);boxplots->append(boxset3);auto boxChart = new QChart();boxChart->legend()->setVisible(false);boxChart->setTitle("Box and Whiskers");boxChart->addSeries(boxplots);boxChart->setGeometry(320, 280, 300, 260);boxChart->setBackgroundPen(QPen(Qt::lightGray)); boxChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));boxChart->createDefaultAxes();scene.addItem(boxChart);// PercentBar Chartsauto pbarChart = new QChart();pbarChart->setTitle("Percent Bar Charts");pbarChart->setAnimationOptions(QChart::SeriesAnimations);auto pbars = new QPercentBarSeries();//QBarSet, value sets, from 0 ~ N, 0 <--> categories 0auto set1 = new QBarSet("Jan");set1->setBrush(QBrush(Qt::darkRed));*set1 << 20 << 120 << 60 << 40;pbars->append(set1);auto set2 = new QBarSet("Feb");set2->setBrush(QBrush(Qt::darkBlue));pbars->append(set2);set2->append(50);set2->append(160);set2->append(80);set2->append(100);auto set3 = new QBarSet("Mar");pbars->append(set3);*set3 << 40 << 140 << 120 << 100;pbarChart->setGeometry(630, 280, 300, 260);pbarChart->setBackgroundPen(QPen(Qt::lightGray)); pbarChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));pbarChart->addSeries(pbars);QStringList pcategories;pcategories << "Jan" << "Feb" << "Mar" << "Apr";auto paxisX = new QBarCategoryAxis();paxisX->append(pcategories);pbarChart->createDefaultAxes();pbarChart->setAxisX(paxisX, pbars);pbarChart->legend()->setVisible(true);pbarChart->legend()->setAlignment(Qt::AlignBottom);scene.addItem(pbarChart);view.show();return a.exec();
}
代码都放在main()方法里了,看起来有些长……不过演示某一个具体Chart的代码都不长。
一些API的用法,参考Qt帮助,这里不再赘述。
Qt Charts示例相关推荐
- Qt Charts基本组成
简述 Qt Charts API 构建在 Qt Graphics View 框架之上,可以使用 QChart 类将图表显示为 QGraphicsWidget.但还有一个方便的类 - QChartVie ...
- Qt Creator调试Qt Quick示例应用程序
Qt Creator调试Qt Quick示例应用程序 调试Qt Quick示例应用程序 调试Qt Quick示例应用程序 Same Game演示展示了如何使用JavaScript编写所有游戏逻辑的QM ...
- QT综合示例:QT串口通信
QT综合示例:QT串口通信 0.界面: 1.代码: 如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了. 0.界面: 1.代码: 1).pro 添加: QT ...
- Qt Charts 动态实时折线图绘制
在Qt Charts发布之前, Qt比较著名两个画图插件是 qwt和Qcustom, 其中Qcustom较轻量,只需要在project 中包含qcustomplot.h 和 qcustomplot.c ...
- Qt Charts 画平行四边形
Qt Charts 画平行四边形 flyfish #include <QApplication> #include <QtCharts> using namespace QtC ...
- Qt官方示例:UI Components: Dial Control Example
这个示例演示了一个简单的自定义仪表盘组件. import QtQuick 2.2 import QtQuick.Window 2.1Rectangle {color: "#545454&qu ...
- Qt Charts 图表组件(折线图)
目录 简述 折线图 简述 QtCharts模块是一组易于使用的图表组件,它基于Qt的GraphicsView架构,其核心组件是QChartView和QChart. 1.QChartView的父类是QG ...
- 完整mes代码(含客户端和server端_Ice简介+Qt代码示例
一.ICE是什么? ICE是ZEROC的开源通讯协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通讯引擎,是一个面向对象的中间件,它封装并 ...
- Qt官方示例-QLineEdit编辑器
基于QLineEdit而写的文本单行编辑器. 上手使用了该编辑器示例,并归纳出以下主要功能分享给大家. 回显模式 根据不同的场合显示字符的不同显示模式,比较常用的模式有密码模式. 使用接口: ...
最新文章
- 天猫全球狂欢夜,我竟然被这个“不是人”的家伙给圈了粉!
- 案例驱动python编程入门-Python程序设计任务驱动式学习教程
- 推荐系统笔记:基于贝叶斯的协同过滤
- Java应用程序的简单令牌认证
- php判断一个字符串是否为纯数字,php判断变量是否为纯数字字符串的方法
- 启动另一个activity
- matlab封闭传递包求解,梯度下降和封闭形式的解决方案 - MATLAB中不同的假设线...
- Oracle-并行多线程和视图view的应用
- PHP 常用算法集锦
- 拓端tecdat|如何使用SAS从Excel中读取一系列单元格
- 易筋SpringBoot 2.1 | 第廿八篇:SpringBoot之循环引用Circular Dependency
- SVN不同分支代码合并
- 有没有测试牙齿需不需要修正的软件,小虎正畸:测一测你到底需不需要进行牙齿矫正?...
- 计算机流程图知识点,高中数学流程图知识点
- 共享单车公司每年花上亿元赎车
- 如何将数据从旧PC传输到新Mac
- 阿尔法元并未否定AI需要“人类师父”
- mysql连接数据了的dep_MySQL数据库基础
- 基于STC89C52RC单片机的密码门锁
- 3DMAX中9个建模小技巧
热门文章
- 很简单的html+js,程序员的浪漫,可以让你小女朋友点开哈。哈哈哈
- ukulele弹奏模拟器v1.0(待完善)
- `java`学习笔记(十二)`Java`--`String``StringBuffer``StringBuilder`
- 视频图像数据处理八:将rgb视频图像转换为yuv420格式视频图像
- 四川大学计算机学院软件工程期末,四川大学软件工程期末复习ppt
- 2015年可视化研究前沿动态
- 解决git Please use -- (and optionally --no-guess) to disambiguate
- 【LaTeX中英排版系列】LaTeX中英双标题、作者、机构、摘要文档首页排版指北
- 前端期末大作业 HTML+CSS 动漫主题网页作业 (1)
- 首涂第八套苹果CMSv10自适应视频模板原创4种颜色风格一键切换