二次开发需要获取QGIS的一些重要对象,这些对象由一些重要的类实现。
1、QgisInterface
该接口类的需要引用头文件
#include<qgisinterface.h>
是通过插件入口函数获取该对象的
QGISEXTERN QgisPlugin* classFactory(QgisInterface* interface)
{
return new MyPluginsMain(interface, sName, sDescription, sCategory, sPluginVersion, QgisPlugin::UI);
}
2、QgsMapCanvas
该类非常重要,是QGIS 画布类,很多重要操作都是通过它实现的。qgis的地图刷新,要素定位,闪烁,qgis 工具类的激活,qgis的拾取功能都会用到这个类,是通过这个类调用相关方法来实现。
该类的获取通过 1的 方法获取的。其中interface 是QgisInterface* 的指针对象。
QgsMapCanvas* canvas=interface->mapCanvas()
3、QgsLayerTreeView
Qgis图层视图类,是与Qgis图层树绑定的,Qgis的图层的部分功能是通过这个类来实现的,Qgis的很多功能都和它有关系。Qgis 大部分功能都有一个当前图层的设计。Qgis 大部分功能只对当前选中图层才有操作权限。Qgis 的当前图层是通过这个类来实现。
这个类也是通过 QgsMapCanvas获取的。其中interface 是QgisInterface* 的指针对象。
QgsLayerTreeView* m_layerTreeView = interface->layerTreeView()
该类也可以获取图层树的节点,其中layerTreeView 的是QgsLayerTreeView* 指针对象
QgsLayerTreeLayer* nodeLayer = layerTreeView->layerTreeModel()->rootGroup()->findLayer(layer->id())
4、QgsProject
Qgs 工程类。一般来说,获取Qgis 功能里面的图层是通过这个类来实现。这个对象通过Qgis 静态函数的单实例实现的。通过QgsProject的静态函数获取
QgsProject* project=QgsProject::instance()
通过这个类获取所有图层,也可以根据图层名字或者id获取需要的图层,在此就不再演示了。
QMap<QString,QgsMapLayer*> maplist= QgsProject::instance()->mapLayers();
5、小结
了解这个四个类,就可以进入Qgis的开发了,这四个类有着Qigs的重要的入口函数。