说明

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

1. 下载源码

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

2. 使用方法

2.1 将源文件添加进项目

qcustomplot.hqcustomplot.cpp 两个文件放在项目路径下,然后右键 项目名 -> 添加现有文件...,选择 qcustomplot.hqcustomplot.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.uiqcustomplot.hqcustomplot.cpp。其中 mainwindow.ui 是 Qt Creator 生成的默认 UI 文件,界面中只多了一个提升后的 QCustomPlot 控件,可使用同样步骤再次生成。qcustomplot.hqcustomplot.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. [Linux]常用命令之【cat/echo/iconv/vi/grep/find/head/tail】

    cat cat [选项] [文件].. # 一次显示整个文件或从键盘创建一个文件或将几个文件合并成一个文件 cat -n file1 # 编号文件内容再输出 echo -n 输出后不换行 -e 遇到转 ...

  2. 手机号码归属地 API 实现个性化推荐的思路分析

    前言 随着移动互联网和智能手机的普及,越来越多的人使用手机上网和购物,移动营销已成为企业获取用户和提升品牌知名度的重要手段.手机号码归属地 API 作为移动营销的关键工具,具有广阔的应用前景. 本文将 ...

  3. 数据泵:oracle数据泵导入导出部分用户

    问题描述:需要将140服务器中的tbomnew实例下的部分用户导入到118服务器下的tbompx实例中,本次导入导出的两个数据库均为19C 部分用户名:CORE,MSTDATA,BOMMGMT,CFG ...

  4. 你真的懂synchronized锁?

    1. 前言 synchronized在我们的程序中非常的常见,主要是为了解决多个线程抢占同一个资源.那么我们知道synchronized有多种用法,以下从实践出发,题目由简入深,看你能答对几道题目? ...

  5. 【Spring注解驱动】(二)AOP及一些扩展原理

    1 AOP动态代理简介及功能实现 1.1 简介 指在程序运行期间动态地将某段代码切入到指定方法的指定位置进行运行的方式. 1.2 功能实现测试 功能:实现在业务逻辑运行的时候将日志打印 ①导入aop模 ...

  6. 【Vue】三

    Vue组件 非单文件组件 一个文件包含多个组件 单文件组件 一个文件只包含一个组件,vue文件初始化:vueInit <template lang=""> <di ...

  7. React onBlur回调中使用document.activeElement返回body解决方案

    最开始想实现一个功能,点击img图标后给出购物下拉框CartDropdown,当img及CartDropdown失去焦点时隐藏CartDropdown. 最开始的核心代码如下: export defa ...

  8. ES日志存储以及备份压缩到COS

    导语 为了满足用户日益增长的日志存储大小,不影响用户的写入和查询性能.满足不同用户写入流量.同时用户日志长期保存,日志存储比较占用空间和成本.ES集群规格配置高,消耗资源和成本.我们基于Go语言设计了 ...

  9. 华为云新一代iPaaS全域融合集成平台全新升级

    摘要:基于华为十多年的数字化转型实践,华为云通过组装式交付.数智驱动.DevOps.服务化架构.安全可信.韧性6大关键技术助力客户实现应用现代化和高质量增长,华为云新一代iPaaS全域融合集成平台RO ...

  10. Jmeter-测试报告模板分享

    1.jmeter-results-detail-report_21 <?xml version="1.0"?> <!-- ~ Licensed to the Ap ...