QChart数据可视化
目录
一、QChart基本介绍
1.1 QChart基本概念与用途
1.2 主要类的介绍
1.2.1 QChartView类
1.2.2 QChart类
1.2.3QAbstractSeries类
1.2.4 QAbstractAxis类
1.2.5 QLegendMarker
二、与图表交互
1. 动态绘制数据
2. 深入数据
3. 缩放和滚动
4. 鼠标悬停
三、主题
四、代码实践
4.1 踩坑
4.2 线性图绘制
4.3 散点图
4.4 柱状图
4.5 饼状图
一、QChart基本介绍
1.1 QChart基本概念与用途
QtCharts是一个Qt模块,它提供了许多种常见的图表类型,如折线图、柱状图、饼图、散点图、区域图、极坐标图等等。使用QtCharts可以轻松地把数据可视化,帮助用户更好地理解数据,进行分析和决策。以下是Qt官方的介绍:
The QChart class manages the graphical representation of the chart's series, legends, and axes.
QChart is a QGraphicsWidget that you can show in a QGraphicsScene. It manages the graphical representation of different types of series and other chart related objects like legend and axes. To simply show a chart in a layout, the convenience class QChartView can be used instead of QChart. In addition, line, spline, area, and scatter series can be presented as polar charts by using the QPolarChart class.
1.2 主要类的介绍
QChart主要由一下几个大类组成:
1.2.1 QChartView类
视图对象,实际是一个独立的widget,用以展示图表。
1.2.2 QChart类
是真正的图表对象,QChart需要添加在QChartView对象下才可在正确展示出来。
1.2.3QAbstractSeries类
是数据集合,在QChart中添加QAbstractSeries,才可以展示出数据,否则QChart只能展现坐标轴 ,主要数据类及继承关系如下。
1.2.4 QAbstractAxis类
坐标轴类,用来设置QChart类的坐标轴属性,包括范围、精度等,也用来将QAbstractSeries类与QChart类对应起来。
Qt Charts支持以下坐标轴类型:
- 值轴 (QValueAxis):实际值添加到图表的轴上。它是使用QValueAxis类或ValueAxis QML类型实现的。
- 类别轴(QCategoryAxis):有命名范围和可调范围宽度
- 条形类别轴 (QBarCategoryAxis):类似于类别轴,但所有范围的范围宽度都相同。bar类别轴是使用QBarCategoryAxis类或BarCategoryAxis QML类型实现的。
- 日期-时间轴(QDateTimeAxis):将日期和时间添加到图表轴上。它是使用QDateTimeAxis类或DateTimeAxis QML类型实现的。
- 对数值轴(QLogValueAxis):向图表的轴添加对数刻度。对数标度是一种基于数量级的非线性标度,因此轴上的每个刻度都是前一个刻度乘以一个值。使用QLogValueAxis类或LogValueAxis QML类型实现对数轴
可以为一个图表定义多个轴。坐标轴可以放在图表的上下左右。此外,轴可以是不同的类型。但是,不支持混合轴类型,这会导致不同的域,例如在同一方向上指定QValueAxis和QLogValueAxis。
1.2.5 QLegendMarker
图例是一个显示图表图例的图形对象。图例对象不能被创建或删除,但是它们可以通过QChart类被引用。当序列发生变化时,图例状态由QChart或ChartView更新。
图例可以位于图表的下方或上方,也可以位于图表的左侧或右侧。默认情况下,图例是附加到图表视图的,但它可以分离到一个可以自由移动的单独图形项。可以隐藏图例中的单个标记,也可以隐藏整个图例。
图例标记可以通过使用QLegendMarker基类和每个序列类型的子类来修改:
QAreaLegendMarker、QBarLegendMarker、QBoxPlotLegendMarker、 QCandlestickLegendMarker和QXYLegendMarker。
二、与图表交互
用户可以通过以下方式与图表进行交互:动态地向图表添加值、深入聚焦数据、放大和缩小图表、滚动图表、单击图表中的项目或将鼠标悬停在图表上。
1. 动态绘制数据
可以动态地向图表添加数据,并使图表视图自动滚动以显示新数据。
2. 深入数据
例如,可以将下钻效果实现为条形图或饼状图。当用户在图表中选择项目时,将显示该项的更详细视图
例如,可以对条形图或饼图实现下钻效果。当用户在图表中选择一个项目时,将显示该项目的更详细视图。这是通过删除第一个序列并添加另一个序列来实现的。
3. 缩放和滚动
用户可以使用键盘进行缩放和滚动。它们可以使用方向键滚动图表,也可以使用正负键放大或缩小图表。此外,QRubberBand可以用来选择要放大的区域。
4. 鼠标悬停
可以将槽连接到终端用户单击图表中的项或将鼠标悬停在图表上时发出的信号。这使您能够向图表中添加元素,如标注。
三、主题
主题是应用于图表的所有视觉元素的UI样式相关设置的内置集合,例如颜色、画笔、画刷和字体系列,以及轴、标题和图例。
Qt图表具有以下预定义的主题:
- Light主题,这是默认主题
- 天蓝色的主题
- 黑暗的主题
- 砂褐色主题
- 自然颜色系统(NCS)蓝色主题
- 高反差主题
- 冰蓝色主题
- Qt的主题
可以通过更改颜色、画笔、画刷和字体来定制主题。可以通过修改Qt Charts的源代码来添加新的主题。
注意:更改主题将覆盖之前应用于该系列的所有自定义。
四、代码实践
4.1 踩坑
必须声明命名空间,库必须与编译器选择模式对应。
using namespace QtCharts;
4.2 线性图绘制
//折线图connect(ui.pushButton_zhexian, &QPushButton::clicked, this, [=] {//QLineSeries *lineSeries1 = new QLineSeries(); //折线//QLineSeries *lineSeries2 = new QLineSeries();QSplineSeries *lineSeries1 = new QSplineSeries(); //平滑曲线QLineSeries *lineSeries2 = new QLineSeries();qsrand(QTime::currentTime().second());for (int i = 0; i <= 41; ++i){ qreal y = qrand() % 100;if (i <= 20){qreal x = i;lineSeries1->append(x, y);}else{qreal x = i - 21;lineSeries2->append(x, y);}}lineSeries1->setColor(Qt::blue);lineSeries1->setPen(QPen(Qt::blue, 2));lineSeries1->setName("line1");//图例的名字lineSeries2->setColor(Qt::red);lineSeries2->setPen(QPen(Qt::red, 2, Qt::PenStyle::DashDotDotLine));lineSeries2->setName("line2");lineSeries1->setPointLabelsVisible(true);lineSeries2->setPointLabelsVisible(true);//创建QChartQChart *chart = new QChart();chart->setTitle("Line Chart");//设置标题chart->addSeries(lineSeries1); //将折线系列添加到图标chart->addSeries(lineSeries2);//修改图例QLegend * legned = chart->legend();legned->setAlignment(Qt::AlignBottom);legned->setBackgroundVisible(false);legned->setMarkerShape(QLegend::MarkerShape::MarkerShapeRectangle);//创建X轴QValueAxis *axisX = new QValueAxis();axisX->setLabelFormat("%.0f");//设置标签格式axisX->setTitleText("X轴");axisX->setRange(0, 20);//设置范围axisX->setTickCount(21); //设置tickCount 即标签数量为21 0-21axisX->setGridLineVisible(false);//设置主刻度线不可见//axisX->hide();//隐藏刻度线 X周 0-10 不可见//创建Y轴QValueAxis *axisY = new QValueAxis();axisY->setTitleText("Y轴");axisY->setRange(0, 100);//设置范围axisY->setTickCount(11); //设置tickCount 即标签数量为11 100进行10等分 11个标签 //关联轴到Chart和QSerieschart->addAxis(axisX, Qt::AlignBottom);chart->addAxis(axisY, Qt::AlignLeft);lineSeries1->attachAxis(axisX);lineSeries1->attachAxis(axisY);lineSeries2->attachAxis(axisX);lineSeries2->attachAxis(axisY);//创建QChartView 对象显示图表QChartView * chartview = new QChartView(chart, ui.tab_3);chartview->setRenderHint(QPainter::Antialiasing);//抗锯齿//显示窗口、QMainWindow *win = new QMainWindow(ui.tab_3);win->setCentralWidget(chartview);win->resize(800, 600);win->setWindowTitle("Test_折线图");win->show();});
4.3 散点图
connect(ui.pushButton_sactter, &QPushButton::clicked, this, [=]() {QScatterSeries *scatterSeries = new QScatterSeries();// 添加散点数据qsrand(QTime::currentTime().second());//设置随机数生成器的种子for (int i = 0; i <= 20; i++) {qreal x = i;qreal y = qrand() % 100;scatterSeries->append(x, y);qDebug() << QPoint(x, y);//测试输出}// 创建 QChart 对象QChart *chart = new QChart();chart->setTitle("Scatter Chart"); // 设置标题chart->addSeries(scatterSeries); // 将散点系列添加到图表中// 创建 QValueAxis 对象作为 X 轴QValueAxis *axisX = new QValueAxis();axisX->setLabelFormat("%.0f"); // 设置标签格式axisX->setTitleText("X Axis");axisX->setRange(0, 20); // 设置范围axisX->setTickCount(21); // 设置 tickCount,即标签数量为 21chart->addAxis(axisX, Qt::AlignBottom); // 将 X 轴添加到图表中scatterSeries->attachAxis(axisX); // 散点系列关联 X 轴// 创建 QValueAxis 对象作为 Y 轴QValueAxis *axisY = new QValueAxis();axisY->setTitleText("Y Axis");axisY->setRange(0, 100); // 设置范围axisY->setTickCount(11); // 设置 tickCount,即标签数量为 11chart->addAxis(axisY, Qt::AlignLeft); // 将 Y 轴添加到图表中scatterSeries->attachAxis(axisY); // 散点系列关联 Y 轴// 创建 QChartView 对象显示图表QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing); // 抗锯齿QMainWindow *win = new QMainWindow(ui.tab_3);win->setCentralWidget(chartView);win->resize(800, 600);win->setWindowTitle("Test_饼状图");win->show();});
4.4 柱状图
connect(ui.pushButton_bar, &QPushButton::clicked, this, [=]() {//创建柱状形集对象QBarSet* set1 = new QBarSet("语文");QBarSet* set2 = new QBarSet("数学");QBarSet* set3 = new QBarSet("英语");*set1 << 130 << 120 << 110 << 97 << 88;set2->append({ 148,128,137,98,88 }); set3->append(123);set3->append(86);set3->append(98);set3->append(68);set3->append(99);set1->setLabelColor(Qt::red);set2->setLabelColor(Qt::green);set3->setLabelColor(Qt::blue);//QBarSet封装为QStackedBarSeries //QBarSet类型封装成QStackedBarSeries类型,是因为chart->append不能接收QBarSet的类型。QStackedBarSeries *bar1 = new QStackedBarSeries();bar1->append(set1);QStackedBarSeries *bar2 = new QStackedBarSeries();bar2->append(set2);QStackedBarSeries *bar3 = new QStackedBarSeries();bar3->append(set3);//QChartQChart* chart = new QChart();chart->addSeries(bar1);chart->addSeries(bar2);chart->addSeries(bar3);//创建QChartView 对象显示图表QChartView * chartview = new QChartView(chart, ui.tab_3);//创建X轴QBarCategoryAxis *axisX = new QBarCategoryAxis();QStringList list = { "小张","王五","晓明" ,"小红" ,"小绿" };axisX->append(list);axisX->setTitleText("姓名");axisX->setGridLineVisible(false);//创建Y轴QValueAxis *axisY = new QValueAxis();axisY->setTitleText("成绩");axisY->setRange(0, 150);//设置范围axisY->setTickCount(6); //设置tickCount 即标签数量为6 150进行5等分 6个标签 //设定坐标轴与数据对应chart->setAxisX(axisX, bar1);chart->setAxisX(axisX, bar2);chart->setAxisX(axisX, bar3);chart->setAxisY(axisY, bar1);chart->setAxisY(axisY, bar2);chart->setAxisY(axisY, bar3);//显示窗口、QMainWindow *win = new QMainWindow(ui.tab_3);win->setCentralWidget(chartview);win->resize(800, 600);win->setWindowTitle("Test_柱状图");win->show();});
4.5 饼状图
该代码中实践饼状图的基本绘制方法和图形属性的设置,设置opengl加速绘制以及chartview的grap抓取保存图片的方法对比QScreen的截屏效果。
connect(ui.pushButton_bingzhuang, &QPushButton::clicked, this, [=]() {QChartView*view = new QChartView(ui.tab_3);view->setRenderHint(QPainter::Antialiasing);QChart* chart = new QChart();chart->setTitle("成绩分布");view->setChart(chart);//设置饼图QPieSeries*pie = new QPieSeries;QPieSlice* s1 = pie->append("60分以下",20);QPieSlice* s2 = pie->append("60-80分", 30);QPieSlice* s3 = pie->append("60-90分", 30);QPieSlice* s4 = pie->append("90-100分", 20);s4->setExploded(true);//设置此分块突出pie->setHoleSize(0.4);// 设置饼状图中间洞大小 0.0-1.0之间pie->setLabelsPosition(QPieSlice::LabelOutside);//设置slice label的位置pie->setLabelsVisible(true);pie->setUseOpenGL(true);//使用OpenGl来画 GPU 并行不卡顿 QAbstractSeries方法//字体QFont font = qApp->font();font.setBold(true);font.setPointSize(20);chart->setTitleFont(font);//图例chart->legend()->setAlignment(Qt::AlignLeft);//设置各个模块颜色s1->setColor(Qt::red);s2->setColor(Qt::blue);s3->setColor(Qt::green);s4->setColor(Qt::yellow);chart->addSeries(pie);//设置主题 默认lightchart->setTheme(QChart::ChartTheme::ChartThemeBlueCerulean);//显示窗口、QMainWindow *win = new QMainWindow(ui.tab_3);win->setCentralWidget(view);win->resize(800, 600);win->setWindowTitle("Test_饼状图");win->show();//保存图片 ChartView 自有方式QPixmap p = view->grab();//QImage image = p.toImage();image.save("chart.png");//截屏 通过winIDQScreen *screen=QGuiApplication::primaryScreen();//保留应用程序的主屏幕(最初显示QWindows的屏幕)QPixmap pic = screen->grabWindow(view->winId());QImage image2 = pic.toImage();image2.save("chartPie.png");});
五、在实际项目中的应用
QCharts在实际的项目中可以很好的可视化数据,以多种形式统计可视化程序每日产生的数据,从而多维度的评估项目的运行状况和运维效果等。
如在交通的停车场场景中对于不同时间尺度可以使用折线图统计车流量(对于商场等常有活动的车场运维更有意义),通过饼状图统计不同支付方式的占比(对于企事业单位学校等固定卡、储值卡、临时卡、ETC等统计更有意义)、通过统计车厂外围不同设备的异常更好的评估运行的稳定性、通过统计每日相机的识别平均置信度评估相机等架设合理性等等。
业务的评估对于不同场景下的运营状况有直观的反馈,设备 异常、识别率、不同级别的错误报告、内存使用等等的统计对于无人车厂运行的稳定应也有直观的反馈。
相关文章:
QChart数据可视化
目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …...
离线安装 Docker-IO:详细步骤指南
离线安装 Docker-IO:详细步骤指南 一、准备工作1.1 下载 Docker 离线安装包1.2 准备安装环境1.3 配置防火墙和 SELinux(可选)二、上传和解压离线安装包2.1 上传安装包2.2 解压安装包三、安装 Docker-IO3.1 移动 Docker 文件到系统目录3.2 配置 Docker 服务3.3 赋予服务文件执…...
梯度爆炸与消失
梯度爆炸和梯度消失 一、概念解析 (一)梯度爆炸 定义 在深度神经网络训练的反向传播过程中,梯度爆炸是指梯度的值过大的现象。这会使模型的参数更新出现异常。 产生原因 深层网络与链式法则:深度神经网络按链式法则计算某层权重…...
动捕 动作捕捉学习笔记
2024.11.28 实时动作捕捉 ThreeDPoseTracker VRMLiveViewer 实现虚拟主播跳舞自由_哔哩哔哩_bilibili blender 手工操作,不能渲染到原视频 【快速有效】三分钟学会,通过blender把网上视频武术动作捕捉绑定到3D角色上,需要使用Auto-rig Pro(ARP…...
spark3.x之后时间格式数据偶发报错org.apache.spark.SparkUpgradeException
3.x之后如果你去处理2.x生成的时间字符串数据,很容易遇到一个问题 Error operating ExecuteStatement: org.apache.spark.SparkUpgradeException: You may get a different result due to the upgrading of Spark 3.0: Fail to parse 20200725__cb90fcc3_8006_46…...
计算机网络(二)
ip地址:11010010:01011110:00100100:00010100 子网掩码:11111111:11111111:11111111:11000000 and :11010010:01011110:00100100:00000000 210.94.36.0的下一站为R1 因为255为11111111 192为ÿ…...
如何在Spark中使用gbdt模型分布式预测
这目录 1 训练gbdt模型2 第三方包python环境打包3 Spark中使用gbdt模型3.1 spark配置文件3.2 主函数main.py 4 spark任务提交 1 训练gbdt模型 我们可以基于lightgbm快速的训练一个gbdt模型,训练相对比较简单,只要把训练样本处理好,几行代码可…...
llamaindex实战-ChatEngine-ReAct Agent模式
概述 ReAct 是一种基于Agent的聊天模式,构建在数据查询引擎之上。对于每次聊天交互,代理都会进入一个 ReAct 循环: 首先决定是否使用查询引擎工具并提出适当的输入 (可选)使用查询引擎工具并观察其输出 决定是否重复…...
关于音频 DSP 的接口种类以及其应用场景介绍
在音频系统中,DSP(数字信号处理器)扮演着重要角色,通常会通过不同的接口与音频系统中的其他组件(如功放、扬声器、音频源等)进行连接。以汽车应用场景为例,以下是一些常见的接口类型分类及其介绍…...
DLL中的inline static成员变量:Windows开发中的常见陷阱
在Windows平台进行C开发时,DLL(动态链接库)是一个非常重要的概念。它让我们能够实现代码的模块化和动态加载,提高了程序的灵活性和维护性。然而,当我们在DLL中使用C17引入的inline static成员变量时,可能会…...
7. 现代卷积神经网络
文章目录 7.1. 深度卷积神经网络(AlexNet)7.2. 使用块的网络(VGG)7.3. 网络中的网络(NiN)7.4. 含并行连结的网络(GoogLeNet)7.5. 批量规范化7.5.1. 训练深层网络7.5.2. 批量规范化层…...
软件测试丨Pytest生命周期与数据驱动
Pytest的生命周期概述 Pytest 是一个强大的测试框架,提供了丰富的特性来简化测试执行。它的生命周期包括多个阶段,涉及从准备测试、执行测试到报告结果的完整流程。因此,理解Pytest的生命周期将帮助我们更好地设计和管理测试用例。 开始阶段…...
Python 网页控制自动化 getEdgeDriver
透过python 使用 edge 执行自动化时,原来的代码 出现报错了 执行报错啦:message info 如下显示 HTTPSConnectionPool(hostmsedgedriver.azureedge.net, port443): Max retries exceeded with url: /130.0.2849/edgedriver_win64.zip (Caused by NewConn…...
白鹿 Hands-on:消除冷启动——基于 Amazon Lambda SnapStart 轻松打造 Serverless Web 应用(二)
文章目录 前言一、前文回顾二、在 Lambda 上运行2.1、查看 Amazon SAM template2.2、编译和部署到 Amazon Lambda2.3、功能测试与验证 三、对比 Snapstart 效果四、资源清理五、实验总结总结 前言 在这个环节中,我们将延续《白鹿 Hands-on:消除冷启动——…...
pandas read_csv读取中文内容文件报错UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte
先用如下代码检查编码格式 import chardet# 检测文件编码 with open("data.csv", "rb") as f:result chardet.detect(f.read())print(result["encoding"]) # 打印检测到的编码我检查后我的文件编码格式是ISO-8859-1,因此读取文件时…...
LoRA微调原理 代码实践
LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大语言模型)的流行技术,最初由来自微软的研究人员在论文《 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 》中提出。不同于其他技术,LoRA 不是调整…...
数据结构--树二叉树顺序结构存储的二叉树(堆)
前言 前面我们学习了顺序表、链表、栈和队列,这些都是线性的数据结构。今天我们要来学习一种非线性的数据结构——树。 树的概念及结构 树的概念 树是一种非线性的数据结构,是由n(n≥0)个有效结点组成的一个具有层次关系的集合…...
mongodb shard 分片集群基础概念
目录 一、shard 集群 二、Config Server 1、config.shards 2、config.database 3、config.collection 4、config.chunks 5、config.settings 6、其他 三、shard机制 1、Primary Shard 2、Shard Key 2.1 范围分片 2.2 哈希分片 2.3 Shard Key重定义 2.4 版本约束…...
Streamlit 应用从本地部署到服务器并进行访问
目录 1 部署 Streamlit 应用到服务器2 配置服务器允许远程访问3 使用反向代理4 使用 HTTPS5 总结 1 部署 Streamlit 应用到服务器 1 选择一个服务器平台 首先,你需要选择一个服务器平台来部署你的 Streamlit 应用。常见的选择包括: 云服务器:…...
大数据新视界 -- 大数据大厂之 Hive 数据压缩:优化存储与传输的关键(上)(19/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
Java开发中对List<Map<String, Object>>集合去重并按大小拆分子列表
Java开发中对List< Map< String, Object > >集合去重并按大小拆分子列表 一、使用场景二、实现步骤三、相关知识四、代码示例 一、使用场景 在处理大量List<Map<String, Object>>集合的数据时,为确保数据的唯一性,需要先根据Ma…...
vue3项目搭建-6-axios 基础配置
axios 基础配置 安装 axios npm install axios 创建 axios 实例,配置基地址,配置拦截器,目录:utils/http.js 基地址:在每次访问时,自动作为相对路径的根 // axios 基础封装 import axios from "axios";…...
git 学习笔记
目录 一、git 前期准备 1、托管平台的账号注册(以gitee码云为demo) 2、本地个人电脑配置 (1)配置用户属性 (2)配置SSH密钥 二、git 工作流程图 三、git 提交命令 (1)git ini…...
Y20030019 基于java+jsp+mysql的微信小程序校园二手交易平台的设计与实现 源代码 文档
旅游度假区微信小程序 1.摘要2. 系统开发的目的和意义3.系统功能4.界面展示5.源码获取 1.摘要 随着移动互联网的发展,微信小程序已经成为人们生活中不可或缺的一部分。微信小程序的优点在于其快速、轻量、易用,用户无需下载即可使用,节省了用…...
Cookie跨域
跨域:跨域名(IP) 跨域的目的是共享Cookie。 session操作http协议,每次既要request,也要response,cookie在创建的时候会产生一个字符串然后随着response返回。 全网站的各个页面都会带着登陆的时候的cookie …...
Mybatis:CRUD数据操作之删除一行数据
Mybatis基础环境准备请看:Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之单条删除数据 当用户点击了该按钮,就会将改行数据删除掉。那我们就需要思考,这种删除是根据什么进行删除呢?是通过主键id删除,因为id是…...
【机器学习】CatBoost 模型实践:回归与分类的全流程解析
一. 引言 本篇博客首发于掘金 https://juejin.cn/post/7441027173430018067。 PS:转载自己的文章也算原创吧。 在机器学习领域,CatBoost 是一款强大的梯度提升框架,特别适合处理带有类别特征的数据。本篇博客以脱敏后的保险数据集为例&#x…...
MySQL中如何减少回表
在MySQL中,回表是指在使用非聚集索引进行查询时,如果需要获取的数据不在索引页中,就需要根据索引页中的指针返回到数据表中查找实际数据行的过程。这个过程会增加额外的磁盘I/O操作,降低查询性能,特别是在查询大量数据…...
10. 函数
一、什么是函数 函数也是对象,对象是内存中专门用来存储数据的一块区域。函数可以用来保存一些可执行代码的,并且可以在需要时,对这些语句进行多次调用。 二、创建函数 创建函数也称为定义函数。我们可以使用 def 关键字来定义函数ÿ…...
计算机网络:数据链路层(二)
网课资源: 湖科大教书匠 1、网络适配器和MAC地址 习题1 1 以下哪个地址是广播MAC地址 A. 00-00-00-00-00-00 B. AB-CD-EF-11-22-33 C. FF-FF-FF-FF-FF-FF D. 29-29-29-29-29-29 2 以下哪个地址是多播MAC地址 A. 00-00-00-00-00-00 B. A9-8B-7C-6D-5E-4F C. FF-FF-…...
一万台服务器用saltstack还是ansible?
一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器,取决于几个关键因素,如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析,帮助你做出决策: SaltStack&…...
设计模式学习之——观察者模式
观察者模式是一种行为型设计模式,它用于在对象之间建立一对多的依赖关系。 一、定义与角色 定义: 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察…...
服务器实现ssh证书登录
1.生成公钥和私钥 ssh-keygen -t rsa 提示默认生成位置为/root/.ssh/id_rsa ,直接回车。(也可以自己修改) 提示输入证书的密码,可以留空,建议输入,如果输入了,则需要再次确认,记住这个证书密码(证书再加…...
python基础知识精讲
Python基础知识精讲 Python是一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。它支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。以下是Python基础知识的详细讲解。 1. Python简介 Python由Guido van Rossum创建&#x…...
分页查询日期格式不对
方式一:在属性上加入注解,对日期进行格式化 方式二:在 WebMvcConfiguration 中扩展Spring MVC的消息转换器,统一对日期类型进行格式化处理 /*** 统一转换处理扩展spring mvc* 后端返回前端的进行统一转化处理* param converters*/Overrideprotected voi…...
Windsurf可以上传图片开发UI了
背景 曾经羡慕Cursor的“画图”开发功能,这不Windsurf安排上了。 Upload Images to Cascade Cascade now supports uploading images on premium models Ask Cascade to build or tweak UI from on image upload New keybindings Keybindings to navigate betwe…...
工作坊报名|使用 TEN 与 Azure,探索你的多模态交互新场景
GPT-4o Realtime API 发布,语音 AI 技术正在进入一场新的爆发。语音AI技术的实时语音和视觉互动能力将为我们带来更多全新创意和应用场景。 实时音频交互: 允许应用程序实时接收并响应语音和文本输入。自然语音生成: 减少 AI 技术生成的语音…...
Java 虚拟机:承载 Java 生态的神奇魔盒
在软件开发的世界里,Java 虚拟机(JVM)就像一位智慧的管家,默默守护着 Java 生态系统的运行。它不仅让 Java 实现了"一次编写,到处运行"的梦想,更是成为了多种编程语言的运行平台。让我们一起走进…...
Linux VLAN 实现原理技术笔记
一、引言 VLAN(虚拟局域网)在整车网络架构中起着至关重要的作用,它能够在物理网络基础设施上创建逻辑隔离的网络区域,提高车内网络的安全性、灵活性和性能。Linux 内核通过一系列复杂的机制实现了 VLAN 功能,本技术笔记…...
【Git】:分支管理
目录 理解分支 创建分支 切换分支 合并分支 删除分支 合并冲突 分支管理策略 快进合并 正常合并 bug 分支 总结 理解分支 在版本控制系统中,分支是一条独立的开发线路。它允许开发者从一个主要的代码基线(例如master分支)分离出来…...
Java中的运算符“instanceof“详解
在Java中,instanceof运算符用于检查一个对象是否是某个特定类的实例,或者是否实现了某个特定接口。它返回一个布尔值(true或false),用于在运行时进行类型检查。这在处理多态性时尤其有用,可以帮助我们确定对…...
Profinet转Modbus TCP西门子SINAMICS G120变频器与施耐德M580通讯案例
一. 案例背景 在复杂的工业自动化场景中,企业常常会采用不同品牌的设备来构建生产系统。西门子SINAMICS G120变频器以其高性能、高精度的速度和转矩控制功能,在电机驱动领域应用广泛。施耐德M580可编程逻辑控制器则以强大的逻辑控制和数据处理能力著称&a…...
机器学习实战笔记39-43树模型基础
目前最常用的是CART树: 评价标准:每次划分后子节点的纯度(即是否标签都为0/1),分为信息熵、基尼系数(越小则纯度越高)和分类误差 找划分节点的方法:CART树无需区分连续和离散变量&am…...
`uni.setClipboardData` 是 uni-app 提供的一个 API 设置系统剪贴板的内容
uni.setClipboardData是uni-app提供的一个API,用于设置系统剪贴板的内容。 使用说明: 使用此API可以将指定的文本内容复制到系统剪贴板,使用户能够在其他应用或页面中粘贴这些内容。 uni.setClipboardData({data: , // 需要复制的内容 suc…...
Android opengl 绘制矩形,宽高相同,不能显示为正方形,是怎么回事
在Android上使用OpenGL绘制矩形(或尝试显示为正方形)时,如果结果显示为不是正方形,可能有几个原因。以下是一些常见的因素及解决方法: 视口(Viewport)设置不当: OpenGL的视口定义了…...
网络安全开源组件
本文只是针对开源项目进行收集,如果后期在工作中碰到其他开源项目将进行更新。欢迎大家在评论区留言,您在工作碰到的开源项目。 祝您工作顺利,鹏程万里! 一、FW(防火墙) 1.1 pfSense pfSense项目是一个免费…...
【C++初阶】第5课—模版初阶
文章目录 1. 函数模版1.1 函数模版格式1.2 函数模版原理1.3 函数模版的实例化1.4 模版参数的匹配原则 2. 类模版 1. 函数模版 在讲函数模版之前先看一个例子 为了实现泛型编程,C提出了函数模版的概念函数模版与类型无关,在使用时被参数化,根据…...
【力扣热题100】[Java版] 刷题笔记-3. 无重复字符的最长子串
题目:3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 解题思路 根据题目,只需要返回无重复字符串的最长子串的长度,所以我们不需要知道知道字符串内容是什么,在整个字符串 s 中&…...
无人机数据处理系统:原理与核心系统
一、数据处理系统的运行原理 数据获取:无人机在飞行过程中,通过搭载的传感器(如相机、激光雷达等)采集到各种类型的数据,例如图像、点云等。这些数据是后续处理和分析的基础。 数据传输:采集到的数据会通…...
Hadoop分布式文件系统(二)
目录 1. 引言1. Hadoop文件操作命令2. 部分常用的Hadoop FS Shell命令2.1 ls列出文件2.2 mkdir创建目录2.3 put上传文件2.4 cat查看文件2.5 get复制文件2.6 rm删除文件 3. Hadoop系统管理命令4. HDFS Java API 示例参考 1. 引言 大多数HDFS Shell命令的行为和对应的Unix Shell命…...