Qt Chart 模块化封装曲线图
一 版本说明
二 完成示例
此文章包含:曲线轴设置,曲线切换,单条曲线显示,坐标轴。。。
三 曲线图UI创建
在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView
四 代码介绍
1 头文件
#include <QString>
#include <QTimer>
#include <QMessageBox>
#include <QDateTime>
#include <QFile>
#include <QFileDialog>
#include <QDebug>
#include <QFileInfo>
#include <QSerialPortInfo>
#include <QtSerialPort/QSerialPort>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QValueAxis>
#include <QPointF>
#include <QAxObject>
#include <QChartView>
#include <QtMath>
#include <QMimeData>//曲线函数声明 一定要包含
QT_CHARTS_USE_NAMESPACE#define MAX_X (15) //X轴长度
#define X_LEN (15) //X分辨率
#define Y_LEN (10) //Y分辨率#define TEC_MIN_Y (-10) //Y轴最小长度
#define TEC_MAX_Y (85) //Y轴最大长度QTimer *timer1;//用作曲线点定时添加QLabel *label_coordinate;//坐标显示QGraphicsLineItem *x_line, *y_line;//十字线double qcuisition_interval;//采样时间间隔 我这里采用分钟记数,所以一秒钟累加 1.0f / 60.0fdouble record_x_min, record_x_max;//X轴记录点//两条线段
QChart tec_1_2_temperature_chart;
QValueAxis tec_1_2_temperature_axisX, tec_1_2_temperature_axisY;//X轴和Y轴
QLineSeries line_tec_1_2_set_temperature[2], line_tec_1_2_current_temperature[2];//设置温度,实时温度
QString line_tec_1_2_set_temperature_name[2] = {"TEC1设置", "TEC2设置"};
QString line_tec_1_2_current_temperature_name[2] = {"TEC1实时", "TEC2实时"};
QPen line_tec_1_2_set_temperature_clocr[2] = {QColor(237, 28, 36), QColor(181, 206, 212)};
QPen line_tec_1_2_current_temperature_cloor[2] = {QColor(255, 127, 39), QColor(63, 72, 204)};
double tec_1_2_temperature_record_y_min = TEC_MIN_Y, tec_1_2_temperature_record_y_max = TEC_MAX_Y;//记录X,Y位置
double tec_1_2_temperature_count = 0;//记录当采集点
2 cpp文件
2.1 初始化函数
/**
* @brief 曲线图 初始化
* @param char图表类
* @param axisx:X轴
* @param x_name:x轴名字
* @param axisy:Y轴
* @param y_min:Y轴最小长度
* @param y_max:Y轴最大长度
* @param y_name:Y轴名字
* @retval None
*/
void interface_chart::Chart_Init(QChart &chart,QValueAxis &axisx, QString x_name,QValueAxis &axisy, int y_min, int y_max, QString y_name)
{int font_size = 11;QFont font("Microsoft YaHei", font_size);//微软雅黑chart.legend()->setFont(font); // 设置字体及大小chart.setAnimationOptions(QChart::SeriesAnimations);//移动动画//设置坐标轴显示的范围axisx.setMin(0);axisx.setMax(MAX_X);axisy.setMin(y_min);axisy.setMax(y_max);//设置坐标轴上的格点axisx.setTickCount(X_LEN + 1);axisy.setTickCount(Y_LEN);//设置坐标轴字体大小axisx.setTitleFont(font);axisx.setLabelsFont(font);axisy.setTitleFont(font);axisy.setLabelsFont(font);//设置名字axisx.setTitleText(x_name);axisy.setTitleText(y_name);//设置网格显示axisy.setGridLineVisible(true);chart.addAxis(&axisx, Qt::AlignBottom);//这个就是控制坐标系显示参数的位置chart.addAxis(&axisy, Qt::AlignLeft);
}/**
* @brief 曲线图初始化
* @param char图表类
* @param axisx:X轴
* @param axisy:Y轴
* @param spinlineseries:线段
* @param spinlineseries_name:曲线名称
* @param spinlineseriespen:曲线颜色
* @retval None
*/
void interface_chart::QLineSeries_Init(QChart &chart,QValueAxis &axisx, QValueAxis &axisy,QLineSeries &spinlineseries, QString spinlineseries_name, QPen spinlineseries_pen)
{//初始化QLineSeries的实例spinlineseries.setUseOpenGL(true);//设置曲线的名称spinlineseries.setName(spinlineseries_name);//设置曲线线颜色spinlineseries.setPen(spinlineseries_pen);QPen pen = spinlineseries.pen();pen.setWidthF(1.7f);spinlineseries.setPen(pen);//把曲线添加到QChart的实例chart中chart.addSeries(&spinlineseries);//把曲线关联到坐标轴spinlineseries.attachAxis(&axisx);spinlineseries.attachAxis(&axisy);
}
2.2 初始化函数调用
/*======================曲线类======================*///TEC 1-2温度Chart_Init(tec_1_2_temperature_chart,tec_1_2_temperature_axisX, "时间/分",tec_1_2_temperature_axisY, TEC_MIN_Y, TEC_MAX_Y, "温度/°C");for(int i =0 ; i < 2; i++){QLineSeries_Init(tec_1_2_temperature_chart,tec_1_2_temperature_axisX, tec_1_2_temperature_axisY,line_tec_1_2_set_temperature[i], line_tec_1_2_set_temperature_name[i], line_tec_1_2_set_temperature_clocr[i]);QLineSeries_Init(tec_1_2_temperature_chart,tec_1_2_temperature_axisX, tec_1_2_temperature_axisY,line_tec_1_2_current_temperature[i], line_tec_1_2_current_temperature_name[i], line_tec_1_2_current_temperature_cloor[i]);}/*======================定时器设置======================*///采样间隔设置qcuisition_interval = 5 / 60.0f;timer1->setInterval(5000);/*=====================十字线======================*///显示十字线x_line = new QGraphicsLineItem();y_line = new QGraphicsLineItem();x_line->setVisible(true);y_line->setVisible(true);x_line->setZValue(2); // 设置Z值为2,确保在最顶层显示y_line->setZValue(2);/*======================graphicsView======================*/ui->graphicsView->setRenderHint(QPainter::Antialiasing);//抗锯齿ui->graphicsView->setRenderHint(QPainter::SmoothPixmapTransform);//曲线动画//用双缓冲技术可以减少闪烁和提高绘图性能ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);ui->graphicsView->setChart(&tec_1_2_temperature_chart); //设置曲线图ui->graphicsView->scene()->addItem(x_line);ui->graphicsView->scene()->addItem(y_line);ui->graphicsView->installEventFilter(this); // 设置事件过滤器 后续坐标轴必须要用到的//强制生成鼠标事件ui->graphicsView->setAttribute(Qt::WA_Hover,true);/*=====================标显示======================*///坐标显示label_coordinate = new QLabel(ui->graphicsView);label_coordinate->move(0,0);label_coordinate->setStyleSheet("color: black;");label_coordinate->setFont(QFont("Microsoft YaHei", 10));label_coordinate->show(); // 显示出来// 设置label_coordinate的大小QFontMetrics fm(label_coordinate->font());int textWidth = fm.horizontalAdvance("x: 123.45\ny: 67.89"); // 根据显示的内容计算宽度int textHeight = fm.height() * 2; // 两行文本高度label_coordinate->setFixedSize(textWidth, textHeight);
2.3 事件函数
用于坐标轴生成
/**
* @brief 事件过滤
* @retval None
*/
bool interface_chart::eventFilter(QObject *obj, QEvent *event)
{if (obj == ui->graphicsView){if(event->type() == QEvent::HoverMove){QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);QPointF mouse_scenePos = ui->graphicsView->mapToScene(mouseEvent->pos());QPointF scenePos = ui->graphicsView->chart()->mapToValue(mouseEvent->pos());QString coordinate = QString("x: %1\ny: %2\n").arg(QString::number(scenePos.x(), 'f', 2), QString::number(scenePos.y(), 'f', 2));label_coordinate->setText(coordinate);label_coordinate->move(mouseEvent->x() + 7, mouseEvent->y() - 42);x_line->setLine(mouse_scenePos.x(), 0, mouse_scenePos.x(), ui->graphicsView->height());y_line->setLine(0, mouse_scenePos.y(), ui->graphicsView->width(), mouse_scenePos.y());}else if (event->type() == QEvent::Enter){
// qDebug() << "鼠标进入了graphicsView";x_line->setVisible(true);y_line->setVisible(true);this->setCursor(Qt::BlankCursor); //隐藏鼠标label_coordinate->setVisible(true);//坐标系label}else if (event->type() == QEvent::Leave){
// qDebug() << "鼠标离开了graphicsView";x_line->setVisible(false);y_line->setVisible(false);this->setCursor(Qt::ArrowCursor); //显示鼠标label_coordinate->setVisible(false);//坐标系label}}return false;
}
2.4 曲线放大缩小
从 二章节 中看到曲线上面有4个Spinbox,分别设置曲线的X,Y轴的最大最小值。此处就不教控件拖拽了。直接你们自行解决。
/**
* @brief x min 槽函数
* @retval None
*/
void interface_chart::on_spinBox_x_min_valueChanged(double arg1)
{if(arg1 > ui->spinBox_x_max->value() - 1)//限制输入{ui->spinBox_x_min->setValue(ui->spinBox_x_min->value() - 0.5);return;}// 获取所有轴的列表QList<QAbstractAxis *> axesList = ui->graphicsView->chart()->axes();// 遍历轴列表,查找X轴和Y轴for (QAbstractAxis *axis : axesList){if (axis->orientation() == Qt::Horizontal){// 这是X轴QValueAxis *xAxis = qobject_cast<QValueAxis *>(axis);if (xAxis){xAxis->setMin(arg1);}}}record_x_min = arg1;
}/**
* @brief x max 槽函数
* @retval None
*/
void interface_chart::on_spinBox_x_max_valueChanged(double arg1)
{if(arg1 < ui->spinBox_x_min->value() + 1){ui->spinBox_x_max->setValue(ui->spinBox_x_max->value() + 0.5);return;}// 获取所有轴的列表QList<QAbstractAxis *> axesList = ui->graphicsView->chart()->axes();// 遍历轴列表,查找X轴和Y轴for (QAbstractAxis *axis : axesList){if (axis->orientation() == Qt::Horizontal){// 这是X轴QValueAxis *xAxis = qobject_cast<QValueAxis *>(axis);if (xAxis){xAxis->setMax(arg1);}}}record_x_max = arg1;
}/**
* @brief y min 槽函数
* @retval None
*/
void interface_chart::on_spinBox_y_min_valueChanged(int arg1)
{if(arg1 > ui->spinBox_y_max->value() - 1){ui->spinBox_y_min->setValue(ui->spinBox_y_min->value() - 1);return;}// 获取所有轴的列表QList<QAbstractAxis *> axesList = ui->graphicsView->chart()->axes();// 遍历轴列表,查找X轴和Y轴for (QAbstractAxis *axis : axesList){if (axis->orientation() == Qt::Vertical){// 这是Y轴QValueAxis *yAxis = qobject_cast<QValueAxis *>(axis);if (yAxis){yAxis->setMin(arg1);}}}//此处是为了方便多个线段的时候,切换曲线还能维持在上次的Y轴。switch(ui->comboBox_chart->currentIndex()){case 0:tec_1_2_temperature_record_y_min = arg1;break;}
}/**
* @brief y max 槽函数
* @retval None
*/
void interface_chart::on_spinBox_y_max_valueChanged(int arg1)
{if(arg1 < ui->spinBox_y_min->value() + 1){ui->spinBox_y_max->setValue(ui->spinBox_y_max->value() + 1);return;}// 获取所有轴的列表QList<QAbstractAxis *> axesList = ui->graphicsView->chart()->axes();// 遍历轴列表,查找X轴和Y轴for (QAbstractAxis *axis : axesList){if (axis->orientation() == Qt::Vertical){// 这是Y轴QValueAxis *yAxis = qobject_cast<QValueAxis *>(axis);if (yAxis){yAxis->setMax(arg1);}}}switch(ui->comboBox_chart->currentIndex()){case 0:tec_1_2_temperature_record_y_max = arg1;break;}
}
2.5 曲线切换
前后两个for循环实属无奈,线段函数好想有bug,隐藏了,但是隐藏不掉。只能用这两个来操作
/**
* @brief chart切换 槽函数
* @retval None
*/
void interface_chart::on_comboBox_chart_activated(int index)
{//先隐藏当前曲线for(int i = 0; i < ui->graphicsView->chart()->series().size(); i++)ui->graphicsView->chart()->series().value(i)->setVisible(false);switch(index){case 0:ui->graphicsView->setChart(&tec_1_2_temperature_chart);break;}//X轴,防止一次调用多个曲线类执行on_spinBox_x_min_valueChanged(ui->spinBox_x_min->value());on_spinBox_x_max_valueChanged(ui->spinBox_x_max->value());//Y轴switch(index){case 0:ui->spinBox_y_min->setValue(tec_1_2_temperature_record_y_min);ui->spinBox_y_max->setValue(tec_1_2_temperature_record_y_max);break;}//设置完毕之后显示刚设置的曲线for(int i = 0; i < ui->graphicsView->chart()->series().size(); i++)ui->graphicsView->chart()->series().value(i)->setVisible(true);Checkbox_Chennel_Select();//后面会介绍
}
2.6 当前页曲线清除
多页你们自己想吧
//遍历清除for(int i = 0; i < ui->graphicsView->chart()->series().count(); i++){QLineSeries *lineSeries = qobject_cast<QLineSeries*>(ui->graphicsView->chart()->series().value(i));lineSeries->clear();}switch(ui->comboBox_chart->currentIndex()){case 0:tec_1_2_temperature_count = 0;//计数值break;}
2.7 通道选择
/**
* @brief 通道选择
* @retval None
*/
void interface_chart::Checkbox_Chennel_Select(void)
{//上个项目方了6个,懒得删你们自己看着办int Checkbox_Chennel[6];Checkbox_Chennel[0] = ui->checkBox_channel_1->isChecked();Checkbox_Chennel[1] = ui->checkBox_channel_2->isChecked();Checkbox_Chennel[2] = ui->checkBox_channel_3->isChecked();Checkbox_Chennel[3] = ui->checkBox_channel_4->isChecked();Checkbox_Chennel[4] = ui->checkBox_channel_5->isChecked();Checkbox_Chennel[5] = ui->checkBox_channel_6->isChecked();//选择那一条chart显示switch(ui->comboBox_chart->currentIndex()){case 0:case 1:ui->checkBox_channel_1->setHidden(false);//开关隐藏设置ui->checkBox_channel_2->setHidden(false);ui->checkBox_channel_3->setHidden(true);ui->checkBox_channel_4->setHidden(true);ui->checkBox_channel_5->setHidden(true);ui->checkBox_channel_6->setHidden(true);//设置是否隐藏ui->graphicsView->chart()->series().value(0)->setVisible(Checkbox_Chennel[0]);ui->graphicsView->chart()->series().value(1)->setVisible(Checkbox_Chennel[0]);ui->graphicsView->chart()->series().value(2)->setVisible(Checkbox_Chennel[1]);ui->graphicsView->chart()->series().value(3)->setVisible(Checkbox_Chennel[1]);break;case 2:case 3:ui->checkBox_channel_1->setHidden(false);ui->checkBox_channel_2->setHidden(false);ui->checkBox_channel_3->setHidden(false);ui->checkBox_channel_4->setHidden(false);ui->checkBox_channel_5->setHidden(true);ui->checkBox_channel_6->setHidden(true);for(int i = 0; i < 4; i++)ui->graphicsView->chart()->series().value(i)->setVisible(Checkbox_Chennel[i]);break;}
}
2.8 曲线点添加
/**
* @brief 定时器 槽函数
* @retval None
*/
void interface_chart::Timer1_Slots(void)
{//TEC1_2设置温度for(int i = 0; i < 2; i++){line_tec_1_2_set_temperature[i].append(tec_1_2_temperature_count, “添加的数字”);line_tec_1_2_current_temperature[i].append(tec_1_2_temperature_count, “添加的数字”);}tec_1_2_temperature_count+=qcuisition_interval;
}
相关文章:
Qt Chart 模块化封装曲线图
一 版本说明 二 完成示例 此文章包含:曲线轴设置,曲线切换,单条曲线显示,坐标轴。。。 三 曲线图UI创建 在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView 四 代码介绍 1 头文件 #include <QString> #in…...
【Linux】深入理解进程管理与fork系统调用的实现原理
【Linux】深入理解进程管理与fork系统调用的实现原理 进程基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类组织进程 查看进程通过系统调用获取进程标示符Fork 之后的代码共享1. **代码共享**2. **数据段不共享**总结 🌏个人博客主页:个人…...
C语言程序设计P5-2【应用函数进行程序设计 | 第二节】——知识要点:函数的参数及返回值和函数的调用及声明
知识要点:函数的参数及返回值和函数的调用及声明 视频: 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 1.求x的n次方的值也就是求n个x的乘积,可把x和n作为函数的形参,定义一个函数power来完成这个功能&am…...
【LeetCode】169.多数元素
题目连接: https://leetcode.cn/problems/majority-element/solutions/2362000/169-duo-shu-yuan-su-mo-er-tou-piao-qing-ledrh/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述: 思路一: 使用哈希表unordered_map记录每个元…...
0x0118消息 WM_SYSTIMER
0x0118消息就是WM_SYSTIMER 编辑框出现输入光标时,产生的消息. 0x0118 would be the undocumented WM_SYSTIMER, which appears to be used for caret blinks. 0x0118是一个undocument 消息, 微软没有记录。 但在一些库的源码中可以看到,比如ATL的库文…...
【Linux内核】Hello word程序
创建测试目录 mkdir -p ~/develop/kernel/hello-1 cd ~/develop/kernel/hello-1 创建MakeFile文件和内核.c文件 nano Makefile nano hello-1.c 编写内容 /* * hello-1.c - The simplest kernel module. */ #include <linux/module.h> /* Needed by all modules */…...
黑马redis
Redis的多IO线程只是用来处理网络请求的,对于读写操作命令Redis仍然使用单线程来处理 Redisson分布式锁实现15问 文章目录 主线程和IO线程是如何协作的Unix网络编程中的五种IO模型Linux世界一切皆文件生产上限制keys *、flushdb、flushall等危险命令keys * 遍历查询100W数据花…...
Robust Depth Enhancement via Polarization Prompt Fusion Tuning
paper:论文地址 code:github项目地址 今天给大家分享一篇2024CVPR上的文章,文章是用偏振做提示学习,做深度估计的。模型架构图如下 这篇博客不是讲这篇论文的内容,感兴趣的自己去看paper,主要是分享环境&…...
集合框架(3)Map
Map接口 现实生活与开发中,我们常会看到这样的一类集合:用户ID与账户信息、学生姓名与考试成绩、IP地址与主机名等,这种一一对应的关系,就称作映射。Java提供了专门的集合框架用来存储这种映射关系的对象,即java.util…...
Java反射机制—Class
Java反射机制是指在运行时动态地获取类的信息以及操作类的成员变量、方法和构造方法的能力。反射机制通过使用Class类来实现,Class类是Java中表示类的类。 通过反射机制,我们可以在运行时动态地创建对象、调用方法、访问属性等。反射机制提供了一种强大…...
C# 新语法中的字符串内插$和{}符号用法详解
自C#6.0开始提供一个新的语法糖,即"$" 符号,配合“{}”使用,它的作用除了是对String.format的简化,还可设置其格式模板,实现了对字符串的拼接优化。 语法格式: $"string {变量表达式}” 语…...
WordPress 独立站是否需要 CDN:深度解析及必要性分析
WordPress 是目前全球最流行的开源内容管理系统(CMS),其易用性和丰富的插件生态使得它成为搭建独立站的首选。然而,随着流量的增加以及用户体验的需求,网站的速度和可靠性变得至关重要。在这种情况下,CDN&a…...
dell电脑开不了机怎么回事?戴尔电脑无法开机解决方法
dell戴尔电脑开不了机,这是很多使用dell电脑用户常遇到的问题。这种故障情况是由多种原因引起,包括硬件故障、软件问题或电源问题等等。dell电脑开不了机怎么办呢?下面便为大家介绍一下相关解决修复方法,帮助用户解决戴尔电脑无法…...
如何解决 JavaScript 中的数组方法不生效?
在 JavaScript 中,数组方法是常用的工具,可以用来对数组进行操作。常见的数组方法包括 push(), pop(), shift(), unshift(), map(), filter(), reduce() 等。 然而,有时候我们会遇到数组方法“失效”或者不按预期工作的情况。这个问题的原因…...
道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办
道可云元宇宙每日简报(2024年12月5日)讯,今日元宇宙新鲜事有: 全国工商联人工智能委员会成立会议在南京举办 全国工商联人工智能委员会成立会议日前在江苏省南京市举办。中央统战部副部长、全国工商联党组书记沈莹出席会议并讲话…...
华为HCIP-Datacom H12-821H12-831 (12月最新题库)
备考HCIP-datacom的小伙伴注意啦 !!! 2024年下半年12月份最新(H12-821和H12-831)题库带解析,有需要的小伙伴移动至文章末 H12-821: H12-831: 1.BGP 邻居建立过程的状态存在以下几种:那么建立一个成功的连接所经历的状态机顺序是 A、3-1-2-5-4 B、1-3-5-2-4 C、…...
模型案例:| 手机识别模型!
导读 2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领…...
AWS创建ec2实例并连接成功
aws创建ec2实例并连接 aws创建ec2并连接 1.ec2创建前准备 首先创建一个VPC隔离云资源并且有公有子网 2.创建EC2实例 1.启动新实例或者创建实例 2.创建实例名 3.选择AMI使用linux(HVM) 4.选择实例类型 5.创建密钥对下载到本地并填入密钥对名称 6.选择自己创建的VPC和公有子网…...
短视频矩阵系统开发|技术源代码部署
短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能,助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具,它整合了多账号管理、视频智能分发、数据可视化等多种功能,为企业在短视频领域的发展提供了强大…...
C# GDI绘制的小熊进度条
C# GDI小熊进度条 1、添加自定义控件winform using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…...
java书 核心技术+卷一+4
5.4 对象包装器与自动装箱 package 反射; import java.util.AbstractList; import java.util.ArrayList; public class test {public static void main(String[] args) {int a10;ArrayList<Integer> xxnew ArrayList<>();xx.add(a); //自动装箱int bxx.get(0);//…...
用Python开发一个经典打砖块小游戏
Python 的 pygame 库让我们可以轻松开发经典的小游戏。今天,我们将实现一个“打砖块”小游戏,带你体验游戏开发的乐趣。 一、游戏设计 1.1 游戏规则 玩家通过移动滑板接住弹起的球。球撞击砖块会让砖块消失,玩家得分。如果球落地,游戏失败。1.2 技术点 碰撞检测:检测球与…...
RTCMultiConnection 跨域问题解决
js套件地址 https://github.com/muaz-khan/RTCMultiConnection server套件地址 https://github.com/muaz-khan/RTCMultiConnection-Server 要解决的就是server代码的跨域问题 原装写法: 解决写法: // 喜欢组合语法的自己组 const io new ioServer.S…...
使用GO--Swagger生成文档
概述 在前后端分离的项目中,后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包,用于处理Swagger 2.0(即OpenAPI 2.0)规范。它提供了丰富的工具集&#x…...
简易图书管理系统
javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…...
探索自然语言处理奥秘(NLP)
摘要 自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音,并与人类进行基本的对话交流。 通俗理解 自然语言处理(NLP)…...
刘铁猛C#入门 030 泛型,partial类,枚举,结构
泛型(generic)无处不在 为什么需要泛型:避免成员膨胀或者类型膨胀 正交性:泛型类型(类/接口/委托/......)泛型成员(属性/方法/字段/....类型方法的参数推断 泛型接口/类的 类型参数不只有一个泛型与委托、lambda表达式实现泛型接口类时 ,实现…...
迅雷 11.2.2 | 本地会员版,不限速下载,支持云盘
迅雷 v11.2.2 是一款带网盘功能的绿色版下载工具。双击“!)绿化”文件即可在桌面生成快捷图标。该版本干净简洁,仅保留下载和云盘两项核心功能。点击左上角的【新建】按钮,可新建链接下载任务。即使在网络条件一般的情况下(如50M宽带…...
P3131 [USACO16JAN] Subsequences Summing to Sevens S
题目描述 Farmer Johns NN cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to take a photo of a contiguous group of cows but, due to a…...
股指期货基差为正数,这是啥意思?
在股指期货的世界里,有个挺重要的概念叫“基差”。说白了,基差就是股指期货的价格和它对应的现货价格之间的差价。今天,咱们就来聊聊当这个基差为正数时,到底意味着啥。 基差是啥? 先复习一下,基差 股指…...
docker自动拉取最新镜像并更新
目录 一、自动检查和更新所有正在运行的容器(每24h一次) 二、仅仅更新特定的容器(每24h一次) 三、指定更新间隔(300秒) 四、Watchtower 不会主动删除旧镜像,使用 --cleanup 参数在更新容器后…...
unicloud微信小程序云端一体项目DEMO
最近应客户需求,做了一个产品展示的云开发小程序,从了解云开发到应用到实际项目的产品demo,希望大家能从中获取到对自己有用的东西。 说下心得体会吧,一般小项目用这种云开发确实会减少很多开发成本,人力成本…...
Spring+Mybatis 整合所需准备
文章目录 SpringMybatis SpringMybatis 准备pom.xml 项目所需jar文件 <spring.version>4.0.2.RELEASE</spring.version> <!-- spring框架包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</a…...
后端工程师成长路线图
后端开发工程师是软件开发领域中的一个重要角色,主要负责平台设计、接口设计和功能实现。他们的主要职责包括服务器端业务开发、架构设计、系统性能调优等。 后端开发工程师的工作内容通常涉及服务器开发、数据库管理、业务逻辑实现等方面。他们需要与前端工程…...
java -jar ./target/pay.war ./target/pay.war 中没有主清单属 为什么?
当你尝试使用 java -jar ./target/pay.war 来启动你的 WAR 包时,遇到的错误是因为该 WAR 包没有包含主清单属性(Main-Class)。这是因为你的项目是一个 Spring Boot 项目,并且默认是作为 WAR 文件部署到外部容器(如 Tom…...
封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目
在当今学术研究中,科研人员在撰写论文时面临诸多挑战。首先是信息量的剧增,科研人员需要快速消化新知识,筛选相关信息并清晰表达。但论文写作不仅是信息的罗列,还需要条理清晰、逻辑严密、语言精准,特别是在竞争激烈的…...
解决Centos6.9的yum的失效问题
相信大家,如果遇到了yum问题的话,经常会很头疼,因此,这里给出了两条命令,这里的前提是你的wget是能用的 1、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2、wget -O /etc/yum.re…...
【日常记录-Java】查看Maven本地仓库的位置
1. 简介 Maven本地仓库主要用于存储和管理项目所需的依赖项,如jar包、pom文件等。默认情况下,其位于用户家目录下的.m2/repository文件夹内。开发者也可以在Maven的配置文件settings.xml中修改本地仓库路径。 2. 方法 2.1 查看settings.xml文件 Maven本…...
软件测试丨Web自动化测试用例录制与编写全攻略
Web自动化测试的功能简介 Web自动化测试主要是使用特定的工具或框架自动执行对Web应用程序进行的测试。通过模拟用户的操作,自动化测试能够验证应用程序的功能及性能。这一过程的大致流程是: 用例设计:明确测试目标、场景及所需功能。录制测…...
.Net学习
1 什么是.NET Core .NET是开发平台,.NET Framework、.NET Core、Xamaarin/Mono的统称。 .NET Framework是只能在Windows上开发的技术 .NET Core是可以跨平台开发的技术 Xamaarin/Mono是移动端开发的技术 .NET Core:跨平台、免费、开源,可…...
2024年华中杯数学建模A题太阳能路灯光伏板的朝向设计问题解题全过程文档及程序
2024年华中杯数学建模 A题 太阳能路灯光伏板的朝向设计问题 原题再现 太阳能路灯由太阳能电池板组件部分(包括支架)、LED灯头、控制箱(包含控制器、蓄电池)、市电辅助器和灯杆几部分构成。太阳能电池板通过支架固定在灯杆上端。…...
Spring Cloud Zookeeper 快速入门demo
1.什么是Spring Cloud Zookeeper ? Spring Cloud Zookeeper 是一个用于构建分布式系统的工具,它利用 Apache Zookeeper 提供的服务来实现服务注册与发现、配置管理、负载均衡等功能。具体来说,Spring Cloud Zookeeper 可以做以下几件事情&am…...
防火墙有什么作用
防火墙的作用:1. 提供网络安全防护;2. 实施访问控制和流量过滤;3. 检测和阻止恶意攻击;4. 保护内部网络免受未经授权的访问;5. 监控网络流量和安全事件;6. 支持虚拟专用网络(VPN)。防…...
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数 首先,简单实现一下,如何在ASPX页面中实现这个功能实现代码说明:注意事项: 然后进阶࿰…...
ES使用script进行复杂排序
es数据字段,关注_source内容,为自定义的es表字段内容 {"clerk_id": 3150036230,"clerk_follow_status": 60,"create_time": 1729156110000,"channel": 1,"mid": 1538020071,"binlog_timestamp&…...
大数据技术Kafka详解 ② | Kafka基础与架构介绍
目录 1、kafka的基本介绍 2、kafka的好处 3、分布式发布与订阅系统 4、kafka的主要应用场景 4.1、指标分析 4.2、日志聚合解决方法 4.3、流式处理 5、kafka架构 6、kafka主要组件 6.1、producer(生产者) 6.2、topic(主题) 6.3、partition(分区) 6.4、consumer(消费…...
观察者模式的理解和实践
引言 在软件开发中,设计模式是开发者们为了解决常见的设计问题而总结出来的一系列最佳实践。观察者模式(Observer Pattern)是其中一种非常经典且使用率极高的设计模式。它主要用于定义对象之间的一对多关系,使得当一个对象的状态发…...
Web3.0:连接分布式未来的纽带
随着技术的不断进步,Web3.0正逐渐成为人们关注的焦点。作为Web的下一代,Web3.0将引领我们进入一个全新的数字时代,重新定义了我们与互联网的关系 Web3.0,也称为“分布式Web”,是互联网的下一代演进。它不仅是信息的传…...
鸿蒙Next通过oss上传照片到阿里云
前言 最近在写纯血鸿蒙的APP,需要用到oss上传照片,之前的客户端 Android 和 IOS 都已经实现了,获取的阿里云签名的上传地址是服务端实现的,相信大部分公司都是这样的模式,服务端也是调用阿里云的SDK来实现的ÿ…...
微信小程序实现图片拖拽调换位置效果 -- 开箱即用
在编写类似发布朋友圈功能的功能时,需要实现图片的拖拽排序,删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码,可以在威信中搜索:我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…...