摘要: 要进行二次开发首先就是环境配置。这里使用的QGis版本为1.8。打开Visual Studio 2010,新建一个Qt application(如果没有这个项目模板说明你没有正确安装Qt for vs add-in插件),这样做可以避免我们手动去添加Qt的库文...
要进行二次开发首先就是环境配置。这里使用的QGis版本为1.8。打开Visual Studio 2010,新建一个Qt application(如果没有这个项目模板说明你没有正确安装Qt for vs add-in插件),这样做可以避免我们手动去添加Qt的库文件目录。出现如下界面:
注意将XML library勾上,这个非常重要,不然后面会报错。因为QgsMapCanvas需要用到QDomNode文件,而QDomNode是一个XML文件,包含在Qt的XML library中。
点击Finish之后,生成解决方案。在工程项目上点击右键---属性,出现工程属性配置对话框,在这里我们需要配置QGis的开发库路径,分别包含4个设置步骤,分别是:
1.添加附加包含目录:
选中C/C++选项卡的“常规”选项,在附加包含目录当中加入编译QGis生成的include文件夹路径,如:
2.添加预处理命令:
选中C/C++选项卡下的“预处理器”命令,添加预处理定义,输入下图中的三行预处理命令:
3.添加附加库目录
在链接器选项卡下,打开“常规”,添加附加库目录,将QGis开发库中的lib文件夹添加进来,例如:
4.输入附加依赖项
选择链接器选项卡中的“输入”选项,添加附加依赖项,将下图所示三行个lib文件名称添加进来:
OK,大功告成,下面就是写测试代码了。
将QGis官方文档中的一段代码贴过来,大家可以用此来测试自己的环境是否正确搭建。非常简单,把你的main.cpp文件中的代码替换为下面的代码:
#include#include #include #include #include #include #include #include #include #include int main( intargc, char *argv[] ) { QgsApplication a( argc, argv ,true); ////////////////////////////////////////////////////////////////////////// //注意这三行代码需要更改路径; QString myPluginsDir ="D:/3rd_Party/qgis1.8vs2008/plugins";//插件路径(编译好的qgis文件夹下的plugins文件夹); QString myLayerPath ="E:/Jacory/Work/Clip.shp";//图层路径,必须设置为你电脑里面shp文件的路径,不然打不开数据; QStringmyLayerBaseName = "Clip";//图层名称; ////////////////////////////////////////////////////////////////////////// QgsProviderRegistry::instance( myPluginsDir); //初始化插件的目录; QgsVectorLayer * mypLayer = newQgsVectorLayer( myLayerPath, myLayerBaseName, "ogr" ); //初始化矢量图层; QgsSingleSymbolRenderer *mypRenderer = newQgsSingleSymbolRenderer( mypLayer->geometryType() ); QList myLayerSet; mypLayer->setRenderer( mypRenderer ); QgsMapLayerRegistry::instance()->addMapLayer( mypLayer, TRUE ); myLayerSet.append( QgsMapCanvasLayer(mypLayer, TRUE ) ); QgsMapCanvas * mypMapCanvas = newQgsMapCanvas( 0, 0 ); mypMapCanvas->setExtent(mypLayer->extent() ); mypMapCanvas->enableAntiAliasing( true); mypMapCanvas->setCanvasColor( QColor(255, 255, 255 ) ); mypMapCanvas->freeze( false ); mypMapCanvas->setLayerSet( myLayerSet); mypMapCanvas->setVisible( true ); mypMapCanvas->refresh(); return a.exec(); }
这里要注意的是上面标注出来的三行路径代码需要更改。
OK,非常简单,将QGis安装目录中的bin文件夹下各种dll文件拷贝过来就能够调试运行了,注意,不是QGis开发包路径,是QGis Desktop安装的路径下面的bin文件夹。当然,你不想安装QGis也可以将OSGeo4W的bin文件夹下的dll和QGis开发库目录的bin文件夹下的dll文件,以及所有用到的第三方库的dll文件都拷贝到VS工程目录的文件夹下也可以。dll文件如下图:
我没有去研究到底哪些需要,哪些不需要,我采取了最简单的办法,把这些dll全部复制过去。。。
最后,调试运行,出现下图所示界面,恭喜你,你成功了!
补充一点:如果你运行时出现“无法找到QDomDocument(或者QDomNode)”的错误,说明你的Qt没有包含XML library,上面已经讲过了。这里你还是可以在VS菜单栏里面选择Qt菜单---Project Settings进行设置,如下图: