目录

  • 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中图例的相关设置相关推荐

  1. 【Graph】NetworkX官方基础教程:图的生成与相关操作

    NetworkX官方基础教程:图的生成与相关操作 1. Graph生成和graph操作 2. 分析图 3. 画图 参考资料 本文作为对图结构和复杂网络的快速上手,内容包括基于NetworkX进行图的生 ...

  2. 全网惟一面向软件测试人员的Python基础教程-在Python中怎么干倒字符串?

    全网惟一面向软件测试人员的Python基础教程 起点:<python软件测试实战宝典>介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你 ...

  3. 尚硅谷Redis6基础教程-秒杀案例中库存遗留问题

    尚硅谷redis6基础教程中视频24-27的秒杀案例,使用Redis乐观锁解决了超卖问题,但是也产生了库存遗留问题.引入Lua脚本,解决了超卖和库存遗留.Lua脚本为什么解决了库存遗留问题???

  4. 全网惟一面向软件测试人员的Python基础教程-在Python中如何优雅的切西瓜呢?

    全网惟一面向软件测试人员的Python基础教程 起点:<python软件测试实战宝典>介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你 ...

  5. 计算机基础知识和运用2作图,绘图计算机论文,关于制图的基础知识在AutoCAD中的重要性相关参考文献资料-免费论文范文...

    导读:此文是一篇绘图计算机论文范文,为你的毕业论文写作提供有价值的参考. (许昌市技师学院 河南许昌 461000) 摘 要:对于一些初学者学完AutoCAD基础知识后,在绘制符合国标要求的机械工程图 ...

  6. Axure RP 9基础教程(四)-文件及文件设置

    Axure RP 9出炉已经有不短的一段时间了,但是对于大多数人来说,还是在使用原来旧的版本.其原因有二: 一是使用习惯.由于使用Axure RP 9与Axure RP 8或7界面结构.功能位置存在一 ...

  7. python快捷键设置_Pycharm学习教程(5) Python快捷键相关设置

    Python快捷键相关设置,具体内容如下 1.主题 毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件.切换编辑区域等,都可以通过快捷键 ...

  8. QCustomPlot基础教程(八)——QCustomPlot将绘制的图形保存导出

    目录 一.函数介绍 二.代码示例 一.函数介绍 QCustomPlot提供了四种常用的save接口,其格式如下: saveBmp(const QString &fileName, int wi ...

  9. double类型最大值_Java后端精选基础教程:Java 中的基本数据类型「连载 6」

    数据类型定义了变量可以采用的值,例如,定义变量为 int 类型,则只能取整数值. 在 Java 中有两类数据类型: 1)原始数据类型 2)非原始数据类型 - 数组和字符串是非原始数据类型,将在以后的教 ...

最新文章

  1. Qt Linguist 界面语言翻译
  2. 获取当前脚本所在的绝对路径
  3. 真给力!蚂蚁金服工程师总结的400道前端面试题提供下载
  4. python自动化测试脚本可以测php吗_python unittest实现api自动化测试_python
  5. P5068 [Ynoi2015]我回来了
  6. HNU 程序设计课 函数公式题
  7. 有谁还记得“开源”已经20年了!
  8. 灭屏取消过温减流功能
  9. 【机器学习系列】MCMC第三讲:理解MCMC前必先弄懂这两点
  10. matlab数学建模试卷,matlab数学建模习题
  11. 百度之星1004度度熊的午饭时光
  12. 万能地图下载器下载谷歌卫星地图在ArcGIS中套合
  13. cmd“不是内部或外部命令,也不是可运行的程序或批处理文件”
  14. java小型计费系统设计_JAVA课程设计模拟电信计费系统
  15. __stack_chk_fail之栈帧溢出检测技术
  16. poi修改excel单元格值导致单元格变成橙色的问题(WPS)
  17. 感谢国内知名 Android 开发者 「stormzhang」推荐了我的公众号
  18. c语言程序由什么开头和结尾,一个完整的C程序由什么组成?
  19. Foxmail 7.0中导入地址簿
  20. 2016SDAU编程练习二1009

热门文章

  1. 如何实现一个虚拟路由器
  2. Android 如何在插入外接物理键盘时还能显示软键盘
  3. linux基本功系列之uniq命令实战
  4. PLSQL Developer 配置Oracle主目录和OCI库 连接登录Oracle数据库(完全指南)
  5. highside 介绍
  6. OpenMP中的数据处理子句
  7. 糖化学试剂2199491-27-3,L-Glutamamide,激肽释放酶抑制剂肽,信息说明
  8. 【狂神说】JavaWeb笔记整理 | SMBMS项目 | 文件上传和邮件发送
  9. ios 10 新系统功能
  10. 机器字长,指令字长,存储字长