5、QtCharts 曲线美化

news2025/7/20 17:38:59

文章目录

  • 效果
  • ui 设置
  • dialog.h
  • dialog.cpp

效果

在这里插入图片描述

ui 设置

在这里插入图片描述

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QtCharts>
#include <QLineSeries>
#include <QGraphicsScene>
#include <QTimer>
#include <QSplineSeries>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    Ui::Dialog *ui;

private:
    /**
     * @brief 获取数据,内部模拟生产变化数据
     * @param[in]x X坐标
     * @return x对应的数据
     */
    qreal getData_1(qreal x);
    qreal getData_2(qreal x);
    /**
     * @brief 设置样式
     *
     */
    void changeStyle();

    /**
     * @brief 设置窗体调色板
     *
     */
    void setDialogPalette();

public:
    QChart* m_chart;//构建图表对象
    QSplineSeries* m_splineSerise1;
    QSplineSeries* m_splineSerise2;
    QGraphicsScene* m_pScene;
    QTimer* m_timer;//定时器
    QValueAxis* m_axisX;//X坐标轴
    QValueAxis* m_axisY;//Y坐标轴
    qint64 m_tmLast;//上次定时器进入的时间
public slots:


};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QString>

const quint32 c_MaxSize=1000;//数据个数

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
    ,m_tmLast(0)
    ,m_splineSerise1(NULL)
    ,m_splineSerise2(NULL)
{
    ui->setupUi(this);


    //setWindowFlags(Qt::FramelessWindowHint);

    //构建曲线系列
    m_splineSerise1=new QSplineSeries(this);
    m_splineSerise2=new QSplineSeries(this);

    //为折线添加数据,曲线一
    qint32 i=0;
    qreal x=0.f;
    for (i=0;i<c_MaxSize;i++)
    {
        x=i*1.f/c_MaxSize;
        m_splineSerise1->append(i,getData_1(x));
    }

     //为折线添加数据,曲线二
    for ( i=0;i<c_MaxSize;i++)
    {
        x=i*1.f/c_MaxSize;
        m_splineSerise2->append(i,getData_2(x));
    }

    //构建图标对象
    m_chart=new QChart();

    //注意:先添加到图表再创建坐标轴,否则无效




    //构建坐标轴
    m_axisX = new QValueAxis();
    m_axisX->setRange(0,c_MaxSize);
    m_axisX->setTitleText(QString::fromLocal8Bit("Time"));//设置标题
    m_axisX->setLabelFormat("%g");//设置格式
    m_axisX->setTickCount(5);//设置刻度数

    m_axisY= new QValueAxis();
    m_axisY->setRange(-10,10);
    m_axisY->setTitleText(QString::fromLocal8Bit("T"));

    //将坐标轴绑定
    m_chart->setAxisX(m_axisX,m_splineSerise1);
    m_chart->setAxisY(m_axisY,m_splineSerise1);

    m_chart->setAxisX(m_axisX,m_splineSerise2);
    m_chart->setAxisY(m_axisY,m_splineSerise2);

     //隐藏图例
     m_chart->legend()->hide();



    //设置图标主题
    m_chart->setTheme(QtCharts::QChart::ChartThemeBlueCerulean);
    //设置标题
    m_chart->setTitle(QString("图表1"));
    //设置尺寸
    m_chart->setGeometry(0,0,500,300);


    //构建场景
    m_pScene =new QGraphicsScene(this);

    //为视图构建场景
    ui->graphicsView->setScene(m_pScene);

    //将图表添加到场景
    m_pScene->addItem(m_chart);

    //设置抗锯齿
    ui->graphicsView->setRenderHint(QPainter::Antialiasing,true);

    //设置样式
    changeStyle();

    //1.将折线系列添加到图表
    m_chart->addSeries(m_splineSerise1);
    m_chart->addSeries(m_splineSerise2);
}

Dialog::~Dialog()
{
    delete ui;
}

qreal Dialog::getData_1(qreal x)
{
    return qSin(x*2*M_PI)*7;//正弦
}

qreal Dialog::getData_2(qreal x)
{
    return qCos(x*2*M_PI)*7;//余弦
}

void Dialog::changeStyle()
{

    /**
     * 修改窗体
     *
     */
    //根据图表的主题设置调色板
    setDialogPalette();



    /**
     * 修改图表
     *
     */
    m_chart->setBackgroundVisible(true);
    //m_chart->setBackgroundBrush(Qt::transparent);//设置为透明
    m_chart->setBackgroundBrush(Qt::lightGray);

     QPen penBackground;
     penBackground.setStyle(Qt::DotLine);
     penBackground.setColor(Qt::green);
     m_chart->setBackgroundPen(penBackground);
    /**
     * 修改绘图区
     *
     */
    m_chart->setPlotAreaBackgroundVisible(true);
    m_chart->setPlotAreaBackgroundBrush(Qt::gray);



    /**
     * 修改标题
     *
     */

    QFont fontTitle;
    fontTitle.setFamily(QString::fromLocal8Bit("华文琥珀"));
    fontTitle.setPointSizeF(20.f);
    m_chart->setTitleFont(fontTitle);
    //设置字色
    m_chart->setTitleBrush(Qt::black);


    /**
     * 修改刻度
     *
     */

    //设置刻度
    QFont fontAxis;
    fontAxis.setFamily(QString::fromLocal8Bit("微软雅黑"));
    fontAxis.setPointSizeF(12.f);
    m_axisX->setTitleFont(fontAxis);
    m_axisY->setTitleFont(fontAxis);
    //设置字色
    m_axisX->setTitleBrush(Qt::darkMagenta);
    m_axisY->setTitleBrush(Qt::darkMagenta);

    //设否显示刻度线
    m_axisX->setGridLineVisible(true);
    m_axisY->setGridLineVisible(true);
    //设置字体坐标轴

    QFont fontLabel;
    fontLabel.setFamily(QStringLiteral("微软雅黑"));
    fontLabel.setPixelSize(12);
    m_axisX->setLabelsFont(fontLabel);
    m_axisY->setLabelsFont(fontLabel);

    /**
     * 修改图例
     *
     */
    //对齐方式
    m_chart->legend()->setAlignment(Qt::AlignLeft);

    /**
     * 系列
     *
     */

    QPen pn1(Qt::green,2.f);
    m_splineSerise1->setPen(pn1);

    QPen pn2(Qt::cyan,2.f);
    m_splineSerise2->setPen(pn2);

    /**
     * 开启动画
     *
     */

    QChart::AnimationOptions aniOptions=QChart::AllAnimations;
    m_chart->setAnimationOptions(aniOptions);

}

void Dialog::setDialogPalette()
{
    QChart::ChartTheme theme=QChart::ChartThemeBlueIcy;
    m_chart->setTheme(theme);
    //根据选定的主题确定Dialog的调色板
    QPalette pal=window()->palette();
    switch (theme)
    {
       case QtCharts::QChart::ChartThemeLight:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    case QtCharts::QChart::ChartThemeBlueCerulean:
        pal.setColor(QPalette::Window,QRgb(0x121218));
        pal.setColor(QPalette::WindowText,QRgb(0x6d6d6));
        break;
    case QtCharts::QChart::ChartThemeDark:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    case QtCharts::QChart::ChartThemeBrownSand:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    case QtCharts::QChart::ChartThemeBlueNcs:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    case QtCharts::QChart::ChartThemeHighContrast:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    case QtCharts::QChart::ChartThemeBlueIcy:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    case QtCharts::QChart::ChartThemeQt:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    default:
        pal.setColor(QPalette::Window,QRgb(0xf0f0f0));
        pal.setColor(QPalette::WindowText,QRgb(0x404040));
        break;
    }
    window()->setPalette(pal);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1157322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

陕西某小型水库雨水情测报及大坝安全监测项目案例

项目背景 根据《陕西省小型病险水库除险加固项目管理办法》、《陕西省小型水库雨水情测报和大坝安全监测设施建设与运行管理办法》的要求&#xff0c;为保障水库安全运行&#xff0c;对全省小型病险水库除险加固&#xff0c;建设完善雨水情测报、监测预警、防汛道路、通讯设备、…

如何有效使用蜂邮EDM和vba批量发送邮件?

蜂邮EDM和vba批量发送邮件的方法&#xff1f;怎么使用蜂邮EDM和vba代码群发电子邮件&#xff1f; 批量发送邮件已经成为一种不可或缺的沟通方式。蜂邮EDM和VBA是两个功能强大的工具&#xff0c;可以帮助您在邮件营销和业务通信中实现高效的批量发送邮件操作。接下来将介绍如何…

关于Goby反制上线CS中的各种问题

前言 ​ Goby作为新一代网络安全技术&#xff0c;通过为目标建立完整的资产数据库&#xff0c;实现快速的安全应急&#xff0c;日常为广大师傅提供了便捷的渗透体验。最近有观察到有关于某些蜜罐出现了Goby反制的指纹&#xff0c;顿时就起了兴趣进行研究Goby的反制&#xff0c…

AIGC究竟是什么?为什么今年大家都在讨论?

目录 一、什么是AIGC 二、AIGC发展阶段 三、AIGC的技术应用 AIGC的应用场景 四、AIGC的伦理、风险与未来 五、说在最后 在23年初&#xff0c;大家的视野范围内突然出现了一种叫ChatGPT的产品&#xff0c;这是由OpenAI研发的一种基于深度学习和自然语言处理技术的文本生成…

SpringBoot_mybatis-plus使用json字段

mybatis-plus使用json字段 1.前言2.方案分析2.1 为什么是json2.2 数据库的选择 3. 实战3.1 使用text字段(h2数据库)3.1.1 建表语句3.1.2 数据操作与查询 3.2 使用json字段(mysql数据库)3.2.1 建表语句3.2.2 数据操作与查询 4. 附录4.1 MySQL JSON索引用法 5. 参考文档 1.前言 …

无需服务器内网穿透Windows下快速搭建个人WEB项目

&#x1f4d1;前言 本文主要是windows下内网穿透文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&#xff1a;努力…

今日温馨早安问候语,祝大家平安健康早安吉祥

用清晨的阳光沐浴&#xff0c;给你舒展;用清新的空气洗漱&#xff0c;给你舒心;伴清莹的雨露散步&#xff0c;给你舒情;向美好的一天欢呼&#xff0c;给你舒怀&#xff0c;用快乐的词汇凝聚&#xff0c;给你祝福&#xff0c;祝你在绚丽的晨光中走好每一天。朋友&#xff0c;早安…

算法升级之路(六)

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 解题思路&…

中国教育企业出海 新兴技术助力抢占先机

继游戏、电商、短视频等领域轮番出海之后&#xff0c;国内教育企业纷纷开启了出海之路。近日发布的《2023年教育应用出海市场洞察》报告显示&#xff0c;在中国教育企业出海市场中&#xff0c;语言学习是最主要的赛道&#xff0c;但赛道竞争更为激烈。 报告指出&#xff0c;全…

高性能消息中间件 - Kafka3.x(三)

文章目录 高性能消息中间件 - Kafka3.x&#xff08;三&#xff09;Kafka Broker ⭐Kafka Broker概念Zookeeper&#xff08;新版本可以不使用zk了&#xff09;⭐Zookeeper的作用 Kafka的选举1&#xff1a;Broker选举Leader⭐Broker核心参数⭐案例&#xff1a;服役新节点和退役旧…

多测师肖sir_高级金牌讲师_jmeter 反向代理录制脚本

jemeter自带的录制脚本功能&#xff0c;是利用代理服务器来进行录制的 1&#xff0c;新建一个线程组 2&#xff0c;新建一个代理服务器 右击工作台-添加-非测试元件-http代理服务器 3&#xff0c; 配置http代理服务器 端口&#xff1a; 默认为8888&#xff0c;可修改。但…

InfoHound:一款针对域名安全的强大OSINT工具

关于InfoHound InfoHound是一款针对域名安全的强大OSINT工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员只需要提供一个Web域名&#xff0c;InfoHound就可以返回大量跟目标域名相关的数据。 在网络侦查阶段&#xff0c;攻击者会搜索有关其目标的任何信息&#xff…

理解springboot那些过滤器与调用链、包装或封装、设计模式相关等命名规范,就可以读懂80%的springboot源代码,和其他Java框架代码

紧接上面《 理解springboot那些注册与回调、监控与统计等命名规范,就可以读懂70%的springboot源代码》、《 理解springboot那些约定俗成的框架类名、全局context等命名规范,就可以读懂一半springboot的源代码》2篇文章,此片将汇总springboot那些过滤器与调用链、包装或封装…

(三)上市企业实施IPD成功案例分享之——五菱

2022年对汽车产业而言是极为不平凡的一年。这一年&#xff0c;企业受到疫情反复、芯片短缺、原材料价格上涨等负面因素影响&#xff0c;汽车产业的变革持续加速。面对变革与挑战&#xff0c;五菱汽车仍逆势交出一份超出市场预期的成绩单。上半年&#xff0c;五菱发布2022年财报…

职场晋升力加分利器:巧用ChatGPT快速搞定数据分析

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 第一部分&#xff1a; C…

Java设置日期时间的毫秒数为0

背景 做一个发送短信的需求&#xff0c;采用RabbitMQ来实现定时发送。发送时需要验证发送短信任务的预计发送时间和生产者传过来的时间是否一致&#xff0c;一致才发送。 结果在调试的时候&#xff0c;却发现任务一直没法触发。一步步调试&#xff0c;发现是两个时间不相等。明…

【Proteus仿真】【51单片机】贪吃蛇游戏

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用8*8LED点阵、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;可操作4个按键控制小蛇方向。 二、软件设计 /* 作者&#xff1a;嗨小易…

2023第二十五届深圳高交会将于11月15日在深启幕

10月31日下午&#xff0c;第二十五届中国国际高新技术成果交易会&#xff08;以下简称高交会&#xff09;新闻发布会在市政府新闻发布厅举行。以“激发创新活力 提升发展质量”为主题的第二十五届高交会将于11月15日-19日在深圳会展中心&#xff08;福田展区&#xff09;和深圳…

el-date-picker如何选择规定范围内的时间(十天以内的时间)

这个需求是可以选择之后来计算,选择当前日期之后自动计算当前日期前后的十天以内的日期 如下图 就是19号前面十天的日期 以及后面十天的日期(包含当天) 需要用到elementUI el-date-picker是Element UI库中的一个组件&#xff0c;用于日期选择 <el-date-picker v-model&q…

零代码编程:用ChatGPT进行批量重命名时需要注意特殊字符

用ChatGPT进行批量重命名时&#xff0c;一部分成功了&#xff0c;但有一部分文件标题没有变化。 问下ChatGPT怎么回事&#xff1a; 回复&#xff1a;在Windows中&#xff0c;文件名不能包含以下字符&#xff1a;\ / : * ? " < > |&#xff0c;使用Python的 str.rep…