QCustomPlot的基本使用[通俗易懂]

QCustomPlot的基本使用[通俗易懂]QCustomPlot是QT下一个方便易用的绘图工具,只有两个文件qcustomplot.h和qcustomplot.cpp组成。源文件和使用文档可从官方网站下载。官方网站:http://www.qcustomplot.com/下面介绍下基本使用:1、将qcustomplot.cpp和qcustomplot.h拷贝到工程目录下,并在工程中添加文件。并在工程的pro文

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

QCustomPlot是QT下一个方便易用的绘图工具,只有两个文件qcustomplot.h和qcustomplot.cpp组成。源文件和使用文档可从官方网站下载。

官方网站:http://www.qcustomplot.com/


下面介绍下基本使用:

1、将qcustomplot.cpp和qcustomplot.h拷贝到工程目录下,并在工程中添加文件。

QCustomPlot的基本使用[通俗易懂]QCustomPlot的基本使用[通俗易懂]

QCustomPlot的基本使用[通俗易懂]QCustomPlot的基本使用[通俗易懂]

并在工程的pro文件添加printsupport

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

QCustomPlot的基本使用[通俗易懂]

2、在QT里面添加一个Widget命名为qcustomplotWidget,对这个Widget右击,点击Promote to…

QCustomPlot的基本使用[通俗易懂]

QCustomPlot的基本使用[通俗易懂]

提升类名为QCustomPlot,并点击Add:

QCustomPlot的基本使用[通俗易懂]

QCustomPlot的基本使用[通俗易懂]

最后选中点击Promote:

QCustomPlot的基本使用[通俗易懂]

QCustomPlot的基本使用[通俗易懂]

然后就可以在工程中通过ui->qcustomplotWidget直接使用了。


3、通过本人项目来展示相关代码,实际参考了官网上下载的文档和例程

设置x,y轴:

   ui->qcustomplot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes |	//设置交互方式
                                      QCP::iSelectLegend | QCP::iSelectPlottables);
//    ui->qcustomplot->axisRect()->setupFullAxesBox();
    QBrush qBrush(QColor(255,255,255));//设置背景色
    ui->qcustomplot->setBackground(qBrush);

    ui->qcustomplot->legend->setVisible(true);
    ui->qcustomplot->xAxis->setLabel("Time Axis (t/s)");//设置x轴
    ui->qcustomplot->xAxis->setTicks(false);

    ui->qcustomplot->yAxis->setLabel("EEG Channel");//设置y轴
    ui->qcustomplot->yAxis->setAutoTicks(true);
    ui->qcustomplot->yAxis->setAutoTickStep(true);
    ui->qcustomplot->yAxis->setAutoSubTicks(true);
    ui->qcustomplot->yAxis->setRange(8000.0,10000.0);

x,y轴更多设置可参考QCPAxis Class。


添加图层:

<pre name="code" class="cpp">    graph1 = ui->qcustomplot->addGraph();//增加一条曲线图层
    graph2 = ui->qcustomplot->addGraph();//增加一条曲线图层


//QCPScatterStyle QCPcs1(QCPScatterStyle::ssSquare, QColor(255,0,0),QColor(255,0,0),3);//设置折线图的点的形状及颜色
    QPen qPen1(QColor(255,0,0));
//   graph_1->setScatterStyle(QCPcs1);
    graph1->setPen(qPen1);//设置画笔颜色
    graph1->setData(x,y);
    graph1->setName(QString("F3"));


//QCPScatterStyle QCPcs2(QCPScatterStyle::ssCircle, QColor(0,255,0),QColor(0,255,0),3);//设置折线图的点的形状及颜色
    QPen qPen2(QColor(0,255,0));
//   graph2->setScatterStyle(QCPcs2);
    graph2->setPen(qPen2);//设置画笔颜色
    graph2->setData(x,y);
    graph2->setName(QString("F4"));


图层更多使用情况可参考QCustomPlot Class。

添加数据:

可用graph1->addData()函数,具体函数参数为

void  addData (const QCPDataMap &dataMap) 
void  addData (const QCPData &data) 
void  addData (double key, double value) 
void  addData (const QVector< double > &keys, const QVector< double > &values) 


4、如果要实现对图的缩放移动,可以添加一下槽函数:

/**
 * @brief MainWindow::mousePress
 * 鼠标点击
 */
void MainWindow::mousePress()
{
  // if an axis is selected, only allow the direction of that axis to be dragged
  // if no axis is selected, both directions may be dragged
  if (ui->qcustomplotWidget->xAxis->selectedParts().testFlag(QCPAxis::spAxis))
  {
    ui->qcustomplotWidget->axisRect()->setRangeDrag(ui->qcustomplotWidget->xAxis->orientation());
  }
  else if (ui->qcustomplotWidget->yAxis->selectedParts().testFlag(QCPAxis::spAxis))
  {
    ui->qcustomplotWidget->axisRect()->setRangeDrag(ui->qcustomplotWidget->yAxis->orientation());
  }
  else
  {
    ui->qcustomplotWidget->axisRect()->setRangeDrag(Qt::Horizontal|Qt::Vertical);
  }
}

/**
 * @brief MainWindow::mouseWheel
 * 鼠标滚轮
 */
void MainWindow::mouseWheel()
{
  // if an axis is selected, only allow the direction of that axis to be zoomed
  // if no axis is selected, both directions may be zoomed
  if (ui->qcustomplotWidget->xAxis->selectedParts().testFlag(QCPAxis::spAxis))
  {
    ui->qcustomplotWidget->axisRect()->setRangeZoom(ui->qcustomplotWidget->xAxis->orientation());
  }
  else if (ui->qcustomplotWidget->yAxis->selectedParts().testFlag(QCPAxis::spAxis))
  {
    ui->qcustomplotWidget->axisRect()->setRangeZoom(ui->qcustomplotWidget->yAxis->orientation());
  }
  else
  {
    ui->qcustomplotWidget->axisRect()->setRangeZoom(Qt::Horizontal|Qt::Vertical);
  }
}

/**
 * @brief MainWindow::selectionChanged
 * 曲线选择
 */
void MainWindow::selectionChanged()
{
  /*
   normally, axis base line, axis tick labels and axis labels are selectable separately, but we want
   the user only to be able to select the axis as a whole, so we tie the selected states of the tick labels
   and the axis base line together. However, the axis label shall be selectable individually.

   The selection state of the left and right axes shall be synchronized as well as the state of the
   bottom and top axes.

   Further, we want to synchronize the selection of the graphs with the selection state of the respective
   legend item belonging to that graph. So the user can select a graph by either clicking on the graph itself
   or on its legend item.
  */

  // make top and bottom axes be selected synchronously, and handle axis and tick labels as one selectable object:
  if (ui->qcustomplotWidget->xAxis->selectedParts().testFlag(QCPAxis::spAxis) || ui->qcustomplotWidget->xAxis->selectedParts().testFlag(QCPAxis::spTickLabels) ||
      ui->qcustomplotWidget->xAxis2->selectedParts().testFlag(QCPAxis::spAxis) || ui->qcustomplotWidget->xAxis2->selectedParts().testFlag(QCPAxis::spTickLabels))
  {
    ui->qcustomplotWidget->xAxis2->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);
    ui->qcustomplotWidget->xAxis->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);
  }
  // make left and right axes be selected synchronously, and handle axis and tick labels as one selectable object:
  if (ui->qcustomplotWidget->yAxis->selectedParts().testFlag(QCPAxis::spAxis) || ui->qcustomplotWidget->yAxis->selectedParts().testFlag(QCPAxis::spTickLabels) ||
      ui->qcustomplotWidget->yAxis2->selectedParts().testFlag(QCPAxis::spAxis) || ui->qcustomplotWidget->yAxis2->selectedParts().testFlag(QCPAxis::spTickLabels))
  {
    ui->qcustomplotWidget->yAxis2->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);
    ui->qcustomplotWidget->yAxis->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);
  }

  // synchronize selection of graphs with selection of corresponding legend items:
  for (int i=0; i<ui->qcustomplotWidget->graphCount(); ++i)
  {
    QCPGraph *graph = ui->qcustomplotWidget->graph(i);
    QCPPlottableLegendItem *item = ui->qcustomplotWidget->legend->itemWithPlottable(graph);
    if (item->selected() || graph->selected())
    {
      item->setSelected(true);
      graph->setSelected(true);
    }
  }
}


并连接信号:

    connect(ui->qcustomplotWidget, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(mousePress()));//连接鼠标点击信号和槽
    connect(ui->qcustomplotWidget, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(mouseWheel()));//连接鼠标滚轮信号和槽
    connect(ui->qcustomplotWidget, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged()));//连接曲线选择信号和槽

最后效果图:

QCustomPlot的基本使用[通俗易懂]

QCustomPlot的基本使用[通俗易懂]



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189490.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android Studio实现多媒体播放器,音乐视频一体化

    Android Studio实现多媒体播放器,音乐视频一体化这次的网络版音乐视频播放器是在前面讲到的音乐播放器项目(AndroidStudio如何实现音乐播放器)基础上,将音乐文件与项目文件独立开,放在服务器的文件夹里面进行访问,除此之外还添加了视频播放器功能。本次项目综合了Android几乎所有知识,可以让大家熟练掌握Android程序开发的基本技术,涉及Android基础知识、UI界面、数据存储、四大组件、网络编程、高级编程、多媒体播放器、适配器配置等。大家熟练掌握可以对以后的Android开发有非常大的帮助。

  • Pytest(13)命令行参数–tb的使用

    Pytest(13)命令行参数–tb的使用前言pytest使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败。–tb=style参数可以设置报错的时候回溯打印内容,可以设置参

  • 电平转换芯片使用_i2c电平转换芯片

    电平转换芯片使用_i2c电平转换芯片设计GPS模组电路时,需要转换电平,设计采用TXS0104E转换电平

  • 无尽的忙碌换来幸福的日子「建议收藏」

    人总是忙碌的,从小要读书,长大了工作,结婚了,有孩子了,一辈子也可能等到孩子成家了才能稍微休息一下下吧,不过有时候想想,忙碌点好,一辈子也就那么长,等闭了后还能休息好久好久呢,何不忙碌点呢。从过年以后,一直忙碌着,忙撒呢,上班忙新网站改版,下班忙结婚,周末也忙结婚,几乎一天都没有消停过,老婆无数次问我累不累,我说不累,再累也觉得幸福,嘿嘿。感叹了一下,好久也没来了,最近工作上呢刚赶出来一个…

  • emexecexe_alg是什么进程

    emexecexe_alg是什么进程 今天天气不错,早上做完志愿者时也比较顺利,特别是遇到了一些好牛X的老太太/老头,高兴。于是,啃完饭后就直奔B218,准备看看好久之前就说好要看的STL,可是…… 不一会儿就看烦了,玩了局句CS,接着就在那里无所事事的翻机房电脑(顺便说一下,我今天才发现,原理咱机房电脑是双核(pentium3G*2+1GDDR2,怪不得跑CS比我那神舟顺多了).翻着翻着,看见一个OS

  • python 中的 type(), dtype(), astype()的区别

    python 中的 type(), dtype(), astype()的区别函数 说明 type() 返回数据结构类型(list、dict、numpy.ndarray等) dtype() 返回数据元素的数据类型(int、float等) 备注:1)由于list、dict等可以包含不同的数据类型,因此不可调用dtype()函数 2)np.array中要求所有元素属于同一数据类型,因此可调用d…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号