当前位置: 首页 > news >正文

基于QGIS的二次开发(四):矢量编辑与属性表操作

一、实验目的

本次实验续接上一次的实验内容,旨在通过设计与开发地理信息系统的过程,加深学生对地理信息系统的理解,并掌握相关的设计与开发技能,包括熟悉地理信息系统的设计与开发流程,加强对 MVC 软件设计模式的理解与应用,最后总结并分享实验过程中的经验与心得,具体实验目的如下:

  1. 实现矢量编辑相关功能:设计并实现矢量编辑界面,包括开始编辑、选中要素、删除要素等功能,开发矢量编辑模块,实现添加面矢量的功能,并能够处理多边形要素的绘制和属性设置;
  2. 实现属性表操作相关功能:设计并实现属性表操作界面,包括查询要素、添加字段和删除字段等功能,加强对 MVC 软件设计模式的理解与应用,确保属性表操作与数据模型的分离。

二、实验内容

  • 矢量编辑-选中/删除要素
  • 矢量编辑-添加面矢量
  • 属性表操作

三、实验过程

3.1 矢量编辑-选中/删除要素

在上一实验中我们已经实现了地图画布状态栏的设置与地图属性表的显示,接下来我们将进入矢量编辑的部分,矢量编辑通常涉及到添加、删除和修改地图中的矢量要素功能,这些功能虽然听起来非常复杂,但其具体的实现思路与流程其实与我们之前实验的内容大同小异,因此首先我们在qgisUtils包下创建一个vectoredit.py文件用以管理矢量编辑功能。

3.1.1 添加界面控件

依据我们界面—>界面代码—>逻辑代码的二次开发思路,我们需要首先在Qt Designer中设计界面,也就是添加QAction如下图所示,具体包括开始编辑、选中要素、删除要素与添加面矢量四项,也就是我们希望在矢量编辑中具体实现的四项子功能:

需要特别注意的是:一定要在属性编辑器中勾选checkable,表示属性是否具有可勾选的状态,否则我们将无法直接通过点击复选框来改变该属性的状态。

3.1.2 实现开始编辑功能

参照主流的ArcGIS软件的矢量编辑功能实现的逻辑,首先我们需要在编辑器中设置一个“开始编辑”选项。为实现该功能,我们首先设置layerClicked函数,它用于检查当前选择的图层是否可编辑并更改actionEditshp 动作的可用性:

 而actionEditShpTriggered函数是一个响应槽函数,用于响应开始编辑的动作被触发的事件,具体包括开始与保存编辑内容,实现该功能后我们即可编辑修改矢量图层的属性表。

3.1.3 实现选中要素功能

在实现“开始编辑”功能后,我们就可以正式进入具体的矢量编辑功能的实现步骤中来了,首先是最简单也是最基础的“选中要素”功能,我们继续在vectoredit.py文件中编写代码如下所示,函数selectToolIdentified用于根据用户点击要素的操作来更新图层的要素选择状态,并显示在地图上:

函数actionSelectFeatureTriggered是一个响应槽函数,主要用于响应名为“选中要素”的动作被触发的事件,包括设置地图工具、设置目标图层等,实现该功能后,在地图上我们即可单击选中/取消选中矢量图层中的要素。

3.1.4 实现删除要素功能

接下来我们来实现“删除要素”功能,该功能的实现与上一功能类似较为简单,代码如下图所示,actionDeleteFeatureTriggered函数是一个响应槽函数,它的主要内容为通过调用deleteSelectedFeatures()方法来删除选中的要素,实现该功能后在地图上选择要素再点击“DeleteFeature”选项即可删除指定要素:

3.1.5 绑定响应槽函数

通过代码实现了如上四个工具后,我们还需要将我们创建的响应槽函数与对应的QAction进行绑定,绑定响应槽函数需要回到我们继承主窗体的Ui_frm_main.py文件中,在connectFunc函数中添加代码如下所示:

除此之外,不要忘了在__init__函数中实例化我们的矢量编辑对象:

3.1.6 整合并展示结果

 最后我们将上述代码进行整合,并运行main文件验证我们的结果如下所示:

3.2 矢量编辑-添加面矢量

上述的实验内容中,我们只是完成了矢量编辑中最基础的几个功能,但从上述功能的实现过程中我们不难总结得出矢量编辑相关功能实现的总体思路,因此接下来我们将尝试一个较复杂的功能——添加面矢量,首先我们在qgisUtils包下创建一个editpolygon.py文件用于专门管理添加面矢量工具的方法。

3.2.1 创建属性编写窗口

依据我们界面—>界面代码—>逻辑代码的二次开发思路,我们知道在右键勾画完矢量后,若拓扑逻辑无错误,则会自动弹出要素属性的编写窗口,因此我们需要首先在Qt Designer中设计一个inputAttrWindow界面如下左图所示:

3.2.2 继承属性编写窗口

将上述的.ui文件转.py文件后,我们需要在ui包中创建一个editwindow.py文件用以继承属性编写的窗口并进行相应的逻辑代码的编写,其中的主要方法为addFeature函数,该函数首先遍历获得了所有字段的名称,并利用QLineEdit对象存储新增的字段值,实现了我们通过属性编写窗口添加要素属性的功能:

3.2.3 绘制面矢量方法

界面设计与继承界面代码设计完成后,我们进入具体功能的实现部分,在editpolygon.py中输入代码如下所示,该代码中canvasPressEvent函数用于处理鼠标在地图画布上的按下事件canvasMoveEvent函数用于处理鼠标在地图画布上的移动事件show_polygon函数通过self.rubberBand对象将多边形以橡皮筋的形式显示在地图上,polygon函数根据绘制的点列表self.points构建了一个多边形几何对象

3.2.4 添加要素属性方法

成功创建多边形几何要素后,我们需要利用如下代码为这个新增的多边形几何要素添加属性,addFeature方法连接了我们在继承窗体类中创建的inputAttrWindowClass类,用于用户输入新要素的属性值addFeatureByDict方法则负责将属性值设置到属性表对应的字段中,并将新要素添加到我们的编辑图层上:

3.2.5 创建并绑定响应槽函数

上述内容我们只是完成了“添加面矢量”的具体功能实现代码,为了将其与我们主界面进行关联,我们首先需要在vector.py文件的VectorLayerEditor类下创建响应槽函数actionPolygonTriggered如下图所示:

然后回到Ui_frm_main.py文件下的connect方法中绑定响应槽函数:

3.2.6 整合并展示结果

最后我们将上述代码进行整合,并运行main文件验证我们的结果如下所示:

3.3 属性表操作

以上的内容我们已经完成了实验课上的基本内容,为了进一步巩固拓展自己的二次开发能力与知识,结合理论课的项目要求,因为查询功能是最为常见与普遍的功能需要求,我决定在已有代码的基础上实现一系列的属性表操作功能,在上一实验课内容中我们已经实现了打开属性表操作,因此我们接下来的操作都将在attributedialog.py文件中进行。

3.3.1 添加界面控件

在上一实验课内容中,我们打开的属性表对话框及其相关设置并没有在Qt Designer中设计而是直接在代码中完成的,因此我们添加相关控件也直接利用QGIS自带的类来完成,添加的按钮具体包括:查询文本框、查询按钮、下拉框(显示所有图层/仅显示所选图层)、添加字段与删除字段五个,得到的界面结果如下右图所示:

3.3.2 实现查询要素功能

上一步骤(3.3.1)添加界面控件其实相当于我们已经“射好了箭”,接下来我们就需要针对这些射出的箭一个一个的去画“靶”以完成这些功能,首先是查询要素功能,runQuery函数通过文本框接受一个符合SQL语言的查询表达式,利用getFeatures方法获取图层中符合条件的要素:

updateTableView函数负责检查下拉框中的当前选择,当下拉框中的选项为“仅显示选中要素”时,利用setSubsetString方法创建一个图层子集,使只有符合子集条件(即我们需要查询的要素)的要素才会在我们的地图与属性表视图中显示。

3.3.3 实现添加字段功能

添加字段功能相比上一功能较为简单,addField函数首先检查编辑功能是否打开,利用 QgsVectorLayer中的addAttributes方法向属性表中新增一个字段,默认名称为new_field:

3.3.4 实现删除字段功能

由于实现删除字段这一功能之前,我们首先需要输入删除字段的具体名称,因此showDeleteFieldInputDialog函数不仅检查了编辑功能是否打开,同时构建了一个对话框用以记录用户输入的字段名,deleteField函数则利用deleteAttributes方法在属性表中删除该字段,二者共同作用实现了删除字段功能:

3.3.5 绑定响应槽函数

上述内容我们只是完成了“属性表操作”中具体功能的实现代码,为了将其与我们的属性表界面进行关联,我们需要将上述这些方法函数与对应的界面控件相绑定

3.3.6 整合并展示结果

最后我们将上述代码进行整合,并运行main文件验证我们的结果如下所示:

四、最终成果展示

如上所示的所有内容以及过去三次实验报告中的结果,即我们实验课的最终成果,最终界面及其功能的实现不方便在文档中展示,因此将所有代码文件汇总如下,共含ui、design等五个代码包,各个代码文件间的逻辑将在后续进行更为详细的梳理与总结:

五、实验总结与心得

5.1 MVC设计模式下开发流程总结

至此我们地理信息系统设计与开发综合实验课程也是迎来了尾声,在第一次与第二次的实验报告中我结合自身理解总结了二次开发中的代码编写思路,在第三次实验报告中我阐述了自己对MVC软件设计模式理解,因此在最后一次实验报告中,结合我们所有实验的内容,我将MVC设计模式下的开发流程总结如下:

  1. 明确需求:确定系统的功能需求,包括用户交互需求、数据处理需求、界面布局方式等等,用以确定后续系统的模型、视图与控制器;
  2. 设计模型:定义系统中的数据处理逻辑,包括地图数据该怎么读取?地图属性数据该从哪里获得?等等,类似于功能“具体实现”的部分;
  3. 设计视图:设计系统的用户界面,在此次实验课中我们使用Qt Designer工具创建了众多界面,包括地图显示主界面,属性表界面等等;
  4. 设计控制器:接收用户发出的信号,并调用模型层的业务逻辑方法,最终实现具体功能,即我们在实验中经常使用到的槽函数
  5. 实现MVC交互:通过控制器,将视图与模型进行连接,即绑定响应槽函数
  6. 测试与调试:最后对系统进行全面的测试以验证其是否能满足我们的需求。

综上所述,遵循MVC设计模式的开发流程,可以有效地实现系统的数据处理、用户界面与控制逻辑的分离(即通过控制器实现了模型和视图之间的解耦),在我看来这也是MVC设计模式的独特之处,通过这几次实验课的接触与学习,我充分感受到了在该模式下进行地理信息系统开发的可维护性、可扩展性和可重用性,在这样一个过程中,我们不仅逐步完成了系统的设计与开发,同时大大提高了我们软件开发的能力和水平,为今后的学习工作开辟了新的宽广之路。

5.2 代码文件逻辑梳理总结

在上述内容中我们从较为抽象的角度总结了四次实验课内容的MVC设计模式下的开发流程,接下来我将以本次实验中的所有过程与内容为基础,从具体的代码编写角度总结梳理各个代码文件之间的逻辑,包括它们属于MVC模式中的什么部分,又起到什么样的作用:

  1. Design:负责管理界面代码,包含Qt Designer生成的.ui文件,以及由.ui文件转为的.py文件,这些文件定义了系统的用户界面布局和控件,由此我们可以判断其属于视图部分
  2. UI:负责管理继承窗体进行逻辑代码编写的代码,包含继承自Qt生成的界面类的.py文件,通常会定义各种槽函数来处理用户的操作,并将这些槽函数与界面控件的信号连接起来,属于控制器部分
  3. qgisUtils:负责管理实现主页面上具体功能的代码,例如菜单设置、矢量编辑与属性表操作等,这些功能的实现涉及到业务逻辑的处理和数据操作,由此我认为它属于模型部分
  4. data_control:负责管理获取外部数据的代码,将外部数据转换为系统内部的数据模型,并提供给其他部分进行处理和展示,属于模型部分
  5. res包:负责管理资源文件,这些资源文件可以被其他部分使用,例如用于界面的美化和增强用户体验,在此次实验中主要用于Qt Designer的控件图表设计,由此属于视图部分

5.3 实验心得

随着实验心得的落笔,我们四节实验课的学习和实践也落下了帷幕,虽然历时不长,但我却认为它是使我收获最为丰富的实验课之一,在老师与同学们的帮助下,我不仅克服了自己过去对代码编写的畏难心理,进一步掌握了Python语言,同时深入学习了解研究了一种软件的设计模式,深化了自己对地信专业未来道路的认识。

在理论与实践相结合的学习过程中,我深刻感受到了大学三年里所学知识的串联与融合,软件工程基础知识,Python语言知识,地理信息系统使用知识等等相辅相成,帮助我更好地理解和掌握了实验内容,一路上虽有困难与挑战,但收获与成就同样宝贵,感谢该实验课程为我们提供的宝贵的学习机会!

相关文章:

基于QGIS的二次开发(四):矢量编辑与属性表操作

一、实验目的 本次实验续接上一次的实验内容,旨在通过设计与开发地理信息系统的过程,加深学生对地理信息系统的理解,并掌握相关的设计与开发技能,包括熟悉地理信息系统的设计与开发流程,加强对 MVC 软件设计模式的理解…...

AI日报 - 2025年3月13日

🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Reka开源21B参数推理模型Flash 3,推出企业智能平台Nexus 🔬 模型采用RLOO方法结合模型与规则基础奖励,实现高效推理 ▎💼 商业动向 | Waymo在…...

lua C语言api学习1 编译第一个程序

本文开始进行lua C语言api的学习 1 简介 lua语言与C语言使用还是很紧密,以前我只是学习lua语言比较多,C语言api部分了解比较少,最近在学习tcc编译器的使用进一步学习一下lua C语言api的使用。 2 配置编译环境 首先需配置好tcc编译器环境[参考],再配置好lua源码路径[参考],新…...

【物联网-WIFI】

物联网-WIFI ■ ESP32-C3-模块简介■ ESP32-C3-■ ESP32-C3-■ WIFI-模组■ WIFI-■ WIFI- ■ ESP32-C3-模块简介 ■ ESP32-C3- ■ ESP32-C3- ■ WIFI-模组 ■ WIFI- ■ WIFI-...

在MATLAB中实现PID控制仿真

在MATLAB中实现PID控制仿真可以通过代码编程或Simulink图形化建模两种方式完成。以下是两种方法的详细操作步骤和示例: 方法1:使用MATLAB脚本编程(基于控制系统工具箱) 步骤1:定义被控对象的数学模型 假设被控对象是…...

C#实现本地Deepseek模型及其他模型的对话v1.4

前言 系 统:Window11 开发工具:Visual Studio 2022 相关技术:C# 、WPF .Net 8.0 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 新增根据聊天记录回复的功能。 优化了部分ViewModel&#xff…...

用sphinx-doc整理文档#2

上一篇博客:用sphinx-doc整理文档 回头看,上一篇博客已经是18年的事情了。最近我又开始维护起18年的项目了。最近策划同事提了一些需求。我又改进了一波,所以有本文。 sphinx支持导出pdf sphinx本身是支持导出pdf的,命令如下&am…...

DBeaver部分操作指南(数据库连接,构造ERD图,格式化SQL)

详细步骤指导如何使用DBeaver来连接到数据库: 步骤 1: 下载并安装 DBeaver 如果还没有安装DBeaver,请访问DBeaver官网下载适合操作系统的版本,并按照指示完成安装。 步骤 2: 启动 DBeaver 安装完成后,启动DBeaver应用程序。 …...

十种处理权重矩阵的方法及数学公式

1. 权重归一化(Weight Normalization) 目的:通过分离权重向量的范数和方向来加速训练。公式:对于权重向量 w \mathbf{w} w,归一化后的权重 w ′ \mathbf{w} w′ 为: w ′ w ∥ w ∥ \mathbf{w} \frac{…...

姚安娜新剧瘦了一圈,《仁心俱乐部》急诊医生顾诗宜在线上岗

《仁心俱乐部》在芒果 TV 播出,湖南卫视金鹰独播剧场也随之播出,这一剧集受到了不少观众的关注。姚安娜在剧中饰演的急诊科医生顾诗宜,她为患者检查身体时动作娴熟,与患者沟通时展现出的耐心和专注,都展现出很高的专业…...

postgresql源码安装

步骤 1: 安装依赖 在开始之前,请确保您的系统上安装了编译 PostgreSQL 所需的依赖包。使用以下命令安装必要的软件包: 对于 Debian/Ubuntu 系统: sudo apt update sudo apt install build-essential libreadline-dev zlib1g-dev flex biso…...

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料:B站【普中官方】51单片机手把手教学视频 开发资料下载链接:http://www.prechin.cn/gongsixinwen/208.html 单片机套装:普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…...

Java 集合框架:数据管理的强大工具

Java集合框架:数据管理的强大工具 目录 Java集合框架:数据管理的强大工具引言一、Set集合1. 定义与特点2. 常用实现类 - HashSet创建方式常用方法遍历方式 二、Map集合1. 定义与特点2. 常用实现类 - HashMap创建方式常用方法遍历方式 三、List集合1. 定义…...

AIM-T500绝缘监测仪:实时监测,确保IT系统绝缘安全-安科瑞 蒋静

在现代工业生产中,电力系统的稳定性和安全性至关重要。电力系统的绝缘状况直接关系到设备的正常运行和人员的安全。为了确保IT配电系统(不接地系统)的绝缘状况始终处于好的状态,安科瑞电气股份有限公司推出了AIM-T500绝缘监测仪&a…...

css3-学习

css 特性 选择器 基础选择器 标签选择器 ID 选择器 类选择器 CSS 的优先级是什么? !important > 内联样式(style“”) > ID 选择器 > 类选择器 属性选择器 伪类 > 标签选择器 伪元素选择器。 层级选择器 foo bar 后代选择器,元素的…...

neo4j图数据库

neo4j图数据库 学习neo4j图数据库的使用 文章目录 neo4j图数据库[toc]1-核心知识点2-思路整理3-参考网址4-上手实操1-安装neo4j-docker2-要学习CQL语句3-解决cmake问题1-可能的原因及解决办法1. cmake 未正确安装或者版本不兼容2. 依赖库缺失3. 环境变量配置问题4. 网络问题 2-…...

go下的Prototype学习笔记

本博文讲解prototype的学习笔记,内容包含了syntax、option go_package、message、service进行讲解,举例了常见写法。 文章目录 1.syntax 声明语法版本2.package 给当前的proto分配包名称3.option4.message4.1 切片数组4.2 map4.3 类型嵌套 5. 消息定义 …...

[高阶技术了解]WebRPC详解

“webrpc详解”,我需要根据我搜索到的资料来回答这个问题。首先,得弄清楚webrpc到底是什么。根据,Webrpc是一个模式驱动的后端服务开发工具,允许通过RIDL或JSON模式文件生成代码,支持多种语言如Go、TypeScript等。它类…...

地基注解@Controller和@RestController区别

前记:基础啊,区别点重点理解; 在Spring和Spring Boot框架中,Controller和RestController都用于处理HTTP请求,但它们在设计目的和用法上有显著区别。以下是它们的核心区别及示例说明: ​1. 核心区别 特性C…...

UI自动化:seldom框架和Selenium

以下是关于 seldom框架 和 Selenium 的对比解析及结合使用的详细说明,帮助理解二者的定位、功能差异和应用场景: 1. 核心定位 工具定位Selenium浏览器自动化工具库,提供直接操控浏览器的底层API(如点击、输入、获取元素等&#x…...

机器学习项目实战——信用评分与贷款风险评估(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域介绍 信用评分与贷款风险评估是金融领域中的一个重要应用场景。随着金融科技的快速发展,银行、信用卡公司、P2P…...

使用 OptiSLang 和 MotorCAD 构建一个强大的电机优化元模型

介绍 在本文中,我们将检查这些敏感性分析的结果,并构建一个健壮的元模型,作为优化过程的基础。 本文涵盖: 解释敏感性分析结果了解元模型及其在优化中的重要性构建和完善最佳预后模型 (MOP)使用预后系数…...

【科研绘图系列】python绘制分组点图(grouped dot plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据函数`generateRectBoxDF` 函数主要作用参数解释逻辑流程`nmfDotPlot` 函数主要作用参数解释逻辑流程画图1画图2画图3画图4介绍 【科研绘图系列】python绘制…...

【Android】adb shell基本使用教程

adb shell 是 Android Debug Bridge (ADB) 工具中的一个命令,用于在连接的 Android 设备或模拟器上执行 shell 命令。通过 adb shell,你可以直接与设备的 Linux 内核交互,执行各种操作。 基本用法 启动 adb shell: 在终端或命令提…...

257. 二叉树的所有路径(递归+回溯)

257. 二叉树的所有路径 力扣题目链接(opens new window) 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 思路:在叶子节点收割结果,如果不是叶子节点,则依次处理左右子树&a…...

C++和标准库速成(一)——HelloWorld和名称空间

目录 1. 引言1. 简单小程序"Hello World"1.1 模块导入1.2 预处理指令1.2.1 简介1.2.2 常用的预处理指令 1.3 main()函数1.4 输入输出流1.4.1 输出流1.4.2 转义字符1.4.3 输入流 2. 名称空间2.1 定义名称空间2.2 using指令2.3 嵌套名称空间2.4 名称空间别名 参考 1. 引…...

OpenHarmony 5.0 MP4封装的H265视频播放失败的解决方案

问题现象 OpenHarmony 5.0版本使用AVPlayer播放MP4封装格式的H.265(HEVC)编码格式的视频时解码失败导致播放失败 问题原因 OpenHarmony 5.0版本AVPlayer播放器使用histreamer引擎,因为 libav_codec_hevc_parser.z.so 动态库未开源导致从MP4封装中分离的HVCC格式的…...

索引-最左匹配

在数据库索引中&#xff0c;最左匹配原则确实在遇到某些范围查询时会停止向右匹配&#xff0c;但对于 >、<、BETWEEN 和前缀匹配的 LIKE&#xff0c;索引匹配可以继续使用后续列。以下是详细分析&#xff1a; 1. 最左匹配原则的核心规则 最左匹配原则要求查询条件从复合…...

感觉自己邮电部诗人

中心扩散 第二次做这道题&#xff0c;求回文子串最大长度的时候&#xff0c;计算写成了j-i1&#xff0c;看了15分钟才看发现哪里出了问题&#xff0c;感觉自己邮电部诗人&#xff0c;望周知。...

Java代理方式的详细介绍,包括代码示例、注释说明及其差异对比表格

Java代理方式 Java中的代理模式是一种结构型设计模式&#xff0c;用于在不修改原始类的情况下增强其功能。Java支持两种代理方式&#xff1a; 静态代理动态代理 JDK动态代理CGLIB动态代理 1. 静态代理 静态代理通过手动编写代理类实现&#xff0c;代理类和目标类实现相同的…...

接口对外安全交互新姿势

文章目录 1.前言2.姿势2.1 AES2.2 body参数签名及验签2.3使用sm2 加ip白名单 3.总结 1.前言 由于这久做了一个乐企数电开票的项目&#xff0c;已经上线了&#xff0c;真的是一言难尽&#xff0c;再回首已经是轻舟已过万重山&#xff0c;接口通过外网暴露给业务方使用&#xff0…...

Docker基础篇——Ubuntu下Docker安装

大家好我是木木&#xff0c;在当今快速发展的云计算与云原生时代&#xff0c;容器化技术蓬勃兴起&#xff0c;Docker 作为实现容器化的主流工具之一&#xff0c;为开发者和运维人员带来了极大的便捷 。下面我们一起进行Docker安装。 Docker的官方Ubuntu安装文档&#xff0c;如…...

《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》

在科技飞速发展的今天&#xff0c;量子计算与经典算法的融合成为了前沿领域的焦点。DeepSeek-M8的“量子神经网络混合架构”&#xff0c;宛如一把钥匙&#xff0c;开启了经典算法与量子计算协同推理的全新大门&#xff0c;为诸多复杂问题的解决提供了前所未有的思路。 量子计算…...

关于C/C++语言的初学者在哪刷题,怎么刷题

引言&#xff1a; 这篇博客主要是针对初学者关于怎么在网上刷题&#xff0c;以及在哪里刷题。 1.介绍平台&#xff08;在哪刷题&#xff09;&#xff1a; 1.牛客牛客网https://www.nowcoder.com/ &#xff1a;有许多面试题&#xff0c;也有许多供学习者练习的题 2.洛谷洛谷 …...

【redis】string类型相关操作:SET、GET、MSET、MGET、SETNX、SETEX、PSETEX

文章目录 二进制存储编码转换SET 和 GETSETGET MSET 和 MGETSETNX、SETEX 和 PSETEX Redis 所有的 key 都是字符串&#xff0c;value 的类型是存在差异的 二进制存储 Redis 中的字符串&#xff0c;直接就是按照二进制数据的方式存储的 不仅仅可以存储文本数据&#xff0c;还可…...

el-table中嵌套了el-form-item 导致的内容不垂直居中展示的问题

el-table中嵌套了el-form-item 导致的内容不垂直居中展示的问题 这个问题原先我一直没有找到问题的关键点&#xff0c;后来看了一篇文章得知由于el-form-item的margin导致的 下面的css类告诉我们。正常的表单校验margin就是20px&#xff0c;在el-table中的只有是校验失败的才会…...

LVCMOS(Low Voltage Complementary Metal-Oxide-Semiconductor)电平详解

一、LVCMOS电平的定义与核心特性 LVCMOS&#xff08;低压互补金属氧化物半导体&#xff09;是 CMOS技术的低电压版本&#xff0c;专为现代低功耗、高集成度芯片设计&#xff0c;支持 1.2V、1.8V、2.5V、3.3V 等多种电压等级。其通过优化晶体管结构和供电电压&#xff0c;显著降…...

计算机操作系统(一) 什么是操作系统

计算机操作系统&#xff08;一&#xff09; 什么是操作系统 前言一、什么是操作系统二、操作系统的作用三、推动操作系统发展的主要动力总结&#xff08;核心概念速记&#xff09;&#xff1a; 前言 当你打开电脑、点击应用、播放音乐时&#xff0c;是谁在背后默默协调这一切&…...

《用 python、MySQL 和 Chart.js 打造炫酷数据看板》实战案例笔记

今天&#xff0c;我们要构建一个数据看板系统。在这个过程中&#xff0c;我们会利用 MySQL 来存储数据&#xff0c;使用 Python 搭建后端 API&#xff0c;还会借助 Chart.js 在前端呈现各式各样的图表。 整个流程涵盖多个环节&#xff0c;首先要进行数据库表的设计&#xff0c…...

Android ANR 监控方法与事件分发耗时优化实战

一、ANR 监控方法 &#xff08;一&#xff09;系统日志分析 系统日志始终是查找 ANR 根源的重要依据。利用日志分析&#xff0c;不仅可以锁定 ANR 发生的精确时刻&#xff0c;还能追踪到主线程、关键函数调用的阻塞细节。 日志关键词检索&#xff1a;利用 ADB 命令&#xff…...

【蓝桥杯单片机】第十一届省赛

一、真题 二、创建工程 1.在C盘以外的盘新建文件夹&#xff0c;并在文件夹里面创建两个文件夹Driver 和Project 2.打开keil软件&#xff0c;在新建工程并选择刚刚建好的project文件夹&#xff0c;以准考证号命名 3.选择对应的芯片型号 4.选择否&#xff0c;即不创建启动文件 …...

【ES6】模块化

概述 模块功能主要有两个命令&#xff0c;export和import。 一个js文件就是一个模块。 参考视频 【一小时速通JavaScript模块化&#xff0c;涵盖CommonJS与ES6模块化-哔哩哔哩】 https://b23.tv/gZ1uK7V 导出成员 在正常变量、函数前加export关键字。 导入模块 在另一个…...

C++学习——顺序表(六)

文章目录 前言一、找到数组的中间位置二、有序数组中的单一元素三、杨辉三角&#xff08;Ⅱ&#xff09;四、超过阈值的最小操作数Ⅰ五、找出峰值六、统计已测试设备七、统计和小于目标的下标对数目1.单向遍历法2.双指针法&#xff08;时间复杂度小&#xff09; 八、计算K置位下…...

python迭代器生成器

迭代器生成器区别 通俗版概念 ​迭代器&#xff08;Iterator&#xff09;​ ​像“快递员送快递”​&#xff1a; 你有一个包裹清单&#xff08;比如Excel里的测试用例&#xff09;&#xff0c;快递员&#xff08;迭代器&#xff09;会按顺序一个一个送&#xff08;遍历&#x…...

Hive SQL 精进系列:字符串拼接的三种常用方式

Hive字符串拼接&#xff1a;三种常用方式深度剖析 目录 Hive字符串拼接&#xff1a;三种常用方式深度剖析引言一、简洁直观的||操作符1. 基础语法规则2. 丰富多样的示例展示3. 优势与局限分析 二、规范通用的CONCAT函数1. 全面的语法解析2. 生动的示例说明3. 优势与局限剖析 三…...

MATLAB—从入门到精通的第二天

在第一天的学习中&#xff0c;我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构&#xff08;嵌套 if、switch&#xff09;、循环类型 和 向量操作&#xff0c;帮助读者进一步掌握 MATLAB 的核心编程技能。 1. 条件语句进阶 1.1 嵌套…...

韦伯望远镜的拉格朗日点计算推导过程,包含MATLAB和python运动轨迹仿真代码

研究过程 起源与提出&#xff1a;1687 年牛顿提出 “三体问题”&#xff0c;旨在研究三个可视为质点的天体在相互之间万有引力作用下的运动规律&#xff0c;但因运动方程过于复杂&#xff0c;难以得到完全解。欧拉的贡献1&#xff1a;1767 年&#xff0c;瑞士数学家莱昂哈德・…...

【 现代后端架构演进:微服务设计与云原生】

现代后端架构演进&#xff1a;微服务设计与云原生 一、架构演进历程 1. 单体架构到分布式系统 单体架构瓶颈 典型问题&#xff1a;代码耦合&#xff08;代码行超百万级&#xff09;、扩展困难&#xff08;垂直扩容成本 > 1 0 5 >10^5 >105美元/节点&#xff09;、技术…...

[JAVASE] 注解

一. 注解是什么? 注解是一种为程序元素提供元数据的方法.注解就是为程序做特殊标记的. 二. java内置的注解 分别是: 作用在代码的注解是: Override - 检查该方法是否是重写方法。如果发现其父类&#xff0c;或者是引用的接口中并没有该方法时&#xff0c;会报编译错误。 De…...

热成像仪真不错

我挂在外面的网路设备箱 室内的机柜 室外的猫 所用型号为优利德UTi160S&#xff0c;显示模式为&#xff08;可见光与热成像&#xff09;融合模式。...