QChart的简单使用

这篇博客的目的是记录一下今天学习QChart的内容以及使用初期踩到的几个坑。

使用QChart的前期准备

1. Qt5.9及以上版本;

2. .pro文件中添加QT += charts

3. 在使用QChart的各个控件之前,必须先声明一个命名空间。方法不限,可以使用 QT_CHARTS_USE_NAMESPACE 宏值,也可以手动使用 using namespace QT_CHARTS_NAMESPACE;

理解QChart和QChartView的关系

QChart和QChartView的关系类似于QGraphicsScene和QGraphicsView的关系,QChart本身是用来存放需要展示的控件的类,而QChartView则是用于人眼识别观察的入口。
所有的更改都是在QChart上发生的,不过更改的结果是通过QChartView来进行展示的,因此一般情况下,对于QChartView而言,在设置其关联的QChart之后,就不需要进行其他的更改了。
一般情况下我们所做的各种更改,都是对于QChart而言的,而且一般情况下,QChart本身的功能还是不一定能够满足我们的使用需求,因此正常的使用过程中,我们都是自己写一个继承自QChart的类,然后对这个类进行更改
不过呢,现在只是初学,用QChart就足够了。

结果展示

在这里插入图片描述

使用QChart绘制折线图

目的:绘制一个折线图,里面包含两根折线,以下是示例代码,因为我想多使用几个函数,因此下面的代码由于各种注释掉的函数可能看起来可能会乱一些:

#include <QChart>
#include <QLineSeries>
#include <QChartView>
#include <QAreaSeries>
#include <QDateTimeAxis>
#include <QValueAxis>
#include <QDateTime>

#include "mainwindow.h"
#include "ui_mainwindow.h"


//此句必备
QT_CHARTS_USE_NAMESPACE

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

	//创建蓝色线
    QLineSeries *pLineSeries = new QLineSeries();
    pLineSeries->setPen(QPen(Qt::blue, 1, Qt::SolidLine));
    pLineSeries->append(1, 5);
    pLineSeries->append(3, 4);
    QList<QPointF> list;
    list << QPointF(4, 8) << QPointF(6,10) << QPointF(7, 3) << QPointF(10, 6);
    pLineSeries->append(list);
    pLineSeries->setName(QStringLiteral("蓝色线"));

	//创建红色线
    QLineSeries *pLineSeries2 = new QLineSeries();
    pLineSeries2->setPen(QPen(Qt::red, 1, Qt::SolidLine));
    pLineSeries2->append(1, 2);
    pLineSeries2->append(3, 4);
    QList<QPointF> list2;
    list2 << QPointF(4, 1) << QPointF(5,10) << QPointF(9, 6) << QPointF(10, 20);
    pLineSeries2->append(list2);
    pLineSeries2->setName(QStringLiteral("红色线"));
    pLineSeries2->setColor(Qt::red);

    pLineSeries->setPointLabelsVisible(false);
    pLineSeries->setPointLabelsColor(Qt::green);
    pLineSeries->setPointsVisible(true);

	//创建QChart
    QChart *pChart = new QChart();
    pChart->addSeries(pLineSeries);
    pChart->addSeries(pLineSeries2);
    pChart->setTitle(QStringLiteral("测试QChart运行"));
    pChart->createDefaultAxes();
//    pChart->axisX()->setRange(0, 15);
//    pChart->axisY()->setRange(-10, 30);

    pChart->setTheme(QChart::ChartThemeDark);    pLineSeries2->setColor(Qt::red);
    pLineSeries->setColor(Qt::blue);

    //QDateTimeAxis *x = new QDateTimeAxis();
//    QValueAxis *x = new QValueAxis();
//    QValueAxis *y = new QValueAxis();
//    x->setRange(0, 30);
//    y->setRange(-10, 40);
//    pChart->setAxisX(x);
//    pChart->setAxisY(y);

//    QDateTimeAxis *x = new QDateTimeAxis();
//    QDateTime min = QDateTime(QDate(2020, 1, 1), QTime(0, 0, 0));
//    QDateTime max = QDateTime(QDate(2020, 2, 2), QTime(23, 59, 59));
//    x->setRange(min, max);
//    pChart->setAxisX(x);
//    pChart->setAxisY(y);

	//创建QChartView
    QChartView *pView = new QChartView();
    pView->setChart(pChart);
    pView->setRenderHint(QPainter::Antialiasing);

    this->setCentralWidget(pView);
}

使用过程中踩到的几个坑

1. 命名空间

第一个坑就是命名空间,最开始的时候,我没有使用 QT_CHARTS_USE_NAMESPACE ,这就导致我在声明一些诸如坐标轴、折线等控件的时候,一直报错,就如下图所示,一直报找不到这玩意的错误,最开始真的把我整懵了,后来才在示例代码中发现了他使用了这个宏,我就抱着尝试的态度添加上了,最终才解决掉。
在这里插入图片描述

2. 折线的颜色未按照预期进行显示

这个问题出在我加了这行代码之后:

pChart->setTheme(QChart::ChartThemeDark);

这个时候,显示的界面如下:
在这里插入图片描述
发现,我原先设置的折线的颜色为红色和蓝色,但是这里面显示的已经不是这个颜色了。一度令我十分苦恼,后来孙工的一句话提醒了我, 他说:“是不是样式权重的问题。”,这句话提醒了我,是不是样式设置顺序的问题,导致我在设置QChart的样式的时候,将原先设置的折线的样式给覆盖掉了,因为在Qt中,所有的样式设置优先级都是一样的,优先级一样造成后面的样式会覆盖掉原先的样式,这就是最开始的时候折线不是我设定的红色蓝色的原因,最终发现确实是这样,因此我就在下面又添了几行代码(测试用,因此没有考虑冗余的问题):

    pChart->setTheme(QChart::ChartThemeDark);
    pLineSeries2->setColor(Qt::red);
    pLineSeries->setColor(Qt::blue);

这样改了之后,最终的显示结果就是按照设定的来的了。在这里插入图片描述

最后,着重要提醒的是,在使用QChart的时候要加上命名空间!!!

参考链接
折线图参考链接
添加参考链接

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值