说明

使用 QCustomPlot 绘图库辅助开发时整理的学习笔记。同系列文章目录可见 《绘图库 QCustomPlot 学习笔记》目录。本篇介绍 QCustomPlot 的一种使用方法,通过包含源码的方式进行使用,这也是最常用的方法,示例中使用的 QCustomPlot 版本为 Version 2.1.1。

1. 下载源码

详见本人另一篇博客 【QCustomPlot】下载,使用时,只需要 qcustomplot.h 与 qcustomplot.cpp 两个文件。官网 - QCustomPlot - SettingUp 有对 QCustomPlot 的使用方法做介绍。

2. 使用方法

2.1 将源文件添加进项目

把 qcustomplot.h 与 qcustomplot.cpp 两个文件放在项目路径下,然后右键 项目名 -> 添加现有文件...,选择 qcustomplot.h 与 qcustomplot.cpp。

2.2 修改 .pro 工程文件

由于 QCustomPlot 具有导出 PDF 的功能,使用到了 printsupport 模块,因此需要在 .pro 工程文件中添加这一模块,如下所示,注意前面的版本条件。

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

2.3 将 QWidget 提升为 QCustomPlot

在设计界面中,右键某个 QWidget 控件,点击 提升为...。

在弹出的对话框中,先在 ”提升的类名称“ 一栏写上 QCustomPlot,注意大小写要完全一致,然后点击 添加 按钮,最后点击 提升 按钮。

至此,这个 QWidget 控件就被提升为了 QCustomPlot 控件,可以进行绘图了。

2.4 绘制图像

完成以上几步后,点击左下方的绿色三角,运行项目,会得到一个空的坐标轴,如下所示:

在这个区域内,可以使用 QCustomPlot 提供的方法绘制函数曲线图、参数曲线图、柱状图、箱线图、热力图等,详见帮助文档,或本人同系列博客。这里提供一个示例,在合适的地方添加如下代码:

QVector<double> x = {0,1,2,3,4,5,6,7,8,9};
QVector<double> y = {0,2,4,9,16,25,36,49,64,81};
ui->widget->addGraph();
ui->widget->graph(0)->setData(x, y);
ui->widget->graph(0)->rescaleAxes();
ui->widget->replot();

再次点击左下方的绿色三角,运行项目,会得到以下曲线图:

3. 示例工程源码

3.1 文件 demoQCP.pro

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
TARGET = demoQCP
TEMPLATE = app SOURCES += \
main.cpp \
mainwindow.cpp \
qcustomplot.cpp HEADERS += \
mainwindow.h \
qcustomplot.h FORMS += \
mainwindow.ui

3.2 文件 main.cpp

#include "mainwindow.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show(); return a.exec();
}

3.3 文件 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow(); private:
Ui::MainWindow *ui;
}; #endif // MAINWINDOW_H

3.4 文件 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); // 绘图代码
QVector<double> x = {0,1,2,3,4,5,6,7,8,9};
QVector<double> y = {0,2,4,9,16,25,36,49,64,81};
ui->widget->addGraph();
ui->widget->graph(0)->setData(x, y);
ui->widget->graph(0)->rescaleAxes();
ui->widget->replot();
} MainWindow::~MainWindow()
{
delete ui;
}

3.5 其他文件

除以上四个文件外,还剩三个文件:mainwindow.ui、qcustomplot.h、qcustomplot.cpp。其中 mainwindow.ui 是 Qt Creator 生成的默认 UI 文件,界面中只多了一个提升后的 QCustomPlot 控件,可使用同样步骤再次生成。qcustomplot.h 与 qcustomplot.cpp 即是下载所得的两个文件。

【QCustomPlot】使用方法(源码方式)的更多相关文章

  1. 第6章 RTX 操作系统源码方式移植

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 RTX 操作系统源码方式移植,移植工作比较简单,只需要用户添加需要的源码文件即可, ...

  2. TreeSet集合的add()方法源码解析(01.Integer自然排序)

    >TreeSet集合使用实例 >TreeSet集合的红黑树 存储与取出(图) >TreeSet的add()方法源码     TreeSet集合使用实例 package cn.itca ...

  3. centos7下源码方式安装gitlab8.9+发送邮件+ldap

    CentOS7下源码方式安装gitlab 环境描述 操作系统: centos7 redis: >=2.8 mysql >=5.5.14 git >=2.7.4 架构设计 一台gitl ...

  4. Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程

    下面将依次介绍: 1. 线程状态.Java线程状态和线程池状态 2. start方法源码 3. 什么是线程池? 4. 线程池的工作原理和使用线程池的好处 5. ThreadPoolExecutor中的 ...

  5. 从原子类和Unsafe来理解Java内存模型,AtomicInteger的incrementAndGet方法源码介绍,valueOffset偏移量的理解

    众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性和变量可见性,用volatile保持值的可见性和操作顺序性: 从一个小例子引发的 ...

  6. HashMap实现原理一步一步分析(1-put方法源码整体过程)

    各位同学大家好, 今天给大家分享一下HashMap内部的实现原理, 这一块也是在面试过程当中基础部分被问得比较多的一部分. 想要搞清楚HashMap内部的实现原理,我们需要先对一些基本的概念有一些了解 ...

  7. Java split方法源码分析

    Java split方法源码分析 public String[] split(CharSequence input [, int limit]) { int index = 0; // 指针 bool ...

  8. erlang下lists模块sort(排序)方法源码解析(二)

    上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...

  9. erlang下lists模块sort(排序)方法源码解析(一)

    排序算法一直是各种语言最简单也是最复杂的算法,例如十大经典排序算法(动图演示)里面讲的那样 第一次看lists的sort方法的时候,蒙了,几百行的代码,我心想要这么复杂么(因为C语言的冒泡排序我记得不 ...

  10. getOrCreateEnvironment()方法源码探究

    该方法目的是创建一个环境对象,并且根据环境类型,自动判断是创建web环境对象,还是标准非web环境对象. 首先该方法源于prepareEnvironment准备环境: 然后进入该方法源码: 可以发现: ...

随机推荐

  1. css中所有的选择器(包括比较少见的选择器)

    jQuery.CSS常用选择器 符号 描述 示例 说明 紧接无符号 相当于"并且"关系 input.k-textbox{   ...} 选出input并且包含k-textbox类的 ...

  2. 智能且集成的端到端移动应用程序安全解决方案——Quixxi简介

    移动应用程序安全变得简单快捷 Quixxi 是一种智能且集成的端到端移动应用程序安全解决方案.这个强大的工具可供开发人员在几分钟内保护和监控任何移动应用程序. Quixxi Security 评估应用 ...

  3. 在 Kubernetes 集群上部署 VSCode

    在 Kubernetes 集群上部署 VSCode Visual Studio Code Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,适用于 Win ...

  4. pandas之样本操作

    随机抽样,是统计学中常用的一种方法,它可以帮助我们从大量的数据中快速地构建出一组数据分析模型.在 Pandas 中,如果想要对数据集进行随机抽样,需要使用 sample() 函数.sample() 函 ...

  5. 【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】

    比赛传送门:https://ac.nowcoder.com/acm/contest/53366 难度适中. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式 ...

  6. day65:Linux:nginx代理&nginx负载均衡

    目录 1.nginx代理 2.nginx代理与配置 3.nginx负载均衡调度多web节点(静态页面) 4.nginx负载均衡调度多应用节点(blog) 5.nginx_proxy + web应用节点 ...

  7. Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十三之条件表达式搜索.更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回. 这个操作类似 ...

  8. Arch Linux安装笔记

    ​ 最近有些厌倦Windows,所以想尝试一下Linux,选择Arch的原因不再赘述,建议以ArchLinux官方安装指南为主,这篇笔记只是方便我自己安装而写的,仅供参考. 1. 安装前的准备 1.1 ...

  9. python+folium

    建模时无意中发现了一个很好用的交互式画地图的库!!

  10. mybatis中useGeneratedKeys用法--插入数据库后获取主键值

    前言:今天无意在mapper文件中看到useGeneratedKeys这个词,好奇就查了下,发现能解决我之前插入有外键表数据时,这个外键获取繁琐的问题,于是学习敲DEMO记录    在项目中经常需要获 ...