【QCustomPlot库绘制曲线应用】

简介: 【QCustomPlot库绘制曲线应用】

1,效果展示

2效果介绍。

1.蓝色坐标轴,带刻度。

2.带坐标轴箭头。

3.背景色选择了黑色(样式表设置),qcustomplot是将widget控件升级为的qcustomplot。将该控件设置样式表即可。

4.鼠标可拖动曲线位置。

5.鼠标滚轮可以放大缩小曲线。

6.可以根据曲线的范围自适应显示范围。### 三级标题

3.人狠话不多,直接上代码。
/// 初始化坐标图CustomPlot 的显示属性 /
//注意:我的qcustomplot控件名称就叫ui.widget
// 创建蓝色画刷,用于设置坐标轴和刻度的颜色
QBrush brush(QColor(6, 111, 217));
// 设置 x 轴基本画笔
ui.widget->xAxis->setBasePen(QPen(brush, 2));
// 设置 y 轴基本画笔
ui.widget->yAxis->setBasePen(QPen(brush, 2));
// 设置 x 轴刻度画笔
ui.widget->xAxis->setTickPen(QPen(brush, 2));
// 设置 y 轴刻度画笔
ui.widget->yAxis->setTickPen(QPen(brush, 2));
// 设置坐标图的背景为黑色
ui.widget->setBackground(QBrush(QColor(0, 0, 0)));
// 显示 y 轴刻度标签
ui.widget->yAxis->setTickLabels(true);
// 设置 x 轴上端箭头样式为 SpikeArrow
ui.widget->xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);
// 设置 y 轴上端箭头样式为 SpikeArrow
ui.widget->yAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);
// 设置 x 轴子刻度画笔
ui.widget->xAxis->setSubTickPen(QPen(brush, 2));
// 设置 y 轴子刻度画笔
ui.widget->yAxis->setSubTickPen(QPen(brush, 2));
// 设置 x 轴标签字体样式
QFont f;
f.setPixelSize(18);
f.setFamily("SimHei");
ui.widget->xAxis->setLabelFont(f);
// 设置 x 轴标签颜色为白色
ui.widget->xAxis->setLabelColor(QColor(Qt::white));
// 设置 y 轴标签字体样式
ui.widget->yAxis->setLabelFont(f);
// 设置 y 轴标签颜色为白色
ui.widget->yAxis->setLabelColor(QColor(Qt::white));
// 设置 x 轴刻度标签字体样式
QFont f_Tick;
f_Tick.setPixelSize(14);
f_Tick.setFamily("SimHei");
// 设置 x 轴刻度标签颜色为白色
ui.widget->xAxis->setTickLabelColor(Qt::white);
// 设置 y 轴刻度标签颜色为白色
ui.widget->yAxis->setTickLabelColor(Qt::white);
// 设置 x 轴刻度标签字体样式
ui.widget->xAxis->setTickLabelFont(f_Tick);
// 设置 y 轴刻度标签字体样式
ui.widget->yAxis->setTickLabelFont(f_Tick);
// 添加图形层
ui.widget->addGraph();
// 设置 x 轴标签文本
ui.widget->xAxis->setLabel("频率(GHz)");
// 设置 y 轴标签文本
ui.widget->yAxis->setLabel("灰度值");
// 设置坐标图的交互方式,包括范围缩放、范围拖动、选择可绘制项以及多选功能
ui.widget->setInteractions(QCP::iRangeZoom | QCP::Interaction::iRangeDrag | QCP::iSelectPlottables | QCP::iMultiSelect);
void on_LoadData(){
// 构建文件路径,指定为应用程序运行路径下的 "demo.txt"
QString fileName = QApplication::applicationDirPath() + QDir::separator() + "demo.txt";
// 创建 QFile 对象,并打开 demo.txt 文件以供只读访问
QFile file(fileName);
bool isOk = file.open(QIODevice::ReadOnly);
// 清空坐标图上的所有图形
ui.widget->clearGraphs();
// 创建 QTextStream 以便从文件中读取文本数据
QTextStream in(&file);
// 添加一个新的图形层
ui.widget->addGraph();
// 设置图形线条的颜色和宽度
ui.widget->graph(0)->setPen(QPen(QColor(255, 115, 45, 255), 2));
// 从文件中读取第一行,解析出图形类型
int type = in.readLine().split(":", QString::SkipEmptyParts)[1].toInt();
// 读取第二行,获取参数字符串
QString paraStr = in.readLine();
// 创建存储 x 和 y 值的 QVector
QVector<float> xValue, yValue;
// 读取文件中的数据行,解析出 x 和 y 值,并将数据添加到图形层中
while (!in.atEnd())
{
    QString line = in.readLine();
    float x = line.split(",", QString::SkipEmptyParts)[0].toFloat();
    float y = line.split(",", QString::SkipEmptyParts)[1].toFloat();
    // 根据图形类型判断是否需要筛选数据
    if (type != 6)
    {
        ui.widget->graph()->addData(x, y);
        xValue.append(x);
        yValue.append(y);
    }
    else
    {
        // 对于图形类型 6,每100个数据点保留一个
        if ((int)x % 100 == 0)
        {
            ui.widget->graph()->addData(x, y);
            xValue.append(x);
            yValue.append(y);
        }
    }
}
// 计算 y 值的最大和最小值
auto max = std::max_element(std::begin(yValue), std::end(yValue));
auto min = std::min_element(std::begin(yValue), std::end(yValue));
// 设置 y 轴的显示范围,留出一定的空间
ui.widget->yAxis->setRange((*min) * 1.1 - (*max) * 0.1, (*max) * 1.1 - (*min) * 0.1);
// 设置 x 轴的显示范围,从 xValue 的第一个元素到最后一个元素
ui.widget->xAxis->setRange(xValue.first(), xValue.last());
// 重新绘制坐标图
ui.widget->replot();
}
4.qcustomplt库,我也传一份吧

虽然网上很多,但是防止大家找到付费下载比较麻烦,兄弟们,源码7000行没法直接copy,有需要的私我。

目录
相关文章
|
算法 数据可视化 前端开发
第三代软件开发-QCustomPlot核心迁移
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
索引
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
1117 3
|
Windows
QT源码拾贝6-11(qwindowswindow)
这篇文章深入探讨了Qt源码中与窗口激活相关的函数,QDebug运算符重载,vscode的变量提示,Windows常用类型名,获取所有窗体的方法,以及QSharedPointer智能指针的使用。
279 0
QT源码拾贝6-11(qwindowswindow)
qt-绘制曲线(qcustomplot)
qt-绘制曲线(qcustomplot)
735 0
|
数据可视化
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
3018 3
|
XML 设计模式 JSON
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-1
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
算法 开发者
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
1494 1
|
存储
QT基础入门——QMainWindow与对话框QDialog(三)
QT基础入门——QMainWindow与对话框QDialog(三)
1222 0
QT基础入门——QMainWindow与对话框QDialog(三)
|
数据可视化 C++
QCustomplot基本使用(一)
QCustomplot基本使用(一)
635 0