当前位置: 首页 > news >正文

QCustomPlot 核心功能与图表设置(上)——基础样式定制

QCustomPlot 核心功能与图表设置(上)——基础样式定制

在掌握了 QCustomPlot 的环境搭建与基本绘图之后,下一步就是让图表“看起来更专业”。无论是用于科研论文、工程监控还是商业展示,图表的视觉表现力都至关重要。QCustomPlot 提供了丰富的 API 来定制图表的每一个细节。

本文将聚焦于基础样式定制,涵盖坐标轴、标题、图例、网格、背景以及数据点样式的设置,助你打造美观、清晰、专业的可视化图表。


1. 坐标轴设置(一):轴标签、刻度范围与刻度间隔的自定义

QCustomPlot 默认会自动计算坐标轴范围和刻度,但在实际应用中,我们往往需要手动控制。

设置坐标轴范围

plot->xAxis->setRange(-5, 5);   // X 轴范围 [-5, 5]
plot->yAxis->setRange(0, 100);  // Y 轴范围 [0, 100]

设置刻度间隔(Tick Step)

plot->xAxis->setTickStep(1.0);   // X 轴每 1 个单位一个主刻度
plot->yAxis->setTickStep(10.0);  // Y 轴每 10 个单位一个主刻度

⚠️ 注意:setTickStep() 在较新版本中可能被弃用,推荐使用 setAutoTickStep(false) + setTickStep() 或直接使用 setTicker()

使用 QCPAxisTicker 自定义刻度(推荐方式)

QSharedPointer<QCPAxisTicker> ticker(new QCPAxisTicker);
ticker->setTickCount(6); // 设置主刻度数量(约)
plot->xAxis->setTicker(ticker);

对于更精细控制(如固定间隔),可使用 QCPAxisTickerFixed

QSharedPointer<QCPAxisTickerFixed> fixedTicker(new QCPAxisTickerFixed);
fixedTicker->setTickStep(2.0); // 每 2 个单位一个刻度
plot->xAxis->setTicker(fixedTicker);

设置轴标签(数值标签)格式

plot->yAxis->setLabel("温度 (°C)");
plot->xAxis->setNumberFormat("f");   // 固定小数
plot->xAxis->setNumberPrecision(1);  // 保留 1 位小数

2. 坐标轴设置(二):轴标题样式、字体、颜色与位置调整

除了数值刻度,坐标轴的标题(Label)也需要美化。

设置轴标题文本

plot->xAxis->setLabel("时间 (s)");
plot->yAxis->setLabel("电压 (V)");

自定义标题字体与颜色

QFont axisFont("Microsoft YaHei", 10, QFont::Bold);
QColor axisColor(Qt::darkGray);plot->xAxis->setLabelFont(axisFont);
plot->xAxis->setLabelColor(axisColor);plot->yAxis->setLabelFont(axisFont);
plot->yAxis->setLabelColor(Qt::blue);

调整标题位置(偏移)

plot->xAxis->setLabelPadding(10); // 标题与刻度之间的间距(像素)
plot->yAxis->setLabelPadding(15);

默认情况下,X 轴标题在底部,Y 轴在左侧。如需更改轴位置(如 Y 轴放右侧),可使用:

plot->yAxis->setAxisRect()->setRangeDrag(Qt::Horizontal);
plot->axisRect()->addAxis(QCPAxis::atRight); // 添加右侧 Y 轴

3. 图表标题与图例:添加、样式修改及图例位置优化

添加图表主标题

QCustomPlot 本身不直接提供“主标题”控件,但可通过 QCPTextElement 实现:

QCPTextElement *title = new QCPTextElement(plot, "传感器数据趋势图", QFont("Arial", 14, QFont::Bold));
plot->plotLayout()->insertRow(0); // 在顶部插入一行
plot->plotLayout()->addElement(0, 0, title);

启用并配置图例(Legend)

plot->legend->setVisible(true);
plot->legend->setFont(QFont("SimSun", 9));
plot->legend->setTextColor(Qt::black);

设置图例位置

图例位置由布局管理器控制,常用方式:

// 放在右上角(内嵌)
plot->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignTop | Qt::AlignRight);// 或使用 plotLayout 调整(适用于多图)
plot->plotLayout()->addElement(1, 1, plot->legend);

更简洁的方式(推荐):

plot->legend->setBrush(QColor(255, 255, 255, 200)); // 半透明白色背景
plot->legend->setBorderPen(QPen(Qt::black));
plot->legend->setPadding(5);
plot->legend->setSelectableParts(QCPLegend::spItems); // 允许点击图例项

为图例项命名

绘图时指定名称,图例自动显示:

plot->addGraph();
plot->graph(0)->setName("通道 A");
plot->graph(0)->setData(x, y);

4. 网格与背景:网格线显示/隐藏、背景色与渐变背景设置

显示/隐藏网格线

plot->xAxis->grid()->setVisible(true);
plot->yAxis->grid()->setVisible(true);// 设置网格线样式
plot->xAxis->grid()->setPen(QPen(QColor(190, 190, 190), 1, Qt::DotLine));
plot->yAxis->grid()->setSubGridVisible(false); // 隐藏次级网格

设置图表背景色

plot->setBackground(Qt::white); // 纯色背景

设置渐变背景(高级)

QLinearGradient gradient(0, 0, 0, plot->height());
gradient.setColorAt(0, QColor(240, 240, 255));
gradient.setColorAt(1, QColor(255, 255, 255));
plot->setBackground(QBrush(gradient));

注意:渐变背景需在窗口大小变化时重新计算,建议在 resizeEvent 中更新。


5. 数据点样式:折线图/散点图的标记形状、大小与颜色定制

QCustomPlot 中,每条曲线(QCPGraph)可独立设置线型、点型、颜色等。

设置折线样式

plot->graph(0)->setPen(QPen(Qt::red, 2)); // 红色,线宽 2
plot->graph(0)->setLineStyle(QCPGraph::lsLine); // 折线(默认)

启用数据点标记(Scatter)

plot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, Qt::blue, 6) // 圆形,蓝色,直径 6px
);

常用标记形状

枚举值说明
ssNone无标记
ssDot小圆点
ssCircle空心圆
ssDisc实心圆
ssSquare正方形
ssDiamond菱形
ssCross十字
ssPlus加号

混合样式:线 + 点

plot->graph(0)->setLineStyle(QCPGraph::lsLine);
plot->graph(0)->setScatterStyle(QCPScatterStyle::ssCircle);

高级:自定义标记(如三角形)

QPolygonF triangle;
triangle << QPointF(-3, -2) << QPointF(3, -2) << QPointF(0, 3);
plot->graph(0)->setScatterStyle(QCPScatterStyle(triangle, Qt::green, 8));

小结

通过以上五个方面的设置,可以对 QCustomPlot 图表进行全方位的基础美化:

  • 精确控制坐标轴范围与刻度;
  • 定制轴标题的字体、颜色与间距;
  • 添加专业标题与可交互图例;
  • 配置网格与背景提升可读性;
  • 个性化数据点样式增强视觉表现。

这些功能组合使用,足以应对大多数工程与科研场景的图表需求。

提示:所有样式修改后,记得调用 plot->replot() 刷新界面(在交互式更新时尤其重要)。

在下篇《QCustomPlot 核心功能与图表设置(下)》中,我们将深入探讨多图层、双 Y 轴、实时数据流、交互操作与导出图像等高级主题,敬请期待!


附:完整示例项目建议结构

MyPlotProject/
├── main.cpp
├── qcustomplot.h
├── qcustomplot.cpp
└── styles_demo.pro
http://www.dtcms.com/a/427935.html

相关文章:

  • 面经分享--金山软件开发一面
  • java Garbage
  • sward入门到实战(10) - 如何做好文档评审?
  • 网站开发类的合同范本遂宁移动端网站建设
  • 网站备案承诺书怎么写河南 网站建设
  • Anaconda常用操作
  • 政务公开和网站建设自查报告朋友要我帮忙做网站
  • 数据治理4-企业数仓开发标准与规范
  • 深圳网站建设黄浦网络 骗钱服务外包网站
  • 租用微信做拍卖网站律师网站建设建议
  • 后台与网站软文推广渠道主要有
  • 上海网站建设_永灿品牌建站三只松鼠网站推广策略
  • wordpress主题外贸网站专业做网站排名多少钱
  • JoyAgent-JDGenie深度评测:从开箱到实战,多智能体框架的工业级答卷
  • 常州企业自助建站2手房产App网站开发
  • 在线做交互网站番禺免费核酸检测
  • 社保网站做员工用工备案泉州专业网站制作公司
  • 度小满运维开发一面
  • 公考面试资料合集
  • 7-29 2800:垂直直方图 PTA C++
  • VM速度模式如何提高响应性
  • 网站绑定两个域名怎么做跳转营销策略有哪些
  • 更改备案网站名称node.js 打开wordpress
  • Web 开发 23
  • 做美工需要哪些网站统计网站的代码
  • P14079 [GESP202509 八级] 最短距离 题解
  • SQL Server 2019系统的认识及其安装
  • 运城市做网站公司eclipse可以做门户网站嘛
  • 第一ppt网站wordpress滑动图片
  • 东莞网站建设团队全网天下vps做网站空间