QCustomPlot基础教程(十)——QCustomPlot中图例的相关设置
目录
- 1、前言
- 2、显示图例
- 3、设置图例位置
- 4、设置图例背景
- 5、设置图例名称
- 6、设置边框隐藏
- 7、其他设置
- 8、拓展1——将图例统一放在下方
- 9、拓展2——设置图例与曲线同步选中
1、前言
基础部分就不过多介绍了,不懂得可以直接参考:QCustomPlot基础教程(一)——QCustomPlot的安装及基础实例,代码部分也不做过多介绍,代码使用的是QCustomPlot基础教程(二)——在Qt中绘制多个曲线的相关代码。
2、显示图例
图例默认不显示,显示图例使用setVisible()函数,代码示例:
customPlot->legend->setVisible(true);
3、设置图例位置
设置图例位置利用setInsetAlignment函数,
常见的图例位置有:
位置 | 描述 |
---|---|
Qt::AlignLeft | 居左 |
Qt::AlignHCenter | 水平居中 |
Qt::AlighRight | 居右 |
Qt::AlignTop | 居上 |
Qt::AlignVCenter | 垂直居中 |
Qt::AlignBottom | 居下 |
常见设置为让图例居右上,代码如下:
customPlot->axisRect()->insetLayout()->setInsetAlignment(0,Qt::AlignTop|Qt::AlignRight);
4、设置图例背景
设置图例背景为空白利用如下语句实现:
customPlot->legend->setBrush(QColor(255,255,255,0));//设置图例背景
运行结果如下:
(左图为默认图例背景,右图为图例为透明)
设置图例为灰色透明代码如下:
customPlot->legend->setBrush(QColor(255, 255, 255, 150));
运行结果:
5、设置图例名称
设置第i条直线的名称:
customPlot->graph(i)->setName(names);//设置名称
若有graphCount条直线,可依次设置其名称:
for(int i=0;i<graphCount;++i){customPlot->graph(i)->setName(names[i]);//设置名称
}
6、设置边框隐藏
设置图例的边框利用setBorderPen()函数:
void QCPLegend::setBorderPen(const QPen & pen)
设置边框隐藏代码如下:
customPlot->legend->setBorderPen(Qt::NoPen);
运行结果:
7、其他设置
除了上述设置,图例还有其他设置,诸如设置字体,设置间隔等。
设置图例字体代码为:
customPlot->legend->setFont(QFont("Helvetica", 9));
设置图例间隔代码为:
customPlot->legend->setRowSpacing(-3);
设置图例文字颜色代码为:
customPlot->legend->setTextColor(TextColor);//设置图例文字颜色
设置图例中图形与文字距离图例边框的距离代码为:
customPlot->legend->setMargins(QMargins(0,0,0,0));
8、拓展1——将图例统一放在下方
代码示例:
// 设置图例行优先排列customPlot->legend->setFillOrder(QCPLayoutGrid::foColumnsFirst);// 设置六个图例自动换行customPlot->legend->setWrap(6);// 设置图例可见customPlot->legend->setVisible(true);// 设置图例位置,这里选择显示在QCPAxisRect下方,同理可设置显示在QCustomPlot中任意位置customPlot->plotLayout()->addElement(1 , 0, customPlot->legend);// 设置显示比例customPlot->plotLayout()->setRowStretchFactor(1, 0.001);// 设置边框隐藏customPlot->legend->setBorderPen(Qt::NoPen);
9、拓展2——设置图例与曲线同步选中
首先,需要设置Qcustomplot的属性:
//设置基本坐标轴(左侧Y轴和下方X轴)可拖动、可缩放、曲线可选、legend可选、设置伸缩比例,使所有图例可见
CustomPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables);
//设置legend只能选择图例
CustomPlot->legend->setSelectableParts(QCPLegend::spItems);
然后需要编写槽函数:
void MainWindow::selectionChanged()
{// make top and bottom axes be selected synchronously, and handle axis and tick labels as one selectable object:if (ui->customPlot->xAxis->selectedParts().testFlag(QCPAxis::spAxis) || ui->customPlot->xAxis->selectedParts().testFlag(QCPAxis::spTickLabels) ||ui->customPlot->xAxis2->selectedParts().testFlag(QCPAxis::spAxis) || ui->customPlot->xAxis2->selectedParts().testFlag(QCPAxis::spTickLabels)){ui->customPlot->xAxis2->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);ui->customPlot->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->customPlot->yAxis->selectedParts().testFlag(QCPAxis::spAxis) || ui->customPlot->yAxis->selectedParts().testFlag(QCPAxis::spTickLabels) ||ui->customPlot->yAxis2->selectedParts().testFlag(QCPAxis::spAxis) || ui->customPlot->yAxis2->selectedParts().testFlag(QCPAxis::spTickLabels)){ui->customPlot->yAxis2->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);ui->customPlot->yAxis->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);}// 将图形的选择与相应图例项的选择同步for (int i=0; i<ui->customPlot->graphCount(); ++i){QCPGraph *graph = ui->customPlot->graph(i);QCPPlottableLegendItem *item = ui->customPlot->legend->itemWithPlottable(graph);if (item->selected() || graph->selected()){item->setSelected(true);//注意:这句需要Qcustomplot2.0系列版本graph->setSelection(QCPDataSelection(graph->data()->dataRange()));//这句1.0系列版本即可//graph->setSelected(true);}}
}
最后,在主函数中将信号与槽进行连接:
connect(ui->customPlot, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged()));
selectionChangedByUser()信号在用户更改QCustomPlot中的选择后发出,例如通过单击。
运行结果:
完整代码可以参考:https://download.csdn.net/download/didi_ya/37052519
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~
参考:
【1】https://www.freesion.com/article/7425347532/
【2】https://www.qcustomplot.com/index.php/demos/interactionexample
【3】https://blog.csdn.net/qq_43393428/article/details/105135375
QCustomPlot基础教程(十)——QCustomPlot中图例的相关设置相关推荐
- 【Graph】NetworkX官方基础教程:图的生成与相关操作
NetworkX官方基础教程:图的生成与相关操作 1. Graph生成和graph操作 2. 分析图 3. 画图 参考资料 本文作为对图结构和复杂网络的快速上手,内容包括基于NetworkX进行图的生 ...
- 全网惟一面向软件测试人员的Python基础教程-在Python中怎么干倒字符串?
全网惟一面向软件测试人员的Python基础教程 起点:<python软件测试实战宝典>介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你 ...
- 尚硅谷Redis6基础教程-秒杀案例中库存遗留问题
尚硅谷redis6基础教程中视频24-27的秒杀案例,使用Redis乐观锁解决了超卖问题,但是也产生了库存遗留问题.引入Lua脚本,解决了超卖和库存遗留.Lua脚本为什么解决了库存遗留问题???
- 全网惟一面向软件测试人员的Python基础教程-在Python中如何优雅的切西瓜呢?
全网惟一面向软件测试人员的Python基础教程 起点:<python软件测试实战宝典>介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你 ...
- 计算机基础知识和运用2作图,绘图计算机论文,关于制图的基础知识在AutoCAD中的重要性相关参考文献资料-免费论文范文...
导读:此文是一篇绘图计算机论文范文,为你的毕业论文写作提供有价值的参考. (许昌市技师学院 河南许昌 461000) 摘 要:对于一些初学者学完AutoCAD基础知识后,在绘制符合国标要求的机械工程图 ...
- Axure RP 9基础教程(四)-文件及文件设置
Axure RP 9出炉已经有不短的一段时间了,但是对于大多数人来说,还是在使用原来旧的版本.其原因有二: 一是使用习惯.由于使用Axure RP 9与Axure RP 8或7界面结构.功能位置存在一 ...
- python快捷键设置_Pycharm学习教程(5) Python快捷键相关设置
Python快捷键相关设置,具体内容如下 1.主题 毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件.切换编辑区域等,都可以通过快捷键 ...
- QCustomPlot基础教程(八)——QCustomPlot将绘制的图形保存导出
目录 一.函数介绍 二.代码示例 一.函数介绍 QCustomPlot提供了四种常用的save接口,其格式如下: saveBmp(const QString &fileName, int wi ...
- double类型最大值_Java后端精选基础教程:Java 中的基本数据类型「连载 6」
数据类型定义了变量可以采用的值,例如,定义变量为 int 类型,则只能取整数值. 在 Java 中有两类数据类型: 1)原始数据类型 2)非原始数据类型 - 数组和字符串是非原始数据类型,将在以后的教 ...
最新文章
- Qt Linguist 界面语言翻译
- 获取当前脚本所在的绝对路径
- 真给力!蚂蚁金服工程师总结的400道前端面试题提供下载
- python自动化测试脚本可以测php吗_python unittest实现api自动化测试_python
- P5068 [Ynoi2015]我回来了
- HNU 程序设计课 函数公式题
- 有谁还记得“开源”已经20年了!
- 灭屏取消过温减流功能
- 【机器学习系列】MCMC第三讲:理解MCMC前必先弄懂这两点
- matlab数学建模试卷,matlab数学建模习题
- 百度之星1004度度熊的午饭时光
- 万能地图下载器下载谷歌卫星地图在ArcGIS中套合
- cmd“不是内部或外部命令,也不是可运行的程序或批处理文件”
- java小型计费系统设计_JAVA课程设计模拟电信计费系统
- __stack_chk_fail之栈帧溢出检测技术
- poi修改excel单元格值导致单元格变成橙色的问题(WPS)
- 感谢国内知名 Android 开发者 「stormzhang」推荐了我的公众号
- c语言程序由什么开头和结尾,一个完整的C程序由什么组成?
- Foxmail 7.0中导入地址簿
- 2016SDAU编程练习二1009