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

国产化环境实战:手把手教你在银河麒麟系统为QGIS 3.26添加自定义插件支持

国产化环境实战银河麒麟系统下QGIS 3.26插件开发全流程指南当你在银河麒麟系统上成功编译QGIS 3.26后真正的挑战才刚刚开始。作为GIS工程师我们需要的不仅是一个能运行的QGIS而是一个完整的开发环境能够支持自定义插件的创建、调试和部署。本文将带你深入国产化平台的QGIS插件开发全流程从环境配置到第一个Hello World插件的实战测试。1. 开发环境深度配置编译完成的QGIS只是第一步要让Python插件能够正常开发和运行还需要解决几个关键问题。1.1 PyQt5与QGIS Python API路径配置在银河麒麟系统上即使成功编译了QGISPython插件开发环境仍需要手动配置。这是因为自编译的QGIS可能无法自动识别系统Python环境中的PyQt5和QGIS API。首先检查Python环境是否包含必要的QGIS模块python3 -c from qgis.core import QgsProject; print(QGIS Python API可用)如果出现导入错误需要手动设置PYTHONPATH环境变量。在~/.bashrc文件中添加以下内容export QGIS_PREFIX_PATH/home/$USER/dev/QGIS/QGIS-final-3_26_0/build-master/output export PYTHONPATH$QGIS_PREFIX_PATH/python:$PYTHONPATH export LD_LIBRARY_PATH$QGIS_PREFIX_PATH/lib:$LD_LIBRARY_PATH对于PyQt5银河麒麟v10默认安装的版本可能与QGIS 3.26不兼容。建议使用pip安装特定版本pip3 install PyQt55.15.7 PyQt5-sip12.11.0验证PyQt5是否正确安装python3 -c from PyQt5.QtWidgets import QApplication; print(PyQt5版本:, QApplication.instance())1.2 开发工具链选择与配置在国产化平台上我们有两个主要的IDE选择VSCode配置方案安装VSCode官方麒麟版添加Python扩展和Qt for Python扩展配置launch.json调试环境{ version: 0.2.0, configurations: [ { name: Python: QGIS插件, type: python, request: launch, program: ${workspaceFolder}/__init__.py, console: integratedTerminal, env: { QGIS_PREFIX_PATH: /home/$USER/dev/QGIS/QGIS-final-3_26_0/build-master/output } } ] }Qt Creator配置方案安装Qt Creator 5.15以上版本配置Kit使用系统Python 3.7环境在项目设置中添加自定义环境变量QGIS_PREFIX_PATH你的QGIS编译输出路径PYTHONPATH你的QGIS Python模块路径2. QGIS插件开发基础2.1 插件目录结构与核心文件一个标准的QGIS Python插件包含以下基本结构MyPlugin/ │── __init__.py # 插件入口文件 │── metadata.txt # 插件元数据 │── resources.qrc # Qt资源文件 │── resources.py # 编译后的资源文件 ├── ui/ # Qt Designer界面文件 │ └── my_dialog.ui └── icons/ # 插件图标 └── icon.pngmetadata.txt是插件的身份证必须包含以下关键信息[general] nameMyPlugin qgisMinimumVersion3.16 version1.0 authorYourName emailyour.emailexample.com descriptionA simple plugin demo aboutThis plugin demonstrates basic QGIS plugin functionality2.2 插件生命周期与核心类每个QGIS插件都必须实现三个核心方法from qgis.PyQt.QtWidgets import QAction, QDialog from qgis.PyQt.QtGui import QIcon from qgis.core import QgsProject class MyPlugin: def __init__(self, iface): self.iface iface # QGIS接口对象 def initGui(self): 插件初始化创建菜单和工具栏 self.action QAction( QIcon(:/plugins/myplugin/icon.png), Run My Plugin, self.iface.mainWindow()) self.action.triggered.connect(self.run) self.iface.addToolBarIcon(self.action) self.iface.addPluginToMenu(My Plugin, self.action) def unload(self): 卸载插件时清理资源 self.iface.removePluginMenu(My Plugin, self.action) self.iface.removeToolBarIcon(self.action) del self.action def run(self): 插件主逻辑 print(Hello from MyPlugin!)3. 实战从零开发Hello World插件3.1 创建插件骨架使用QGIS提供的插件模板生成工具可以快速创建插件骨架cd ~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/ mkdir HelloWorld cd HelloWorld创建基本文件结构后编辑__init__.pydef classFactory(iface): from .helloworld import HelloWorldPlugin return HelloWorldPlugin(iface)3.2 实现核心功能在helloworld.py中实现插件逻辑from qgis.PyQt.QtWidgets import QMessageBox from qgis.core import QgsMessageLog class HelloWorldPlugin: def __init__(self, iface): self.iface iface def initGui(self): self.action self.iface.addToolBarIcon( QAction(Say Hello, self.iface.mainWindow())) self.action.triggered.connect(self.sayHello) def unload(self): self.iface.removeToolBarIcon(self.action) del self.action def sayHello(self): QgsMessageLog.logMessage(Hello World from plugin!, HelloWorld) QMessageBox.information( self.iface.mainWindow(), Hello World, This is my first QGIS plugin on Kylin!)3.3 调试与部署调试插件时可以使用QGIS的Python控制台实时查看日志输出import os import sys sys.path.append(/path/to/your/plugin) from HelloWorld import HelloWorldPlugin plugin HelloWorldPlugin(iface) plugin.initGui()部署插件有两种方式直接复制到用户插件目录~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/打包为zip文件通过QGIS插件管理器安装4. 高级开发技巧与性能优化4.1 处理国产化平台的特殊问题在银河麒麟系统上开发QGIS插件可能会遇到一些特殊问题中文字符支持# 在插件入口处设置UTF-8编码 import locale locale.setlocale(locale.LC_ALL, zh_CN.UTF-8)图形渲染性能优化# 在绘制大量要素时使用缓存 layer iface.activeLayer() renderer layer.renderer().clone() renderer.setForceRasterRender(True) # 强制栅格化渲染 layer.setRenderer(renderer) layer.triggerRepaint()4.2 插件国际化支持为插件添加多语言支持创建翻译文件i18n/myplugin_zh_CN.ts在代码中使用翻译函数from qgis.PyQt.QtCore import QTranslator, QLocale, QCoreApplication class MyPlugin: def __init__(self, iface): # 初始化翻译 translator QTranslator() translator.load( QLocale.system(), myplugin, _, :/i18n/) QCoreApplication.installTranslator(translator)4.3 插件性能监控使用QGIS内置的性能分析工具监控插件性能from qgis.core import QgsApplication # 开始性能分析 QgsApplication.startProfiling() # ...执行你的插件代码... # 结束并获取分析结果 results QgsApplication.profiler().results() for item in results: print(f{item.function}: {item.elapsed}ms)5. 插件发布与持续集成5.1 插件打包规范创建标准的插件发布包cd HelloWorld find . -name *.pyc -delete # 清理编译缓存 zip -r ../HelloWorld.zip * -x *.git* -x *.vscode* -x *.pyc5.2 自动化测试框架为插件添加单元测试import unittest from qgis.testing import start_app, stop_app class TestMyPlugin(unittest.TestCase): classmethod def setUpClass(cls): start_app() # 初始化QGIS环境 def test_plugin_init(self): from HelloWorld.helloworld import HelloWorldPlugin plugin HelloWorldPlugin(None) self.assertIsNotNone(plugin) classmethod def tearDownClass(cls): stop_app() # 清理QGIS环境5.3 国产化平台适配检查清单在银河麒麟系统上发布插件前检查以下项目[ ] 依赖库版本与麒麟系统兼容[ ] 文件路径处理使用os.path而非硬编码[ ] 图形界面适配国产化主题[ ] 内存使用控制在合理范围[ ] 插件卸载时彻底清理资源

相关文章:

国产化环境实战:手把手教你在银河麒麟系统为QGIS 3.26添加自定义插件支持

国产化环境实战:银河麒麟系统下QGIS 3.26插件开发全流程指南 当你在银河麒麟系统上成功编译QGIS 3.26后,真正的挑战才刚刚开始。作为GIS工程师,我们需要的不仅是一个能运行的QGIS,而是一个完整的开发环境,能够支持自定…...

AWS VPC Endpoint 与 Endpoint Service 终端节点完全指南

从基础到生产维护完全指南 — 深入理解 VPC Endpoint 消费端和 Endpoint Service 提供端,掌握终端节点服务架构设计、部署配置、成本优化、性能调优、安全加固、故障排查、监控告警和生产维护的完整知识体系。 文档特点: 📚 12 章完整内容(2000+ 行) 💻 60+ 代码示例(C…...

Balena Etcher终极指南:三步搞定系统镜像烧录,新手也能轻松上手

Balena Etcher终极指南:三步搞定系统镜像烧录,新手也能轻松上手 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 你是否曾经为了给树莓派烧…...

小说下载器:如何用技术手段永久保存你喜爱的网络小说?

小说下载器:如何用技术手段永久保存你喜爱的网络小说? 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,网络小说已成为许多人日常娱…...

从零开始:手把手教你合法部署RealVNC Server 7.6.0企业版,并配置安全的远程访问策略

企业级远程访问安全指南:RealVNC Server 7.6.0 正版部署与配置实战 远程访问技术已成为现代企业数字化转型的基础设施,但如何平衡便捷性与安全性始终是技术负责人的核心挑战。RealVNC作为行业领先的远程控制解决方案,其企业版7.6.0版本通过动…...

【SCI复现】三电平NPC变流器中点电位平衡下零序电压的分析与计算研究(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

保姆级教程:用GEE和Landsat 8数据,5分钟搞定城市热岛区域自动识别与面积计算

零代码实战:基于GEE与Landsat 8的城市热岛自动化分析系统 清晨六点的北京朝阳区,气象站记录到34℃的异常高温,而密云水库周边气温仅有28℃。这种温差现象背后,隐藏着现代城市规划者最关注的课题——城市热岛效应。今天我们将用Go…...

中小型创业团队如何利用Taotoken统一管理多个AI模型的接入

中小型创业团队如何利用Taotoken统一管理多个AI模型的接入 1. 多模型接入的典型挑战 中小型创业团队在快速迭代产品时,往往需要同时接入多个AI模型以满足不同场景需求。常见情况包括:产品需要同时支持文本生成、代码补全和图像理解能力;不同…...

从凯撒到AES:一个后端工程师的密码学入门避坑指南

从凯撒到AES:一个后端工程师的密码学入门避坑指南 密码学就像一把双刃剑——用对了能保护系统安全,用错了反而会成为系统最大的漏洞。作为后端工程师,我们每天都在与各种加密算法打交道,但真正理解其原理和正确使用方式的却不多。…...

使用 Hermes Agent 配置 Taotoken 自定义供应商完成特定任务调度

使用 Hermes Agent 配置 Taotoken 自定义供应商完成特定任务调度 1. 准备工作 在开始配置 Hermes Agent 使用 Taotoken 作为自定义供应商之前,需要确保已完成以下准备工作。首先登录 Taotoken 控制台,在「API 密钥」页面创建一个新的 API Key。建议为 …...

Canvas 绘制曲线并实现鼠标点击高亮效果

使用 Canvas 绘制的曲线也可以实现鼠标点击高亮显示效果。由于 Canvas 是基于像素的绘制方式(不像 SVG 是基于矢量的),我们需要手动检测鼠标点击位置是否在曲线上,并重新绘制高亮效果。 实现方案 基本思路 存储所有曲线的路径数…...

JX3Toy:剑网3智能宏辅助工具,让战斗操作提升34%效率

JX3Toy:剑网3智能宏辅助工具,让战斗操作提升34%效率 【免费下载链接】JX3Toy 一个自动化测试DPS的小工具 项目地址: https://gitcode.com/GitHub_Trending/jx/JX3Toy 在剑网3的激烈战斗中,你是否曾因复杂的技能循环而手忙脚乱&#xf…...

用Gemini3.1Pro一键重构文档,逻辑不清变清晰

你可能不是不会表达,而是表达的“骨架”没搭好:领导看到的是散点信息,却看不到因果链、结论依据和行动路径。于是就会出现一种很典型的反馈——“你这段话很好,但逻辑不清”“重点不突出”“我看不出你要我们做什么”。在这种情况…...

【限时开放】AISMM最新V2.3指标权重白皮书(仅剩217份):覆盖AI研发、MLOps、模型治理三大新增维度

更多请点击: https://intelliparadigm.com 第一章:AISMM模型核心维度与指标详解 AISMM(Artificial Intelligence Service Maturity Model)是面向AI服务全生命周期的成熟度评估框架,聚焦可衡量、可演进、可治理三大原则…...

SITS2026发布即锁死模板版本:2026年Q2起AISMM报告未使用新版模板=自动判定为无效评估

更多请点击: https://intelliparadigm.com 第一章:SITS2026发布:AISMM评估报告模板 SITS2026 正式发布了面向智能系统安全成熟度模型(AISMM)的标准化评估报告模板,该模板严格遵循 ISO/IEC 25001 和 NIST A…...

CloudCLI插件开发实战:从脚手架到依赖分析器

1. 项目概述:一个为IDE插件开发者准备的“开箱即用”脚手架 如果你正在为Claude Code UI(或者大家更习惯叫它CloudCLI)开发一个自定义插件,但苦于不知道从何下手,那么这个名为 cloudcli-plugin-starter 的项目就是你…...

CDecrypt:革命性的Wii U游戏解密工具,开启游戏内容探索新纪元

CDecrypt:革命性的Wii U游戏解密工具,开启游戏内容探索新纪元 【免费下载链接】cdecrypt Decrypt Wii U NUS content — Forked from: https://code.google.com/archive/p/cdecrypt/ 项目地址: https://gitcode.com/gh_mirrors/cd/cdecrypt 你是否…...

Cesium粒子特效实战:手把手教你封装一个可复用的‘火焰喷射器’组件(附完整代码)

Cesium粒子特效实战:手把手教你封装一个可复用的‘火焰喷射器’组件 在三维地理信息可视化项目中,动态粒子特效往往能带来画龙点睛的效果。想象一下,在智慧城市应急演练场景中,一个逼真的火焰特效能够直观展示火灾蔓延趋势&#x…...

从靶场到实战:sqli-labs第七关教会我的,不只是“菜刀连接”

从靶场到实战:sqli-labs第七关教会我的,不只是“菜刀连接” 在安全攻防的世界里,靶场练习往往被简化为“找到漏洞-利用漏洞-拿到flag”的三步曲。但真正有价值的学习,发生在关闭虚拟机之后的思考——为什么这个漏洞存在&#xff…...

3步实现Honey Select 2汉化:HS2-HF_Patch完整安装指南

3步实现Honey Select 2汉化:HS2-HF_Patch完整安装指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而困扰吗&…...

taocp2_rsa_story

RSA公钥加密算法故事文件 确保互联网安全的算法:RSA 解析5W1H分析 What(是什么) RSA(Rivest-Shamir-Adleman)是一种非对称公钥加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。它是目前…...

别再傻傻分不清!SCI论文Results、Discussion、Conclusion保姆级拆解(附写作模板)

SCI论文Results、Discussion、Conclusion的黄金分割法则:从数据到洞见的进阶写作指南 在科研写作的迷宫中,Results(结果)、Discussion(讨论)和Conclusion(结论)这三个章节构成了论文…...

艾尔登法环终极调试工具:从入门到精通完全指南

艾尔登法环终极调试工具:从入门到精通完全指南 【免费下载链接】Elden-Ring-Debug-Tool Debug tool for Elden Ring modding 项目地址: https://gitcode.com/gh_mirrors/el/Elden-Ring-Debug-Tool Elden Ring Debug Tool是一款专为《艾尔登法环》玩家和模组开…...

5个你必须掌握的TestDisk PhotoRec数据恢复实战技巧

5个你必须掌握的TestDisk & PhotoRec数据恢复实战技巧 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 你是否曾经因为误删分区而心跳加速?或者因为格式化硬盘而冷汗直流?别担心&a…...

程序员如何接受工作内容毫无意义?

知乎上有人问:程序员如何接受工作内容毫无意义? 他举了一堆例子。按钮文案从「氛围」改成「空间」,又改回来。一个按钮被疯狂点击后偶尔闪烁,测试提了bug,但觉得用户根本不会这么操作。git提交信息格式不对被打回。周报…...

论文降AI率工具哪个最好?2026 实测对比,毫无疑问是嘎嘎降AI!

毕业季论文提交前,很多同学都有一个共同的想法:先查一下论文的AI率,看看到底有多高,再决定要不要花钱处理。这个思路完全正确——盲目处理不如先摸清底数。但问题是,正规的AIGC检测动辄几十元一次,查完发现…...

告别格式噩梦:用Chinese-ERJ LaTeX模板3步搞定《经济研究》期刊投稿

告别格式噩梦:用Chinese-ERJ LaTeX模板3步搞定《经济研究》期刊投稿 【免费下载链接】Chinese-ERJ 《经济研究》杂志 LaTeX 论文模板 - LaTeX Template for Economic Research Journal 项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-ERJ 还在为《经济…...

Self-E模型:实现任意步长可控的文生图扩散模型

1. 项目背景与核心价值 去年在开发一个创意设计工具时,我遇到了一个棘手的问题:现有的文生图模型要么生成速度慢,要么输出质量不稳定。这促使我开始思考如何构建一个既能灵活控制生成步长,又能保持图像质量的解决方案。Self-E模型…...

实战应用:基于快马平台构建并部署你的markdown技术博客

今天想和大家分享一个实战项目:如何用InsCode(快马)平台快速搭建个人技术博客系统。作为一个经常写技术笔记的开发者,我一直在寻找能同时满足写作、发布和部署需求的轻量级方案,这次实践下来发现整个流程比想象中简单很多。 项目整体设计思路…...

论文降AI率软件哪个最好?2026 实测对比,嘎嘎降是本科论文首选!

毕业季论文提交前,很多同学都有一个共同的想法:先查一下论文的AI率,看看到底有多高,再决定要不要花钱处理。这个思路完全正确——盲目处理不如先摸清底数。但问题是,正规的AIGC检测动辄几十元一次,查完发现…...