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的基本使用[通俗易懂]



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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1.5 密码学应用PKI体系

    1.5 密码学应用PKI体系1.5密码学应用PKI体系

    2022年8月22日
    9
  • ClassCastException。

    ClassCastException。这个错误也很常见,通常在程序中出现强制类型转换时出现这个错误,如下面这段代码所示:publicstaticMapm=newHashMap(){ { put("a","2"); } }; publicstaticvoidmain(String[]args){ IntegerisInt=(Integer)m.get("a"…

    2025年10月11日
    2
  • 贪心算法之背包问题

    贪心算法之背包问题

    2021年9月10日
    69
  • 互联网公司程序员和外包公司程序员有什么区别?

    互联网公司程序员和外包公司程序员有什么区别?互联网的到来就注定会有外包公司的诞生,起初外包公司给一些不愿意花高代价招程序员的创业型小企业做独立外包,后来渐渐的大型的互联网公司开始出现,他们愿意把一些自己不熟悉或者繁琐的的领域和功能模块外包给专业能力更强的外包团队。从本质上讲,互联网公司和外包公司都是以盈利为己任。但…

    2022年9月1日
    4
  • lefse分析

    lefse分析LEfSe(LDAEffectSize)分析,可以用于两个或多个分组之间的比较,从而找到组间有显著性差异的物种(即biomarker),分析步骤主要分为三步:Step1:利用Kruskal-Wallis秩和检验检测所有的特征物种,通过检测不同组间的物种丰度差异,获得显著性差异物种。Step2:再利用Wilcoxon秩和检验检测上步获得的显著性差异物种的所有亚种是否都趋同…

    2022年6月13日
    179
  • K8S-1.15.1版本部署

    K8S-1.15.1版本部署

    2021年5月31日
    160

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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