这次来学学Qt chart 的坐标轴

有这么一组数据:

这是深圳市2019年6月份的天气预报(来自中国天气网:深圳),里面有每天的最高温度,把这最高温度做成个数组,如下:

int daily_temp_max[30] = [32,
31,30,30,31,32,32,32,
32,32,32,31,31,31,31,
30,30,31,32,32,33,33,
30,30,30,30,31,31,31,
33];

按照之前的笔记,建立一个可以用Qt Chart的工程,并把上面的数据用折线图显示出来,代码如下:

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this); int daily_temp_max[30] = {32,
31,30,30,31,32,32,32,
32,32,32,31,31,31,31,
30,30,31,32,32,33,33,
30,30,30,30,31,31,31,
33}; QLineSeries* temp_max_series = new QLineSeries(); for(int i=0;i<30;i++)
temp_max_series->append(i,daily_temp_max[i]); chart = new QChart();
chart->addSeries(temp_max_series); ChartView = new QChartView(this);
ChartView->setChart(chart);
ui->containfer->addWidget(ChartView);
}

显示结果为:

上图中只能看想到一条折线,此外看不出任何信息,不知道这个图标表示的是什么数据,数据范围是什么,

现在来给图表加上坐标轴,让图表表示的数据有意义

1. 使用QChart API 添加默认的坐标轴

QChart类有个API:

void QChart::createDefaultAxes()

可以根据QChart中已有的图表创建坐标轴,在程序中调用该函数,代码为:

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
int daily_temp_max[30] = {32,
31,30,30,31,32,32,32,
32,32,32,31,31,31,31,
30,30,31,32,32,33,33,
30,30,30,30,31,31,31,
33}; QLineSeries* temp_max_series = new QLineSeries(); for(int i=0;i<30;i++)
temp_max_series->append(i,daily_temp_max[i]); chart = new QChart();
chart->addSeries(temp_max_series); chart->createDefaultAxes();
ChartView = new QChartView(this);
ChartView->setChart(chart);
ui->verticalLayout->addWidget(ChartView);
}

显示结果为:

2. 手动添加坐标轴

首先使用QValueAxis来创建坐标轴,如下:

 Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
int daily_temp_max[30] = {32,
31,30,30,31,32,32,32,
32,32,32,31,31,31,31,
30,30,31,32,32,33,33,
30,30,30,30,31,31,31,
33}; QLineSeries* temp_max_series = new QLineSeries(); for(int i=0;i<30;i++)
temp_max_series->append(i,daily_temp_max[i]); chart = new QChart();
chart->addSeries(temp_max_series); axisX = new QValueAxis();
axisY = new QValueAxis();
chart->addAxis(axisX,Qt::AlignBottom);
chart->addAxis(axisY,Qt::AlignLeft);
axisX->setRange(0, 30);
axisY->setRange(28, 35); temp_max_series->attachAxis(axisX);
temp_max_series->attachAxis(axisY); ChartView = new QChartView(this);
ChartView->setChart(chart);
ui->verticalLayout->addWidget(ChartView);
}

上面代码中:

    axisX = new QValueAxis();
axisY = new QValueAxis();

是用来创建坐标轴的,这里创建2个坐标轴,然后把X轴添加到图表的底部,Y轴添加到图表的左边:

    chart->addAxis(axisX,Qt::AlignBottom);
chart->addAxis(axisY,Qt::AlignLeft);

然后设置坐标轴的范围,由于有30个数据,所以把X轴设置为0-30,要显示的数据最大值为33,最小值为30,这里把Y轴设置为29-34,然后跟temp_max_series关联起来:

    axisX->setRange(0, 30);
axisY->setRange(29, 34); temp_max_series->attachAxis(axisX);
temp_max_series->attachAxis(axisY);

最后显示结果如下:

3.datatime
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
int daily_temp_max[30] = {32,
31,30,30,31,32,32,32,
32,32,32,31,31,31,31,
30,30,31,32,32,33,33,
30,30,30,30,31,31,31,
33}; QLineSeries* temp_max_series = new QLineSeries();
QDateTime Time;
for(int i=0;i<30;i++)
{ Time.setDate(QDate(2019, 6 , i+1));
temp_max_series->append(Time.toMSecsSinceEpoch(),daily_temp_max[i]);
} chart = new QChart();
chart->addSeries(temp_max_series); QDateTimeAxis *axisX = new QDateTimeAxis;
QDateTime TimeMin;
QDateTime TimeMax;
TimeMin.setDate(QDate(2019, 6 , 1));
TimeMax.setDate(QDate(2019, 6 , 30));
axisX->setRange(TimeMin,TimeMax);
axisX->setTickCount(10);
axisX->setFormat("yyyy/M/d");
axisX->setTitleText("Date"); chart->addAxis(axisX, Qt::AlignBottom); axisY = new QValueAxis();
chart->addAxis(axisY,Qt::AlignLeft);
axisY->setRange(29, 34); temp_max_series->attachAxis(axisX);
temp_max_series->attachAxis(axisY); ChartView = new QChartView(this);
ChartView->setChart(chart);
ui->verticalLayout->addWidget(ChartView);
}

学习Qt Charts - Qt Charts的坐标轴的更多相关文章

  1. qt学习教程1.qt开发环境搭建

    qt学习教程1.qt开发环境搭建 首先下载qt 下载地址:http://download.qt.io/archive/qt/ 此教程使用的版本为5.1.1 下载好后,打开安装包,然后点下一步 选择一个 ...

  2. QT入门学习笔记1:为什么要选QT及QT软件下载

    为什么选择QT? Qt突出的优势: ◆ Qt 是基于 C++ 的一种语言扩展(Extention) C/C++ 目前还是一种很多人都在学习的语言. Qt的好处就在于Qt本身可以被称作是一种 C++ 的 ...

  3. PyQt学习随笔:Qt Designer调用帮助时报错找不到assistant.exe文件的解决办法

    老猿是按照<第15.5节 PyQt5安装与配置>步骤安装的PyQt及相关工具,但最近在Qt Designer中点击帮助相关菜单时报错找不到assistant.exe文件,如图: 按照报错信 ...

  4. PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性

    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...

  5. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性

    toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...

  7. PyQt学习随笔:Qt事件类QEvent详解

    QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...

  8. PyQt学习随笔:Qt中Model/View中的怎么构造View匹配的Model

    老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相 ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中窗口对象的windowFilePath属性

    windowFilePath属性仅对窗口对象有效,用于关联一个窗口和对应的文件及路径. 当窗口没有设置标题属性的情况下,则窗口标题展示展示windowFilePath对应的文件名的信息(路径信息不展示 ...

  10. PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的shortcut 属性

    shortcut 属性保存与按钮关联的快捷键.可以使用shortcut()和setShortcut(QKeySequence)访问和设置该属性. 关于这个属性官网介绍的不多,经老猿实际验证,它与tex ...

随机推荐

  1. linux-TCP多线程的并发服务器- 以言责人甚易,以义持己实难!!!

    1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <ti ...

  2. 最全的go语言的时间格式

    该文可以快速在Go语言中获得时间的计算. 在Go中获取时间 如何获取当前时间 now := time.Now() fmt.Printf("current time is :%s", ...

  3. 用JIRA管理你的项目——(一)JIRA环境搭建

    JIRA,大家应该都已经不陌生了! 最初接触这个工具的时候,我还在一味地单纯依靠SVN管理代码,幻想着SVN可以有个邮件通知,至少在项目成员进行代码修改的时候,我可以第一时间通过邮件获得这个消息! 当 ...

  4. [刷题] 17 Letter Combinations of a Phone Number

    要求 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合 1 不对应任何字母    示例 输入:"23" 输出:["ad", "ae&q ...

  5. CentOS 7系统中的时间日期设置

    修改 CentOS 7系统中的时间日期设置 timedatectl set-ntp no timedatectl timedatectl set-time 2022-06-04 timedatectl ...

  6. xl release 安装

    前提,该版本需要jdk-1.8以上(包括1.8),内存大于等于2G,磁盘最小空间2G,操作系统windows或者unix-family xl release是一个端到端的管道编排工具. 下载XL-re ...

  7. Ansible_变量管理与设置

    一.Ansible变量管理 1.变量概述 Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值.这可以简化项目的创建和维护,并减少错误的数量 通过变量,可以轻松地在An ...

  8. 【转载】ltp压力测试结果分析脚本

    博客园 首页 新随笔 联系 管理 订阅 随笔- 8  文章- 0  评论- 0  ltp压力测试结果分析脚本   最近工作性质发生了改变,在做操作系统方面的测试.接手的第一个任务是做ltp stres ...

  9. IT菜鸟之思科模拟实验(PT)

    思科官方的模拟软件:cisco packet tracer 网卡端口类型: Ethernet(以太网) 十兆 FastEthernet 百兆 GigabitEthernet 千兆 交换机的端口默认都是 ...

  10. 3.socket编程示例

    #block_server.py 非阻塞IO示例#有个疑惑:下面的connfd的blockind要设置为True,不然会出错,待解决from socket import *from time impo ...