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

QT编程之QGIS

一、QGIS介绍

        Quantum GIS(QGIS)是开源地理信息系统桌面软件,使用GNU(General Public License)授权, 属于 Open Source eospatial Foundation( OSGeo )的官方计划。在 GNU 授权下,开发者可以自行检阅与调整程序代码, 并保障让所有使用者可以免费且自由地修改程序。
        QGIS 的目标是成为一个 GIS系统,提供常见的功能与特征。借着核心特征提供基本功能与附加组件(Python 或 C++) 持续地扩充,让使用者可以浏览、管理、编辑、分析数据以及制图。
        QGIS 是一群自愿者所开发的项目,为程序代码提供缺陷修复、报告以及文件等贡献。它是由热心的使用者和开发社群 所维护的。它提供了交互式的邮件列表,以及通过网络管道传达给其他用户与开发人员帮助与建议。另外,它也提供 商业定制化开发。

二、核心功能与特点
  1. 核心功能

    • ‌数据管理‌:支持本地文件、数据库(PostGIS)及在线服务(WMS/WFS)的加载与编辑‌。
    • ‌制图与可视化‌:提供符号化工具、地图标注及布局设计,支持导出高质量印刷地图‌。
    • ‌空间分析‌:集成GRASS GIS工具链,支持缓冲区分析、叠加运算等基础到高级分析‌。
    • ‌三维场景‌:通过Qgis2threejs插件实现基础三维渲染,但功能较ArcGIS的ArcGlobe/ArcScene简化‌。
  2. 技术生态

    • ‌插件市场‌:涵盖地图配图、遥感解译、网络分析等3000+插件(如Processing Toolbox、SAGA GIS)。
    • ‌云端扩展‌:支持与QGIS Server结合发布Web地图服务,兼容GeoNode等开源平台‌。
三、与ArcGIS对比分析
维度QGISArcGIS
‌成本‌完全免费开源商业授权(按模块/用户计费)
‌学习曲线‌需熟悉开源工具链,社区资源分散‌界面直观,官方培训体系完善‌
‌行业应用‌适合学术研究、轻量级项目‌企业级应用(如国土、城市规划)‌
‌三维能力‌基础三维渲染(依赖插件)‌专业三维分析(ArcGlobe/ArcScene)‌
四、QGIS下载安装
     QGIS下载
  1. 官方网站
    • ‌最新版本‌(功能丰富):访问 QGIS 官网 或 OSGeo中文分会页面 下载。Windows 用户可选择以下安装包:
      • 独立安装程序(64位/32位)‌
      • OSGeo4W 网络安装程序(64位/32位),安装时选择 ‌桌面Express安装‌ 以获取最新版本‌。
    • ‌长期支持版(LTR)‌(稳定性优先):通过 OSGeo4W 安装程序选择 ‌高级安装‌ → ‌QGIS-LTR长期支持版 ‌。

      从 OSGeo4W 官网 下载 osgeo4w-setup.exe,建议选择 ‌64位版本‌‌。安装时选择国内镜像源(如 http://gwmodel.whu.edu.cn/mirrors/osgeo4w)以提升下载速度‌。
  2. 其他平台
    • ‌macOS‌:下载官方签名的一体式安装程序,支持 macOS High Sierra (10.13) 及以上系统‌。
    • ‌Linux‌:通过包管理器(如 apt 或 yum)安装,或从官网获取对应发行版安装包‌。
     QGIS安装
  1. Windows 系统
    • ‌独立安装程序‌:双击下载的 .exe 文件,按提示完成安装(默认路径或自定义路径)‌。
    • ‌OSGeo4W 安装程序‌:运行安装程序后,选择 ‌Express Desktop Install‌ → 勾选最新版本组件‌。
  2. macOS 系统
    • 打开 .dmg 文件,将 QGIS 拖拽至应用程序文件夹完成安装‌。
  3. Linux 系统
  4. 终端执行命令(以 Debian/Ubuntu 为例):
    sudo apt install qgis
   QGIS中文界面设置
  1. 打开 QGIS,进入菜单栏 ‌Settings → Options‌。
  2. 在 ‌General‌ 选项卡中,将语言调整为 ‌简体中文‌,点击 ‌OK‌ 保存‌。
  3. 重启 QGIS 生效。

五、开发环境搭建

1、配置 Qt 项目文件(.pro 文件)
在 Qt Creator 中打开您的项目的 .pro 文件,然后添加 QGIS 的头文件路径和库路径。假设您使用的是 OSGeo4W 安装的 QGIS,路径可能类似于 C:\OSGeo4W64\apps\qgis\include 和 C:\OSGeo4W64\apps\qgis\lib。配置代码如下:

# 添加 QGIS 的头文件路径
INCLUDEPATH += C:/OSGeo4W64/apps/qgis/include# 添加 QGIS 的库文件路径
LIBS += -LC:/OSGeo4W64/apps/qgis/lib# 链接 QGIS 库
LIBS += -lqgis_core -lqgis_gui -lqgis_analysis

2. 引用 QGIS 头文件
在您的代码中,您现在可以直接引用 QGIS 的头文件,例如:

#include <qgsproject.h>
#include <qgsvectorlayer.h>

3. 设置环境变量(可选)
确保在运行项目时,QGIS 和 GDAL 的动态链接库(DLL)可以被找到。OSGeo4W 通常会配置好环境变量,但如果未自动配置,可以手动将 C:\OSGeo4W64\bin 添加到系统的 PATH 环境变量中。

六、QT创建基于QGIS窗口

1)用户界面设计,利用Qt的UI设计器或代码编写方式,设计用户界面。
2)编写核心代码
地图显示: 使用QgsMapCanvas类创建地图画布,加载矢量数据、栅格数据等。
空间分析: 利用QGIS提供的空间分析函数,实现缓冲区分析、叠加分析等。
数据处理: 实现数据的读取、写入、转换等操作。
自定义工具: 编写自定义工具,实现特定功能。

#include <QApplication>
#include <QMainWindow>#include <qgsmapcanvas.h>
#include <qgsrasterlayer.h>
#include <qgsmaptoolpan.h>int main(int argc, char** argv)
{// 创建QGIS应用程序对象QApplication qgisApp(argc, argv);// 创建主窗口QMainWindow mainWindow;// 创建地图画布对象QgsMapCanvas mapCanvas;// 创建并加载栅格图层(tif格式文件)QgsRasterLayer rasterLayer(R"(D:\work\LH\15\bj\bj.tif)");// 将图层添加到地图画布中mapCanvas.setLayers({ &rasterLayer });// 设置地图画布的显示范围为图层的范围mapCanvas.setExtent(rasterLayer.extent());// 刷新地图画布以应用更改mapCanvas.refresh();// 创建并设置平移工具,允许在地图上平移QgsMapToolPan panTool(&mapCanvas);mapCanvas.setMapTool(&panTool);// 将地图画布设置为主窗口的中央部件mainWindow.setCentralWidget(&mapCanvas);// 显示主窗口mainWindow.show();// 运行QGIS应用程序的事件循环return qgisApp.exec();
}
七、QT插件

1)创建插件工程: 创建一个新的插件工程。
2)实现插件功能: 在插件中实现自定义功能,如添加菜单项、工具栏按钮等。
3)加载插件: 将插件加载到QGIS中。

7.1 插件创建流程
  1. 生成插件模板

    • 使用 plugin_builder.py 生成基础插件框架(需适配Python3语法),生成包含 plugin.cpp 和 pluginguibase.ui 的目录结构‌。
    • 修改 CMakeLists.txt 中Qt版本标识(如替换 QT4_* 为 QT5_*)‌。
  2. 编译插件工程

    • 通过CMake生成VS/Qt Creator工程,解决编译错误(如头文件路径调整或C++标准升级至C++17)‌。
    • 编译后生成 .dll 文件,存放于QGIS插件目录(如 C:\OSGeo4W\apps\qgis\plugins)‌。
7.2 核心开发要点
  1. 界面与功能集成

    • 使用 ‌Qt Designer‌ 设计插件UI(如添加 QgsMapCanvas 控件),通过 .ui 文件生成界面类‌。
    • 实现地图交互工具(如平移、缩放):
      QgsMapToolPan *panTool = new QgsMapToolPan(mapCanvas);mapCanvas->setMapTool(panTool);
  2. 数据操作示例

    • ‌加载矢量图层‌:
      QgsVectorLayer *layer = new QgsVectorLayer("Point?crs=EPSG:4326", "points", "memory"); QgsProject::instance()->addMapLayer(layer);
    • ‌读取坐标文件‌:通过 QFile 和 QTextStream 解析文本文件,生成要素并添加到图层‌。
7.3 调试与发布
  1. 调试技巧

    • 使用 qDebug() 输出日志,或通过 QgsMessageLog 记录运行信息‌。
    • 启用Qt Creator调试器定位内存泄漏或逻辑错误‌。
  2. 插件部署

    • 将编译后的 .dll 文件与资源(如图标、翻译文件)打包,复制到QGIS插件目录‌。
    • 在QGIS插件管理器中启用插件,验证功能稳定性‌。

八、资源推荐

  • 官方文档‌:QGIS C++ API(核心类参考)‌
  • 示例项目‌:Qt/C++进行QGis插件开发模板:QgisPlugin: 使用Qt/C++进行QGis插件开发的基本模板

相关文章:

QT编程之QGIS

一、QGIS介绍 Quantum GIS&#xff08;QGIS&#xff09;是开源地理信息系统桌面软件&#xff0c;使用GNU&#xff08;General Public License&#xff09;授权&#xff0c; 属于 Open Source eospatial Foundation&#xff08; OSGeo &#xff09;的官方计划。在 GNU 授权下&am…...

LangChain-chatchat 0.3.x入门级教程

前言 一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。该项目支持市面上主流的开源 LLM、 Embedding 模型与向量数据库&#xff0c;可实现全部使用开源模型离线私有部署。…...

Vi/Vim命令详解:高效文本编辑的利器

Vi/Vim命令详解&#xff1a;高效文本编辑的利器 Vi和Vim是Unix/Linux系统中极为流行的文本编辑器&#xff0c;它们以其强大的功能和高效的操作方式赢得了广大用户的喜爱。无论是对于程序员、系统管理员还是普通用户&#xff0c;掌握Vi/Vim的基本命令和高级技巧都是非常有必要的…...

【前端三剑客】万字总结JavaScript

一、初识JavaScript 1.1 JavaScript 的作用 表单动态校验&#xff08;密码强度检测&#xff09; &#xff08; JS 产生最初的目的 &#xff09;网页特效服务端开发(Node.js)桌面程序(Electron)App(Cordova)控制硬件-物联网(Ruff)游戏开发(cocos2d-js) 1.2 HTML/CSS/JS 的关系…...

MySQL | MySQL表的增删改查(CRUD)

目录 前言&#xff1a;什么是 CRUD ?一、Creat 新增1.1 语法1.2 示例1.2.1 单行数据全列插入1.2.2 单行数据指定列插入1.2.3 多行数据指定列插入 二、Retrieve 检索2.1 语法2.2 示例2.2.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 结果去重查询2.2.5 where条件查…...

【愚公系列】《高效使用DeepSeek》003-DeepSeek文档处理和其他顶级 AI模型的区别

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

OSC32IN与OSC32OUT对于无源晶振而言有区别吗?

OSC32IN与OSC32OUT对于无源晶振而言有区别吗&#xff1f; 答&#xff1a;没有区别。对晶振本身而言&#xff0c;两个频率管脚反接也是一样的。 如下图所示&#xff1a; 使用示波器连接晶振的两个引脚&#xff0c;并观察波形可以帮助确定输入和输出端口。 当晶振工作正常时&…...

究竟什么是虚拟同步机???虚拟同步机巨简单理解

1同步发电机 1.1同步发电机工作原理 同步发电机定子铁芯的内圆均匀分布着定子槽,槽内按一定规律嵌放着对称的三相绕组U1-U2、V1-V2、W1-W2,如图1所示。 图1 同步发电机的结构原理图 工作原理: 转子铁芯上装有制成一定形状的成对磁极,磁极上绕有励磁绕组。励磁绕组上通直流…...

ZVA-Z90,罗德与施瓦茨毫米波变换器

罗德与施瓦茨 ZVA-Z90毫米波变换器​ 商品品牌&#xff1a;R&S/罗德与施瓦茨 商品型号&#xff1a;ZVA-Z90 商品名称&#xff1a;毫米波变换器 产品简介: ZVA-Z 毫米波变换器 简介 R&SZVA-Zxx 毫米波变换器支持在 V、E、W、F、D、G、J 以及 Y 频段内的毫米波测量…...

TCP/IP 协议精讲-精华总结版本

序言 本文旨在介绍一下TCP/IP涉及得所有基础知识&#xff0c;为大家从宏观上俯瞰TCP/IP提供一个基石&#xff0c;文档属于《TCP/IP图解&#xff08;第五版&#xff09;》的精简版本。 专业术语 缩写 全称 WAN Wide area network广域网 LAN Local area network局域网 TC…...

电脑内存不足怎么办?

常规解决方法盘点 关闭后台程序&#xff1a;按下【Ctrl Shift Esc】组合键打开任务管理器&#xff0c;在 “进程” 选项卡里&#xff0c;把当前不用的程序统统 “结束任务” &#xff0c;像那些自动更新的软件、常驻后台的播放器&#xff0c;关了能释放不少内存。比如音乐软…...

PTP协议赋能高精度时间同步网络

什么是PTP&#xff1f; PTP&#xff08;精确时间协议&#xff0c;Precision Time Protocol&#xff09; 是一种基于IEEE 1588标准的网络时间同步协议&#xff0c;旨在为分布式系统中的设备提供亚微秒级&#xff08;甚至纳秒级&#xff09;的高精度时钟同步。其核心目标是通过消…...

【redis】string应用场景:缓存功能和计数功能

文章目录 缓存功能实现思路存在的问题伪代码实现 记数功能实现思路统计伪代码实现 缓存功能 实现思路 整体的思路&#xff1a; 应用服务器访问数据的时候&#xff0c;先查询 Redis 如果 Redis 上数据存在了&#xff0c;就直接从 Redis 读取数据交给应用服务器&#xff0c;不继…...

oracle中OS BLOCK的含义

在Oracle数据库中&#xff0c;OS BLOCK&#xff08;操作系统数据块&#xff09;是指操作系统层面上的数据块&#xff0c;它与Oracle数据库内部的逻辑存储单元BLOCK&#xff08;数据块&#xff09;有所区别但密切相关。以下是对OS BLOCK的详细解释&#xff1a; 定义与概念 OS BL…...

SSM企业台账管理平台

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…...

Linux下使用pigz工具结合tar实现并行压缩提升压缩和解压速度

说明 tar命令是在 Unix 和类 Unix 系统中用于归档和压缩文件的常用工具。 基本语法 tar [选项] [归档文件名] [文件或目录列表]常用选项 创建归档文件: -c:创建一个新的归档文件。例如,tar -cvf myarchive.tar file1.txt file2.txt会创建一个名为myarchive.tar的归档文件…...

低代码与AI测试自动化:双剑合璧的未来

在数字化转型浪潮下&#xff0c;企业软件开发和测试的效率需求空前提高。低代码&#xff08;Low-Code&#xff09;平台因其直观的可视化编程方式、大幅降低开发门槛的特点&#xff0c;成为企业敏捷开发的首选。而AI测试自动化的兴起&#xff0c;则彻底改变了传统软件测试模式&a…...

JavaScript基础篇:三、 变量与数据类型

一、变量的概念与声明 在 JavaScript 中,变量是用于存储数据的容器。通过声明变量,可以为程序中的数据分配内存空间,以便后续的访问和操作。变量的声明使用`var`、`let`或`const`关键字。 (一)var关键字 `var`是 JavaScript 中传统的变量声明方式,具有函数级作用域。这…...

【2025最新版】如何将fnm与node.js安装在D盘?【保姆级安装及人性话理解教程】

目录 背景&#xff1a; 1.安装fnm 1.1下载fnm 1.2解压目录 1.3配置fnm的环境变量 1.4验证fnm是否安装成功 fnm大捷~ 2.相关配置为下载node.js做准备 2.1查看是否有环境配置文件 2.2获取环境配置文件 2.3新建文件 2.4写入配置 2.5重启powershell 2.5.1可能出现的错…...

【免费】2008-2020年各省城镇登记失业率数据

2008-2020年各省城镇登记失业率数据 1、时间&#xff1a;2008-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、城镇登记失业率 4、范围&#xff1a;31省 5、指标说明&#xff1a;城镇登记失业率是指在一定时期内&…...

C++:类和对象(从底层编译开始)详解[前篇]

目录 一.inline内联的详细介绍 &#xff08;1&#xff09;为什么在调用内联函数时不需要建立栈帧&#xff1a; &#xff08;2&#xff09;为什么inline声明和定义分离到两个文件会产生链接错误&#xff0c;链接是什么&#xff0c;为什么没有函数地址&#xff1a; 二.类&…...

Deny by project hooks setting ‘default‘: size of the file

问题描述 gitcode.com提交代码时候发现出现文件大于默认10MB后不能上传 错误显示内容如下: Total 43 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Start Git Hooks Checking [FAILED] remote: Error: Deny by p…...

【Flutter】数据库实体类构造函数加密注意事项

源代码&#xff1a; AccountEntity( {required String account, required String password,}) : account encrypter.encrypt(account,iv: iv).base64, password encrypter.encrypt(password,iv: iv).base64,; 解密代码&#xff1a; static final encrypter Encrypter(AES…...

如何在PHP中实现数据加密与解密:保护敏感信息

如何在PHP中实现数据加密与解密&#xff1a;保护敏感信息 在现代Web开发中&#xff0c;数据安全是一个至关重要的议题。无论是用户的个人信息、支付数据&#xff0c;还是其他敏感信息&#xff0c;都需要在存储和传输过程中进行加密&#xff0c;以防止数据泄露和恶意攻击。PHP作…...

【Pyqt5】水平布局与垂直布局及其交叉展示及实战音乐播放器UI

感受一下Pyqt5的水平布局与垂直布局及其交叉展示 需求&#xff1a; 4个按钮水平排放4个按钮垂直排放水平排放与垂直排放并用实战&#xff1a;音乐播放器UI 水平排放 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayoutclass MyWindo…...

Java 中 getCanonicalName、getSimpleName、getName、getTypeName 的区别

1. 核心区别总结 方法作用数组类型示例非数组类型示例getName()返回 JVM 内部格式的类全名&#xff0c;适用于反射操作&#xff08;如 Class.forName()&#xff09;int[] → [IString → java.lang.StringgetTypeName()返回更友好的类型名称&#xff0c;对数组递归处理组件类型…...

uni-app打包h5并部署到nginx,路由模式history

uni-app打包有些坑&#xff0c;当时运行的基础路径填写了./&#xff0c;导致在二级页面刷新之后&#xff0c;页面直接空白。就只能换一个路径了&#xff0c;nginx也要跟着改&#xff0c;下面是具体步骤。 manifest.json配置web 运行路径写/h5/&#xff0c;或者写你们网站的目…...

数据结构与算法(哈希表——两个数组的交集)

原题 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 […...

P1259 黑白棋子的移动【java】【AC代码】

有 2n 个棋子排成一行&#xff0c;开始为位置白子全部在左边&#xff0c;黑子全部在右边&#xff0c;如下图为 n5 的情况&#xff1a; 移动棋子的规则是&#xff1a;每次必须同时移动相邻的两个棋子&#xff0c;颜色不限&#xff0c;可以左移也可以右移到空位上去&#xff0c;但…...

一些docker命令

一、基础命令 查看 Docker 版本 docker --version 或 docker version&#xff1a;显示 Docker 客户端和服务器的版本信息。 查看 Docker 系统信息 docker info&#xff1a;显示 Docker 系统的详细信息&#xff0c;包括镜像、容器数量、存储驱动类型等。 Docker 服务管理 s…...

云服务器新手配置内网穿透服务(frp)

首先你得有一个公网服务器&#xff0c;有了它你就可以借助它&#xff0c;将自己电脑进行配置内网穿透&#xff0c;让自己内网电脑也可以异地轻松访问。网上教程较多&#xff0c;特此记录我自己的配置&#xff0c;避免迷路&#xff0c;我这里只记录我自己云服务小白&#xff0c;…...

linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序

目录 一、基础介绍 二、PTRACE_TRACE 实现原理 三、代码实现 四、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders 一、基础介绍 GDB&#xff08;GNU Debugger&…...

Maven安装、idea集成Maven、Maven依赖管理、Maven生命周期

一. Maven介绍 1. Maven是一款用于管理和构建Java项目的工具&#xff0c;是Apache旗下的一个开源项目&#xff0c;它基于项目对象模型(POM)的概念&#xff0c;通过一小段描述信息来管理项目的构建 2. Maven作用&#xff1a; (1) 依赖管理&#xff1a;方便快捷的管理项目依赖的资…...

【xv6操作系统】系统调用与traps机制解析及实验设计

【xv6操作系统】系统调用与traps机制解析及实验设计 系统调用相关理论系统调用追溯系统调用实验设计Sysinfo&#x1f6a9;系统调用总结&#xff08;结合trap机制&#xff09; traptrap机制trap代码流程Backtrace实验alarm实验 系统调用 相关理论 隔离性&#xff08;isolation)…...

S7-1200 G2移植旧版本S7-1200程序的具体方法示例

S7-1200 G2移植旧版本S7-1200程序的具体方法示例 前期概要: S7-1200 G2必须基于TIA博途V20,之前的程序可通过移植的方式在新硬件上使用。 该移植工具可自动将TIA Portal 项目从 S7-1200 移植到更新的S7-1200 G2。 注意: 该插件支持在同一TIA Portal项目实例内将软件和/或硬…...

海量数据查询加速:Presto、Trino、Apache Arrow

1. 引言 在大数据分析场景下,查询速度往往是影响业务决策效率的关键因素。随着数据量的增长,传统的行存储数据库难以满足低延迟的查询需求,因此,基于列式存储、向量化计算等技术的查询引擎应运而生。本篇文章将深入探讨 Presto、Trino、Apache Arrow 三种主流的查询优化工…...

vscode远程连接服务器并运行项目里的.ipynb文件 如何在 Jupyter Notebook 中切换/使用 conda 虚拟环境?

【最全指南】如何在 Jupyter Notebook 中切换/使用 conda 虚拟环境&#xff1f; 最好用的方法&#xff01; 使用 nb_conda_kernels 添加所有环境 第二种方法其实也挺不错的。有个缺点是&#xff0c;你新建一个环境&#xff0c;就要重复操作一次。 而这个方法就是一键添加所有…...

二阶优化方法详解

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 ima 知识库 知识库广场搜索&#…...

C++中通过虚函数实现多态的原理

C中通过虚函数实现多态的原理 我们都知道C是通过虚函数实现多态的&#xff0c;那么其中的原理是什么呢&#xff1f; 在C中&#xff0c;多态性是一种重要的特性&#xff0c;它允许通过基类指针或引用来调用派生类中的函数。多态性主要分为两种&#xff1a;编译时多态&#xff…...

阿里云服务器购买及环境搭建宝塔部署springboot和vue项目

云服务器ECS_云主机_服务器托管_计算-阿里云 一、前言 对于新手或者学生党来说&#xff0c;有时候就想租一个云服务器来玩玩或者练练手&#xff0c;duck不必花那么多钱去租个服务器。这些云服务厂商对学生和新手还是相当友好的。下面将教你如何快速搭建自己的阿里云服务器&…...

【学习笔记】中缀表达式转后缀表达式及计算

C实现中缀表达式转后缀表达式及后缀表达式的计算 在C中&#xff0c;实现中缀表达式转换为后缀表达式&#xff08;逆波兰表达式&#xff09;以及后缀表达式的计算是一个非常经典的问题。它不仅涉及到栈&#xff08;Stack&#xff09;数据结构的使用&#xff0c;还涉及到对运算符…...

【机器人-基础知识】标定 - 相机标定全解

https://blog.csdn.net/MengYa_Dream/article/details/120233806 1. 相机标定的定义 相机标定是确定相机成像过程中各个参数的过程,它的核心目标是建立从三维世界坐标系到二维图像坐标系的数学映射关系。这一过程包括求解: 内参:描述相机内部光学特性(如焦距、主点位置、像…...

Java 8 + Tomcat 9.0.102 的稳定环境搭建方案,适用于生产环境

一、安装 Java 8 安装 OpenJDK 8 bash sudo apt update sudo apt install openjdk-8-jdk -y 验证安装 bash java -version 应输出类似: openjdk version “1.8.0_412” OpenJDK Runtime Environment (build 1.8.0_412-8u412-ga-1~22.04-b08) OpenJDK 64-Bit Server VM (bui…...

探索 C 语言枚举类型的奇妙世界

目录 一、枚举类型的定义二、枚举类型变量的声明和初始化2.1 先定义枚举类型&#xff0c;再声明变量2.2 定义枚举类型的同时声明变量 三、自定义枚举常量的值四、枚举类型的特点五、注意事项 在C语言中&#xff0c;枚举类型&#xff08; enum&#xff09;是一种用户自定义的数…...

buu-ciscn_2019_ne_5-好久不见50

1. 背景分析 目标程序是一个存在漏洞的二进制文件&#xff0c;我们可以通过以下方式利用漏洞获取 shell&#xff1a; 程序中存在 system() 函数&#xff0c;但没有明显的 /bin/sh 字符串。 使用工具&#xff08;如 ROPgadget&#xff09;发现程序中有 sh 字符串&#xff0c;可…...

HCIA-ACL实验

前提条件&#xff1a;实现底层互通 转发层面 1、基本ACL ①要求PC3不能访问网段192.168.2.0的网段&#xff0c;PC4和客户端能正常访问服务器 ②AR2配置 acl 2000 rule deny source 192.168.1.1 0 匹配流量 int g 0/0/0 traffic-filter inbound acl 2000 接口调用…...

Java入职篇(2)——开发流程以及专业术语

Java入职篇&#xff08;2&#xff09;——开发流程以及专业术语 开发流程 开发术语 测试用例&#xff08;用例&#xff09; 测试人员写的测试方案&#xff0c;基本上就是编写的测试过程&#xff0c;以及测试的预取结果 灰度测试 现在小部分范围内使用&#xff0c;然后逐步…...

三相逆变器不控整流场景简要分析

0 三相逆变器拓扑 LCL三相逆变器简要拓扑如下图所示&#xff0c;其他类型如多电平逆变器类似。 1 原理说明 软件在进行直流母线电压Udc的给定取值时&#xff0c;考虑到电压利用率&#xff0c;通常会比电网线电压的峰值稍微高些&#xff0c;比如取线电压峰值的1.0x倍&#x…...

语言识别模型whisper学习笔记

语言识别模型whisper学习笔记 Whisper 是由 OpenAI 于 2022年9月 推出的开源自动语音识别&#xff08;ASR&#xff09;系统&#xff0c;旨在实现高精度、多语言的语音转文本及翻译任务。其核心目标是解决传统语音识别模型在噪声环境、口音多样性及多语言场景下的局限性。 一、…...

centos 换阿里云yum

1、备份原有的Yum源配置文件 在更换Yum源之前&#xff0c;先备份CentOS系统中默认的Yum源配置文件&#xff0c;以便在需要时恢复。默认的Yum源配置文件位于 /etc/yum.repos.d/ 目录下&#xff0c;通常包含 CentOS-Base.repo、CentOS-Debuginfo.repo、CentOS-Vault.repo 等文件…...