QCustomPlot的基本使用[通俗易懂]
使用 通俗易懂 基本 QCustomPlot
2023-06-13 09:14:50 时间
大家好,又见面了,我是你们的朋友全栈君。
QCustomPlot是QT下一个方便易用的绘图工具,只有两个文件qcustomplot.h和qcustomplot.cpp组成。源文件和使用文档可从官方网站下载。
官方网站:http://www.qcustomplot.com/
下面介绍下基本使用:
1、将qcustomplot.cpp和qcustomplot.h拷贝到工程目录下,并在工程中添加文件。
并在工程的pro文件添加printsupport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
2、在QT里面添加一个Widget命名为qcustomplotWidget,对这个Widget右击,点击Promote to…
提升类名为QCustomPlot,并点击Add:
最后选中点击Promote:
然后就可以在工程中通过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()));//连接曲线选择信号和槽
最后效果图:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/189490.html原文链接:https://javaforall.cn
相关文章
- RedisClient的安装及基本使用[通俗易懂]
- pycharm安装后如何使用_Pycharm安装教程
- RxJava flatMap使用[通俗易懂]
- Android使用系统签名以及安装[通俗易懂]
- VS中时间控件的使用[通俗易懂]
- Matlab求解非线性规划(fmincon函数的使用)[通俗易懂]
- springboot jpa 中使用逻辑删除[通俗易懂]
- 使用adb命令安装安卓apk包[通俗易懂]
- ManualResetEvent的理解和使用[通俗易懂]
- vue2使用animate css[通俗易懂]
- asp.net中回发或回调参数无效。在配置中使用 <pages enableEventValidation=”… 问题解决[通俗易懂]
- Android项目ViewPager+Fragment的基本使用[通俗易懂]
- JAVA(集合类)——使用For循环遍历ArrayList[通俗易懂]
- Liquibase的简单使用[通俗易懂]
- vscode 使用flake8和yapf[通俗易懂]
- 简单使用压测工具JMeter
- JWT — JWT原理解析及实际使用[通俗易懂]
- 【SG90模拟舵机控制及PCA9685模块的使用】[通俗易懂]
- Unittest测试框架基本使用[通俗易懂]
- Eclipse中使用SVN Eclipse配置SVN[通俗易懂]
- kubernetes中的探针使用
- 【短视频运营】短视频剪辑 ⑤ ( 视频素材使用 | 设置插入后的视频素材属性 | 设置画面 | 设置音频 | 设置变速 | 设置动画 | 设置调节 )
- 压缩你的Linux:使用Zip源码(zip源码linux)
- 行提速使用Redis加速命令行运行速度(redis帮助命令)
- 使用MongoDB查看表数据的快捷方式(mongodb查看表数据)
- 我的Linux:自己的操作系统(个人使用的linux)
- 的使用 Redis最简单的数据管理方式(redis 通俗易懂)