Qgis开发1:总则


Qgis开发1:总则

[email protected]

2014年8月9日

2014年8月20日添加二次开发原则

 

1  QGIS语法

1.1 类

所有类名以Qgs开头:QgsPoint。

成员数据:所有数据为私有。以m为前缀:mMapCanvas。

成员函数:所有成员函数以小写字母开头。所有的成员数据获取函数直接以其名字为函数名,无前缀。如:mapCanvas()。

1.2 C++文件

每个类单独一个文件。

每个文件头都要有相关声明注释。

1.3 C++名称

变量:小写开头:mapCanvas。

枚举:大写开头:enum UnitType{Meters,Feet,Degrees,UnknownUnit}。

全局变量、宏:全部大小。const long GEOCRS = 3857。

1.4 代码风格

保持缩进。

保持{}单独占一行。

2 ui文件

所有QtDesigner生成的ui文件(xml,用于用户可视化布局),都有一个ui_xx.h的头文件。在这个文件中,包含两个类,一个ui_xx类,是ui文件的c源文件。另一个xx类,用于包装ui_xx类,并供其它程序调用。

Qgis规定:所有UI生成的类,都要加上Base后缀:QgsPluginManagerBase。

对话框:所有对话框应该实现以下功能:ToolTip Help,WhatsThis Help,Help button link to web(option)。

3 API维护原则

API尽量保持稳定,当需要更新时,要在旧API上加入声明和注释及新api注释。

//@deprecated doSomethingBetter()

Q_DECL_DEPRECATEDbool doSometing()

4  代码编写原则

对于外来代码或是多次使用代码,使用函数:便于维护,减少多个版本可能性。

比较时,常量在前:减少==被误写为=的可能性。

多使用空格和(),增加可读性,避免误解造成逻辑错误。

尽量使用{},减少可能的作用域错误。

5 GUI原则

5.1.1精减

尽量精减选项,设置合适的选项默认值。

尽量减少widget。排版麻烦。

任何控制都不要太大,尽量使用scroll。

5.1.2有组织

尽量分组。

不要使用嵌套的tab。

尽量使用QButtonBox。

对于退出等操作按键,要尽量单独放置,避免误操作。

高级选项不要放在一般选项中,防止新手混乱。

icon的风格要统一。

5.1.3意义明确

如果有打开对话框的按钮,加上…。

Label首字母大写,不要使用:结束。

尽量减少术语,以俗语替换。

6 模块架构

QGIS由四个主要组成部分:

GUI:所有的显示模块,基于core开发(qgis_gui.dll)。

CORE:所有基本功能(qgis_core.dll)。

ANALYSIS:所有分析功能,基本CORE开发(qgis_analysis.dll)。

NETWORK ANALYSIS:拓扑分析功能(qgis_networkanalysis.dll)。

参考:

http://hub.qgis.org/projects/quantum-gis/wiki/Developers_Corner#Help_on_writing_custom_apps_with_QGIS_API

http://qgis.org/api/2.4/modules.html

7 二次开发原则

使用Qgis进行开发,一般分为几种情况。

一是需要一个完整的GIS程序,也就是大而全的系统,这种系统具有所有常用的功能。那么基于此种需求的开发,应该扩展QGIS这个工程,利用已有的系统为基础开发新的功能。

QgisApp可以作为库直接被导出使用(只能扩展了),也可以直接在Qgis的工程进行开发(可以修改、删除、增加),然后导出。可以根据需要选择开发模式。

二是只需要GIS作为一个组件,需要与其它程序配合。这种情况下,应该使用QGIS的几个核心库进行开发,相信其中大部分功能,qgis中都有实现,可以此为基础进行开发。

不论以上那种情况,都要以Qgis工程为主线进行研究。

对于QgisApp中的组件,是否能够直接导出使用呢?

QGIS工程中都有导出接口,但所有内容都是以QgisApp为基础的,QgisApp使用时需要加载所有内容,比较庞大。想要只使用其中的部分组件几乎是不可能的(需要分离Qgis,但涉及面太广)。可能QGIS的本意是想逐渐完善后再分离出各个组件吧,但现在的代码都是将QgisApp内置在各个文件中的,如果没有QgisApp的支撑,几乎无法运行(个别简单的组件可以直接用库导出)。

所以,未来的QGIS有可能跟Arcgis一样做成各种分离的组件,更加方便二次开发。但现阶段,只能依赖核心库自己动手开发。我想,这也是为什么QGIS没有被大范围推广的原因吧。

 

 

 

 

 


你可能感兴趣的:(开发,qgis)