6、QtCharts 悬浮曲线效果

文章目录

  • 效果
  • dialog.h
  • dialog.cpp
  • 悬浮槽函数

效果

在这里插入图片描述

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QtCharts>
#include <QLineSeries>
#include <QGraphicsScene>
#include <QTimer>
#include <QSplineSeries>
#include <QPen>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:Ui::Dialog *ui;private slots:/*** @brief 鼠标悬浮消息,进入序列1* @param point 悬浮时的坐标* @param state true:悬浮进入,false:悬浮退出* @return void*/void slot_serieshovered1(const QPointF &point, bool state);void slot_serieshovered2(const QPointF &point, bool state);
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坐标轴QPen m_penSeries1;  //系列1画笔QPen m_penSeries2;  //系列2画笔};
#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_splineSerise1(NULL),m_splineSerise2(NULL)
{ui->setupUi(this);//setWindowFlags(Qt::FramelessWindowHint);//构建各个系列的画笔m_penSeries1 =QPen(Qt::green,2.f);m_penSeries2 =QPen(Qt::cyan,2.f);//构建曲线系列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);//绑定鼠标悬浮的信号connect(m_splineSerise1,&QSplineSeries::hovered,this,&Dialog::slot_serieshovered1);connect(m_splineSerise2,&QSplineSeries::hovered,this,&Dialog::slot_serieshovered2);}Dialog::~Dialog()
{delete ui;
}void Dialog::slot_serieshovered1(const QPointF &point, bool state)
{QPen penHighlight(Qt::white,5.f);if(state)//悬浮进入{m_splineSerise1->setPen(penHighlight);}else{m_splineSerise1->setPen(m_penSeries1);}
}void Dialog::slot_serieshovered2(const QPointF &point, bool state)
{QPen penHighlight(Qt::white,5.f);if(state)//悬浮进入{m_splineSerise2->setPen(penHighlight);}else{m_splineSerise2->setPen(m_penSeries2);}
}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);/*** 系列**/m_splineSerise1->setPen(m_penSeries1);QPen pn2(Qt::cyan,2.f);m_splineSerise2->setPen(m_penSeries2);/*** 开启动画**/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);
}

悬浮槽函数

void Dialog::slot_serieshovered1(const QPointF &point, bool state)
{QPen penHighlight(Qt::white,5.f);if(state)//悬浮进入{m_splineSerise1->setPen(penHighlight);}else{m_splineSerise1->setPen(m_penSeries1);}
}void Dialog::slot_serieshovered2(const QPointF &point, bool state)
{QPen penHighlight(Qt::white,5.f);if(state)//悬浮进入{m_splineSerise2->setPen(penHighlight);}else{m_splineSerise2->setPen(m_penSeries2);}
}

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

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

相关文章

《实战:如何搭建一个完整的 Vue2.0 项目》- 7、Vue2.x 项目 webpack 4 升级 5(半自动升级)

1.自动升级 先全局安装升级插件 npm i npm-check npm-check-updates -g检查依赖 npm-check更新检查后的依赖并展示版本号&#xff0c;此时 package.json还没有更新 npm-check-updates升级 package.json&#xff0c;下图显示更新版本&#xff0c;此时 package.json文件已变更…

FFmpeg——使用Canvas录制视频尚存问题的解决方案

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

编译正点原子LINUXB报错make: arm-linux-gnueabihf-gcc:命令未找到

编译正点原子LINUX报错make: arm-linux-gnueabihf-gcc&#xff1a;命令未找到 1.报错内容2.解决办法3./bin/sh: 1: lzop: not found4.编译成功 1.报错内容 make: arm-linux-gnueabihf-gcc&#xff1a;命令未找到CHK include/config/kernel.releaseCHK include/generat…

Linux 上的轻量级浏览器

导读大多数 Linux 桌面环境中包含的基本图像查看器可能不足以满足你的需要。如果你想要一些更多的功能&#xff0c;但仍然希望它是轻量级的&#xff0c;那么看看这四个 Linux 桌面中的图像查看器&#xff0c;如果还不能满足你的需要&#xff0c;还有额外的选择。 当你需要的不…

本地部署Jellyfin影音服务器并实现远程访问影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

表格冻结第二行

在网上找了一圈也没找到说明白的。 像这样的表格下面会有很多行&#xff0c;往下翻的时候会忘记第二行显示的什么内容。 需求&#xff1a;将第二行进行冻结 实现&#xff1a; 1&#xff0c;选中第一和第二行&#xff0c;下拉&#xff0c;点击冻结 2&#xff0c;会显示冻结至…

会声会影2024出来了吗?会声会影2024这款视频剪辑软件怎么样?

众所周知&#xff0c;每每有新兴行业逐渐崛起壮大的时候&#xff0c;随机而来的就是这个行业创造出的衍生行业&#xff0c;比如说现在的短视频平台或者是视频剪辑行业&#xff0c;都是很明显例子&#xff0c;今天我们就针对剪辑软件来和大家聊一聊&#xff0c;会声会影2024这款…

自动化测试篇:Java+selenium+appium自动化测试详解

一、启动测试机或者Android模拟器&#xff08;Genymotion俗称世界上最快的模拟器&#xff0c;可自行百度安装&#xff09; 同时&#xff0c;我也准备了一份软件测试视频教程&#xff08;含接口、自动化、性能等&#xff09;&#xff0c;需要的可以直接在下方观看&#xff0c;或…

MASK-RCNN tensorflow环境搭建

此教程默认你已经安装了Anaconda&#xff0c;且tensorflow 为cpu版本。为什么不用gpu版本&#xff0c;原因下面解释。 此教程默认你已经安装了Anaconda。 因为tensorflow2.1后的gpu版&#xff0c;不支持windows。并且只有高版本的tensorflow才对应我的CUDA12.2&#xff1b; 而…

【漏洞复现】fastjson_1.2.24_unserializer_rce

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞检测3、漏洞验证 1.5、深度利用1、GetShell 说明内容漏洞编号漏洞名称fastjson 1.2.24 反序列化导致…

自定义在input生成tag标签样式,标签可删除。组件封装

生成效果如图&#xff1a; <template><div class"tag-input"><!-- 父盒子 --><div class"father_box" click"fatherOnclick" :class"verify?:notVerify"><!-- 生成的标签 --><div v-for"(item…

师从IEEE Fellow|民办高校计算机专业教师自费赴美访学

D老师科研背景较弱&#xff0c;拟自费访学并带孩子出国就读&#xff0c;故要求申请到美国生活成本低且有较好公立中学教育资源的地区&#xff0c;并希望对方不收管理费。最终我们落实了德克萨斯大学达拉斯分校的邀请函&#xff0c;对方是IEEE Fellow、IET Fellow和EAI Fellow三…

Redis中Hash类型的命令

目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…

YOLO算法改进5【中阶改进篇】:添加SENet注意力机制

SE-Net 是 ImageNet 2017&#xff08;ImageNet 收官赛&#xff09;的冠军模型&#xff0c;是由WMW团队发布。具有复杂度低&#xff0c;参数少和计算量小的优点。且SENet 思路很简单&#xff0c;很容易扩展到已有网络结构如 Inception 和 ResNet 中。 我们可以看到&#xff0c;已…

java配置GDAL

<gdal.version>3.7.0</gdal.version><!-- gdal--><dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>${gdal.version}</version></dependency> GDAL环境安装 downlo…

PHP进销存ERP系统源码

PHP进销存ERP系统源码 系统介绍&#xff1a; 扫描入库库存预警仓库管理商品管理供应商管理。 1、电脑端手机端&#xff0c;手机实时共享&#xff0c;手机端一目了然。 2、多商户Saas营销版 无限开商户&#xff0c;用户前端自行注册&#xff0c;后台管理员审核开通 3、管理…

HarmonyOS鸿蒙原生应用开发设计- 元服务(原子化服务)图标

HarmonyOS设计文档中&#xff0c;为大家提供了独特的元服务图标&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的元服务图标内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的元服务图标侵权意外情况等&…

ROS学习笔记(4):ROS架构和通讯机制

前提 前4篇文章以及帮助大家快速入门ROS了&#xff0c;而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。 1.ROS架构三层次&#xff1a; 1.基于Linux系统的OS层&#xff1b; 2.实现ROS核心通信机制以及众多机器人开发库的中间层&#xff1b…

提升ChatGPT答案质量和准确性的方法Prompt engineering

文章目录 怎么获得优质的答案设计一个优质prompt的步骤:Prompt公式:示例怎么获得优质的答案 影响模型回答精确度的因素 我们应该知道一个好的提示词,要具备一下要点: 清晰简洁,不要有歧义; 有明确的任务/问题,任务如果太复杂,需要拆分成子任务分步完成; 确保prompt中…

ElasticSearch集群环境搭建

1、准备三台服务器 这里准备三台服务器如下: IP地址主机名节点名192.168.225.65linux1node-1192.168.225.66linux2node-2192.168.225.67linux3node-3 2、准备elasticsearch安装环境 (1)编辑/etc/hosts&#xff08;三台服务器都执行&#xff09; vim /etc/hosts 添加如下内…