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)
blank

相关推荐

  • Laravel项目的性能优化

    Laravel项目的性能优化众所周知Laravel框架的功能很强大,它里面的东西也很多,即便如此它仍然是一个优秀的框架,但在生产环境下要做好优化提升网站的打开速度。所以,接下来的这篇文章给大家分享了几个Laravel网站性能优化的技巧。优化一:关闭debug打开.env文件,把debug设置为false。APP_ENV=localAPP_DEBUG=falseAPP_KEY=base64:sT/aTFeaE13…

  • 【AC大牛陈鸿的ACM总结贴】【ID AekdyCoin】人家当初也一样是菜鸟

    【AC大牛陈鸿的ACM总结贴】【ID AekdyCoin】人家当初也一样是菜鸟 acm总结帖_ByAekdyCoin     各路大牛都在中国大陆的5个赛区结束以后纷纷发出了退役帖,总结帖,或功德圆满,或死不瞑目,而这也许又会造就明年的各种“炸尸”风波。为了考虑在发退役贴以后明年我也成为“僵尸”的可能性,于是改名曰“总结贴”,不提比赛细节,不提比赛流水账,权当是大学本科生涯中acm生活的点滴记录……   (1)入门篇甲…

  • vc插件是什么_PE和VC

    vc插件是什么_PE和VC从进大一到现在这么久的时间,用VC软件应该是最熟练的,可是我竟然不知道一些关于它的小插件,每一次看到宿舍小五编程序,偶尔让我看她的有些代码,每次看她的代码,花花绿绿的,而我的,黑压压的一片,顿时心情就不好了。然后问:你用的什么软件答:一个西红柿小插件问:这是干什么用的?答:功能多了去了问:什么功能:答:百度去。。。之后我从百度上查到的结果是:西红柿软件也

  • Arduino单片机控制步进电机

    Arduino单片机控制步进电机步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长)。通过控制脉冲个数来控制角位移量,达到准确定位的目的;通过控制脉冲频率来控制电机转动的速度和加速度,达到调速的目的。下面是连接图,右上角是Arduino与驱动器的连线,VCC、脉冲、方向、使能是单片机提供的4个引脚,字面意思是对于驱动器而言,与Ar…

  • 从入门到精通,Java学习路线导航(附学习资源)

    引言最近也有很多人来向我”请教”,他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。Java学习路线当然,这里我只是说Java学习路线,因为自己就是学Java的,对Java理当很熟悉,对于其它方面,我也不是很了解。基础阶段首先是基础阶段,在基础阶段,我们必须掌握Java基础,Mysql数据库,Ora…

  • tomcat部署war包,jar包

    tomcat部署war包,jar包在tomcat根目录下部署war包,通过http://ip:port的方式访问网上说的方法很多,这里记录一下自己的经过实践检验的一种方法。1、先去tomcat/conf/server.xml里有一个HOST标签,有个参数appBase,表示你的应用应该部署在什么位置。例如下面写的是webapps,那就在webapps/ROOT/路径下解压你的war包。如果appBase=XXX,那么就…

发表回复

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

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