为了在QT程序中嵌入一个地图,最终选择了QGIS来干这件事。选型阶段真是呵呵。我折腾的是QGIS2.4.0。

  首先,到官方网站下载安装QGIS。如果你跟我一样懒的话,可能希望下载一个已经编译好的windows版的QGIS。但是这里有个陷阱。咱们是要做二次开发的,千万不要下载安装那个看上去很美的QGIS Chugiak安装包,那里面缺lib库啊我摔!!一定要用那个在线安装下载的osgeo4w。下载选择advance install,在选择下载项时注意把libjpeg_ipp那个库取消掉,安装没有ipp的版本的,否则你这个版本在运行安装时就会提醒你找不到ippj-5.3.dll。在线下载大概半个多小时终于下载并安装好了。

  然后就是创建一个QT工程啦。

  创建好之后,咱们的目的是用QgsApplication替换掉QApplication跑一个最基本的MainWindow程序。那么在能跑起来之前都会遇到哪些坑呢?

  首先预处理器配置里要写上:

  GUI_EXPORT=__declspec(dllimport)

  ANALYSIS_EXPORT=__declspec(dllimport)

  CORE_EXPORT=__declspec(dllimport)

  这三行,否则会有一堆编译错误。

  然后找到OSGeo4W/apps/qgis-dev/,使用里面的bin目录,lib目录和include目录。你可能会发现和qgis-dev并列的还有个qgis目录,先不要用那个,qgis-dev的库编译出来是带着debug信息的,咱们还在测试阶段么不是。

  然后你可以正确编译出exe了,但是还不能运行。需要把OSGeo4W/bin下的dll全部都丢到exe同级目录下。你会说老师你TM傻啊,我把OSGeo4W/bin加入到系统变量里不就行了吗?

  不行!这是因为你可能跟我一样在机器里还装了乱七八糟的别的库,比如OSG3.3啊,flightgear啊。这些开源库可能依赖了不同版本的同一lib库,而你之前已经将他们加入到path中了。你可能会碰到说找不到定位序数点TIFFUnsetField 于libtiff.dll上。因为系统先找到的不是qgis编译时用的libtiff.dll。所以为了简单起见还是全拷贝吧,也就几百M。

  然后你以为可以开心的运行了?天真。你用debug跑的时候会碰到QT无情的报错:QWidget:Must construct a QApplication before a QPaintDevice. 这是因为你没用debug版本的库和dll啊,还是切换到release下吧。或者你就去自己编译一个debug版本的库吧。

  切到release下就可以跑了,一个空白的QT  mainwindow,感不感人?

研究QGIS二次开发笔记(一)的更多相关文章

  1. 【基于spark IM 的二次开发笔记】第一天 各种配置

    [基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...

  2. Qt+QGIS二次开发:自定义类实现查询矢量数据的属性字段值(图查属性)

    在GIS领域,有两种重要的查询操作,图查属性和属性查图. 本文主要介绍如何在QGIS中通过从QgsMapToolIdentify中派生自定义类实现查询矢量数据的属性字段值(图查属性). 重点参考资料: ...

  3. Qt+QGis二次开发:矢量图层的显示样式

    原文链接:QGis二次开发基础 -- 矢量图层的显示样式

  4. Qt+QGIS二次开发:开发环境搭建(超级详细)

    原文链接: 1.qgis二次开发环境搭建(超级详细) 2.QGIS开发教程(1)——QGIS开发准备工作 3.QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译

  5. Qt+QGis二次开发:加载栅格图层和矢量图层

    一.加载栅格图像 加载栅格图像的详细步骤在下面代码里: //添加栅格数据按钮槽函数 void MainWindow::addRasterlayers() { //步骤1:打开文件选择对话框 QStri ...

  6. Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格

    不过多的废话了,直接上源码: addChartlayers()方法时“打开海图”按钮的triggered()信号所绑定的槽函数. //添加海图数据小按钮槽函数 void MainWindow::add ...

  7. phpcms二次开发笔记

    phpcms二次开发笔记 --soulsjie 以下载的全新的phpcms搭建一个新的站点为例,讲解如何利用phpcms进行二次开发 一.下载和安装phpcms http://www.phpcms.c ...

  8. Qt Qgis 二次开发——鼠标点击识别矢量要素

    Qt Qgis 二次开发--鼠标点击识别矢量要素 介绍: 识别矢量要素需要用到QGis的一个工具类:QgsMapToolIdentifyFeature 一个QgsMapTool的子类的子类,官方文档描 ...

  9. RTX二次开发笔记2

    问题一:关于DLL文件的引用 在安装文件夹内 APIObject.dll==>RTXSAPI.dll 服务器API接口 RTXCAPI.DLL ==> 客户端API接口 问题二:RTX二次 ...

随机推荐

  1. UVa 12265 (单调栈) Selling Land

    紫书上分析了很多很多,超详细,= ̄ω ̄= 每扫描一行可以计算一个height数组,表示从这块空地向上延伸多少块空地,而且这个数组可以逐行递推. 首先对于每一行来说维护一个单调栈,栈里放的是矩形的左上角 ...

  2. UVa 11636 (注意读题) Hello World!

    这道题巨坑啊,样例中以-1结束输入的,所以我就天真的以为测试数据也是以-1结束输入的 其实人家原文中说: Input is terminated by a line containing a nega ...

  3. asp.net限时发送手机验证码

    html代码 <p> <strong>手机验证码:</strong> <asp:TextBox ID="code" runat=" ...

  4. Using unique option prefix myisam-recover instead of myisam-recover-option

    [转载]关于mysql error.log报"Using unique option prefix myisam-recover instead of myisam-recover-opti ...

  5. 通过运行时动态给OC分类添加属性

    #import <UIKit/UIKit.h> /** iOS 开发中,分类默认不允许保存属性 如果在分类中,定义一个属性,需要自己实现 getter & setter 方法,而且 ...

  6. HDU1495 非常可乐

    解题思路:简单的宽搜,见代码: #include<cstdio> #include<cstring> #include<algorithm> #include< ...

  7. 【NYOJ-187】快速查找素数—— 枚举法、筛选法、打表法

    快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N ...

  8. Shell教程5-Shell运算符

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  9. Android应用开发学习—Toast使用方法大全

    Toast 是一个 View 视图,快速的为用户显示少量的信息. Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示. Toast 最 ...

  10. GitHub的代码托管和使用方法

    原文  GitHub托管 借助GitHub托管你的项目代码 PS:话说自己注册了GitHub都很久了,却没有怎么去弄,现在系统学习一下,也把自己的学习经历总结下来share给大家,希望大家都能把Git ...