Qt开发1--QCustomPlot的第一个示例

这篇具有很好参考价值的文章主要介绍了Qt开发1--QCustomPlot的第一个示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文记录了在Linux上使用QCustomPlot进行一个基本绘制所需的完整过程,包括如何使用qtcreator,编辑ui以及编写相应的C++代码。以下是详细步骤:

1、使用qtcreator启动开发环境:

[blctrl@main-machine qt]$ qtcreator

启动后,显示以下一个操作界面:

Qt开发1--QCustomPlot的第一个示例

 2、通过菜单栏File->New File or Project启动项目新建向导:

Qt开发1--QCustomPlot的第一个示例

3、选择Application->Qt Widgets Application后点击Choose,进入以下一个窗口:

Qt开发1--QCustomPlot的第一个示例

填入自己的项目名称并且选择项目存储路径,勾选复选项,点击Next按钮。

4、在接下来出现的对话框中,都点击next按钮,直到遇到带有finish按钮的对话框,点击finish后,完成项目创建。

Qt开发1--QCustomPlot的第一个示例

在点击最后一个对话框中finish按钮后,出现以下一个界面:

Qt开发1--QCustomPlot的第一个示例 5、复制下载的QCustomPlot头文件和源文件到这个项目路径下:

[blctrl@main-machine qt]$ cd plot
[blctrl@main-machine plot]$ ls
main.cpp  mainwindow.cpp  mainwindow.h  mainwindow.ui  plot.pro  plot.pro.user
[blctrl@main-machine plot]$ cp ../qcustomplot/qcustomplot.* ./
[blctrl@main-machine plot]$ ls
main.cpp  mainwindow.cpp  mainwindow.h  mainwindow.ui  plot.pro  plot.pro.user  qcustomplot.cpp  qcustomplot.h

 6、修改plot.pro文件,内容如下:

QT       += core gui

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

greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11                            
lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11   

TARGET = plot
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
	qcustomplot.cpp

HEADERS  += mainwindow.h \
	qcustomplot.h

FORMS    += mainwindow.ui

 7、保存以上文件后,项目窗口中,Sources和Headers分别增加了一个qcustomplot.cpp源文件和qcustomplot.h头文件。

8、双击项目下Forms中mainwindow.ui文件,弹出一个图形编辑窗口:

Qt开发1--QCustomPlot的第一个示例

 9、点击控件,将Containers下Widget控件拖动到所编辑窗口上。将鼠标放置在空白窗口区,点击水平布局。此时,被拖入的widget将占据整个窗口的客户区。

10、点击被拖入的widget,然后右键单击鼠标,在弹出环境菜单中,选择Promoto to...选项,在弹出的对话框中Promoted Class栏输入QCustomPlot,点击Promote按钮。

Qt开发1--QCustomPlot的第一个示例

 11、将属性窗口中,objectName从widget改成customPlot。

Qt开发1--QCustomPlot的第一个示例

 12、编辑头文件mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "qcustomplot.h"  // 添加QCustomPlot类的头文件

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setupDemo(QCustomPlot * customPlot);  //编辑一个进行绘制的成员函数

private:
    Ui::MainWindow *ui;
    QString demoName;    // 添加一个成员变量
};

#endif // MAINWINDOW_H

13、编辑头文件mainwindow.cpp源文件:

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

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

    setGeometry(400, 250, 542, 390);

     setupDemo(ui->customPlot);

}

MainWindow::~MainWindow()
{
    delete ui;
}


// 绘图成员函数的实现
void MainWindow::setupDemo(QCustomPlot * customPlot)
{
    demoName = "Simple Plot Demo";
    // 产生数据:
    // 进行初始化
    QVector<double> x(101), y(101); 
    for (int i=0; i<101; ++i)
    {
      x[i] = i/50.0 - 1; // x从-1到1
      y[i] = x[i]*x[i];  // 绘制2次函数
    }
    // 创建图形并且将数据赋给它:
    customPlot->addGraph();
    customPlot->graph(0)->setData(x, y);
    // 设置轴的标签:
    customPlot->xAxis->setLabel("x");
    customPlot->yAxis->setLabel("y");
    // 设置轴的范围,因而可以看到全部数据:
    customPlot->xAxis->setRange(-1, 1);
    customPlot->yAxis->setRange(0, 1);

  // 设置窗口标题栏名称
  setWindowTitle("QCustomPlot: " + demoName);
  statusBar()->clearMessage();
  ui->customPlot->replot();
}

14、点击编译,编辑成功后,点击运行按钮:

Qt开发1--QCustomPlot的第一个示例

 15、显示运行如下的程序:

Qt开发1--QCustomPlot的第一个示例

本教程将customPlot用作指向QCustomPlot实例地指针。如果你已经在QCreator中提升了一个widget,并且将其名称更改为customPlot后,你将可以通过ui->customPlot访问这个widget。

你可以通过customPlot->addGraph()创建一个新图形。接着例如通过customPlot->graph(0)->setData(...)为这个图形分配一些数据点,例如为X和Y(键和值)用QVector(double)地形式。QCustomPlot使用术语键和值而不是x和y的原因是在分配哪个轴有什么角色中更加灵活。因而如果你定义左轴为"键轴"和底轴为"值轴",你可以绘制一张在绘图左面直立的图形。默认,QCustomPlot widget有类型QCPAxis的四个轴:customPlot->xAxis, yAxis, xAxis2和yAxis2,对应底、左,上和右轴。它们的范围定义了绘图哪部分当前可见:customPlot->xAxis->setRange(-1, 1);

要使得绘图的任何类型编号显示在屏幕上,调用customPlot->replot()。注意:当wiget尺寸变化时以及当内建用户交互被触发时,将自动发生重绘。这样的用户交互例如用鼠标拖动轴范围以及用鼠标滚轮缩放。

由这个轴当前使用的轴ticker,自动选择刻度步长和标签。这是类型QCPAxisTicker的实例,并且例如通过xAxis->ticker()是可访问的。你可以通过xAxis->ticker()->setTickCount(6)调整ticker尝试创建的近似刻度数。默认的轴ticker很适合于简单的数值显示,然而有专用的类,例如,用于时间跨度,日历日期,类别,pi(或者其它符号单位)以及对数轴。详细见QCPAxisTicker。

Axes的刻度标签(数值)不超出这个widget的边框,即使当它们变得更宽。这是由于自动的边缘计算,默认其被开启。如果刻度标签和axis标签需要更多空间,它使得axis矩形收缩。如果你不想要边沿被自动确定,通过调用customPlot->axisRect()->setAutoMargins(QCP::msNone)禁用这种行为。接着你可以通过customPlot->axisRect()->setMargin(..)手动调整边沿。

更改外观:

1)图形:图形外观具有很多因素的特点,它们都可以被修改。以下是重要的因素:

  • 线型:调用graph->setLineStyle(..)。对于所有可能的线型,见QCPGraph::LineStype文档,或者在介绍页的线型demo截图。
  • 线笔:QPainter-框架提供的所有笔都是可用的,例如,实心,虚线,点,不同宽度,颜色,透明等。通过graph->setPen(..)设置配置的笔。
  • 散点符号:调用graph->setScatterStyle(..)来更改散点符号的外观。所有可能的散点类型,见QCPScatterStyle(...)文档或者介绍页上散点类型demo。如果你在数据点不想要任何散点符号,设置图形的散点类型为QCPScatterStyle::ssNone。
  • 在图形下或者在图形之间填充:QPainter框架提供的所有刷子在图形填充中都能被使用:实心,各种模式,纹理,梯度,颜色,透明度等。通过graph->setBursh(..)设置配置的刷子。

2):通过修改绘制axis使用的笔以及它们的标签使用的字体修改axis的外观。查看QCPAxis的文档见其解释。这是一个最重要属性的概要:SetBasePen, setTickPen, setTickLength, setSubTickLength, setSubTickPen, setTickLabelFont, setLableFont, setTickLabelPadding, setLabelPadding。你可以用setRangeReversed反向一个axis(例如:使得从左到右值递减而不是递增)。如果你在轴末尾想要装饰(例如,箭头),使用SetLowerEnding或setUpperEnding。

3)网格线:通过访问一个轴各自QCPGrid实例修改这个网格。例如,通过访问customPlot->yAxis->grid(),更改网格水平线(其被绑定到左轴)的外观。网格线的外观基本上是绘制它们使用的笔,通过yAxis->grid()->setPen()设置它。在刻度0的网格线可以用不同笔绘制,用setZeroLinePen设置它。如果你不想要用特殊笔绘制0线,只要设置它为Qt::NoPen,并且在刻度0处的网格线将用正常网格笔绘制。子网格线默认被设为不可见。通过grid()->setSubGridVisible(true)激活它们。文章来源地址https://www.toymoban.com/news/detail-513543.html

到了这里,关于Qt开发1--QCustomPlot的第一个示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我们的第一个 Qt 窗口程序

    Qt 入门实战教程(目录) Windows Qt 5.12.10下载与安装 本文介绍用Qt自带的集成开发工具Qt Creator创建Qt默认的窗口程序。 本文不需要你另外安装Visual Studio 2022这样的集成开发环境,也不需要你再在Visual Studio 2022中安装Qt VS Tools这样的插件。 目的就是为了能够让你可以更快的把Q

    2024年02月11日
    浏览(43)
  • Qt QCustomPlot 绘制子轴

    抄大神杰作: QCustomplot(五)QCPAxisRect进行子绘图-CSDN博客 文章浏览阅读5.9k次,点赞7次,收藏60次。文中介绍了QCustomPlot 子绘图需要掌握的类,也就是Matlab中的subplot,最后给出了一个完整的例子。_qcpaxisrect https://blog.csdn.net/weixin_39258979/article/details/122008568 需求来源:试验数据

    2024年01月20日
    浏览(34)
  • Qt实时波形绘图(使用QCustomPlot)

    目录 前言 一、Qt是什么? 二、QCustomPlot是什么? 三、Qt实时波形绘图         3.1 开发环境和工具         3.2 实时波形绘图控件 3.2.1 界面设计及功能 3.2.2 如何使用该控件 总结         我们在涉及或调试设备时,通常需要查看过程数据,以便了解设备的运行情况

    2024年02月08日
    浏览(38)
  • 学会Python开发的第一步:写一个桌面小程序

    嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 当使用桌面应用程序的时候,有没有那么一瞬间, 想学习一下桌面应用程序开发? 建议此次课程大家稍作了解不要浪费太多时间, 因为没有哪家公司会招聘以为Python程序员开发桌面程序吧? Python 3.6 Python是一种代

    2024年02月03日
    浏览(58)
  • 在PyTorch中开发我们的第一个神经网络

    本教程将介绍初学者在PyTorch中构建神经网络的过程。我们将通过一个项目逐步进行操作。本教程将使用Kaggle上的Heart.csv数据集,请随时下载数据集并跟随教程进行:https://www.kaggle.com/rashikrahmanpritom/heart-attack-analysis-prediction-dataset 首先,导入必要的包: 数据集中有一些列的数据

    2024年01月17日
    浏览(37)
  • GPT应用开发:运行你的第一个聊天程序

    本系列文章介绍基于OpenAI GPT API开发大模型应用的方法,适合从零开始,也适合查缺补漏。 本文首先介绍基于聊天API编程的方法。 很多机器学习框架和类库都是使用Python编写的,OpenAI提供的很多例子也是Python编写的,所以为了方便学习,我们这个教程也使用Python。 Python环境

    2024年01月16日
    浏览(89)
  • Linux搭建FISCO BCOS的第一个区块链网络

             FISCO BCOS 是由金融区块链合作联盟(深圳)与微众银行共同发起的开源区块链项目,支持多链多账本,满足金融行业复杂业务需求。 本文将介绍如何在 Ubuntu 操作系统上使用 Linux 命令搭建FISCO BCOS的第一个区块链网络 。 目录 一、前言 二、准备工作 安装Ubuntu依赖

    2024年02月22日
    浏览(47)
  • 鸿蒙Stage模型开发—创建你的第一个ArkTS应用

    基本概念 下图展示了Stage模型中的基本概念。 图1 Stage模型概念图 UIAbility组件和ExtensionAbility组件 Stage模型提供UIAbility和ExtensionAbility两种类型的组件,这两种组件都有具体的类承载,支持面向对象的开发方式。 UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。

    2024年02月04日
    浏览(97)
  • android开发:用IDEA建立你的第一个APP

            主要是记录一下各种小坑。         IDEA目前是第一流行的java开发工具,同时也支持android开发,可以替代安卓官方的andriod studio,不过仍然要依赖android sdk。         本例指导你完成第一个app,需要一台Windows PC和一部android手机。 目录 一、下载安装IDEA 二、新建and

    2024年02月04日
    浏览(66)
  • 从零基础开始开发自己的第一个微信小程序

    通过本篇blog,你可以熟悉从零开始,搭建小程序开发环境,并运行起自己的第一个小程序。 1、 注册账号 2、 下载开发工具搭建开发环境 3、 创建工程,编写代码 4、 手机上查看效果 通过以上四步就能创建属于自己的小程序了。 注册完成后是这样的 小程序开发工具下载地址

    2024年02月14日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包