惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
T
Tor Project blog
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
MongoDB | Blog
MongoDB | Blog
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
小众软件
小众软件
G
GRAHAM CLULEY
P
Privacy International News Feed
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
人人都是产品经理
人人都是产品经理
S
Schneier on Security
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
Recent Announcements
Recent Announcements
E
Exploit-DB.com RSS Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
U
Unit 42
The Register - Security
The Register - Security
S
Securelist
Martin Fowler
Martin Fowler
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog

博客园 - 西北逍遥

实验启动指令 yolov8-pose监测人体关节并保存关节坐标 osg3.6绘制半球体 kinova jaco2 机械臂控制器故障灯闪烁(双绿灯)问题解决方法 IFC标准在学术界的研究与发展历程:从理论探索到产业实践的全面梳理IFC标准在学术界的研究与发展历程:从理论探索到产业实践的全面梳理 BIM的“普通话”:解密IFC标准如何重塑建筑行业 IfcCrewResource Qt重置 Brush pyqt 操作mysql数据库 泵仿真 Qt折线的显示与隐藏 c++ Qt绘制传热云图 livox mid-70采集点云数据 随机配色 学习:LED灯闪烁 win10安装neo4j-community-3.5.7-windows win10安装MongoDB 3.0.15 Community python把图片合并成gif图 ubuntu20.04测试cuda start.bat Djstra求解最短路径
Qt绘制折线
西北逍遥 · 2025-12-17 · via 博客园 - 西北逍遥
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QFont>
#include <QToolTip>
#include <cmath>

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    // 创建图表框架
    QChartView *chartView = new QChartView;
    QChart *chart = new QChart();
    chart->setTitle(u8"多组数据折线图示例");
    QFont titleFont("Arial", 14, QFont::Bold);
    chart->setTitleFont(titleFont);
    chartView->setChart(chart);

    // 创建第一组折线序列
    QLineSeries *series0 = new QLineSeries();
    series0->setName(u8"Sin曲线");
    chart->addSeries(series0);
    // 为第一组序列添加数据点
    for (double i = 0; i < 10; i=i+0.1) {
        qreal t = i;
        qreal y1 = std::sin(t * 0.5) * 10;
        series0->append(t, y1);
    }

    // 创建第二组折线序列
    QLineSeries *series1 = new QLineSeries();
    series1->setName(u8"Cos曲线");
    chart->addSeries(series1);
    // 为第二组序列添加数据点
    for (double i = 0; i < 10; i = i + 0.1) {
        qreal t = i;
        qreal y2 = std::cos(t * 0.5) * 10;
        series1->append(t, y2);
    }


    // 创建第三组折线序列
    QLineSeries *series3 = new QLineSeries();
    series3->setName(u8"Cos曲线");
    chart->addSeries(series3);
    // 为第二组序列添加数据点
    for (double i = 0; i < 10; i = i + 0.1) {
        qreal t = i;
        qreal y2 = std::cos(t * 0.5) * 5;
        series3->append(t, y2);
    }

    // 创建坐标轴
    QValueAxis *axisX = new QValueAxis;
    axisX->setRange(0, 10);
    axisX->setTitleText("time (secs)");
    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(-15, 15);
    axisY->setTitleText("value");

    // 为序列设置坐标轴
    chart->setAxisX(axisX, series0);
    chart->setAxisY(axisY, series0);
    chart->setAxisX(axisX, series1);
    chart->setAxisY(axisY, series1);
    chart->setAxisX(axisX, series3);
    chart->setAxisY(axisY, series3);

    //
    QObject::connect(series0, &QLineSeries::hovered, [](const QPointF &point, bool state) {
        if (state) {
            QToolTip::showText(QCursor::pos(), QString("X: %1\nY: %2").arg(point.x()).arg(point.y()));
        }
        else {
            QToolTip::hideText();
        }
    });
    //
    QObject::connect(series1, &QLineSeries::hovered, [](const QPointF &point, bool state) {
        if (state) {
            QToolTip::showText(QCursor::pos(), QString("X: %1\nY: %2").arg(point.x()).arg(point.y()));
        }
        else {
            QToolTip::hideText();
        }
        });
    //
    QObject::connect(series3, &QLineSeries::hovered, [](const QPointF &point, bool state) {
        if (state) {
            QToolTip::showText(QCursor::pos(), QString("X: %1\nY: %2").arg(point.x()).arg(point.y()));
        }
        else {
            QToolTip::hideText();
        }
        });
    //
    // 设置图表主题和图例
    chart->setTheme(QChart::ChartThemeBlueCerulean);
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);

    // 显示图表
    chartView->setRenderHint(QPainter::Antialiasing);
    chartView->resize(800, 600);
    chartView->show();

    return a.exec();
}

c2d616ffd30a6b51ca1b80fe8a7569fa

###############################