研究QGIS二次开发笔记(一)
为了在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二次开发笔记(一)的更多相关文章
- 【基于spark IM 的二次开发笔记】第一天 各种配置
[基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...
- Qt+QGIS二次开发:自定义类实现查询矢量数据的属性字段值(图查属性)
在GIS领域,有两种重要的查询操作,图查属性和属性查图. 本文主要介绍如何在QGIS中通过从QgsMapToolIdentify中派生自定义类实现查询矢量数据的属性字段值(图查属性). 重点参考资料: ...
- Qt+QGis二次开发:矢量图层的显示样式
原文链接:QGis二次开发基础 -- 矢量图层的显示样式
- Qt+QGIS二次开发:开发环境搭建(超级详细)
原文链接: 1.qgis二次开发环境搭建(超级详细) 2.QGIS开发教程(1)——QGIS开发准备工作 3.QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译
- Qt+QGis二次开发:加载栅格图层和矢量图层
一.加载栅格图像 加载栅格图像的详细步骤在下面代码里: //添加栅格数据按钮槽函数 void MainWindow::addRasterlayers() { //步骤1:打开文件选择对话框 QStri ...
- Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格
不过多的废话了,直接上源码: addChartlayers()方法时“打开海图”按钮的triggered()信号所绑定的槽函数. //添加海图数据小按钮槽函数 void MainWindow::add ...
- phpcms二次开发笔记
phpcms二次开发笔记 --soulsjie 以下载的全新的phpcms搭建一个新的站点为例,讲解如何利用phpcms进行二次开发 一.下载和安装phpcms http://www.phpcms.c ...
- Qt Qgis 二次开发——鼠标点击识别矢量要素
Qt Qgis 二次开发--鼠标点击识别矢量要素 介绍: 识别矢量要素需要用到QGis的一个工具类:QgsMapToolIdentifyFeature 一个QgsMapTool的子类的子类,官方文档描 ...
- RTX二次开发笔记2
问题一:关于DLL文件的引用 在安装文件夹内 APIObject.dll==>RTXSAPI.dll 服务器API接口 RTXCAPI.DLL ==> 客户端API接口 问题二:RTX二次 ...
随机推荐
- 深入.NET框架 项目--魔兽登录系统
创建魔兽系统相关窗体: 登录窗体(frmLogin) 注册窗体(frmRegister) 主窗体 (frmMain) 实现魔兽登录系统: 登录的界面如下 实现思路: 1.创建一个对象数组,长度为1 ...
- ASP.NET vs MVC vs WebForms
许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上ASP.NET是创建WEB应用的框架而MVC是能够用更好的方法来组织并管理代码的一种更高级 ...
- android SDK 快速更新配置(转)
http://blog.csdn.net/yy1300326388/article/details/45074447 1.强制使用http替换https链接 Tools>选择Options,勾选 ...
- HDU5400 Arithmetic Sequence
解题思路:这题看懂题目是很关键的,这个区间是等差数列,且公差为d1或d2, 特别注意单个数字也为等差数列.每次求出等差数列序列长度,然后 求出对应这种长度对应有多少种组合方式,累加起来就是结果. ...
- 10327 - Flip Sort
原文链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&pa ...
- Filling a Path 模式
Filling a Path When you fill the current path, Quartz acts as if each subpath contained in the path ...
- 下载个jquery-easyui-1.3.0使用,把他导入到myeclipse10里,jquery-1.7.2.min.js报错。 错误如下, Syntax error on token "Invalid Regular Expression Options", no accurate correc
1.选中报错的jquery文件“jquery-1.2.6.min.js”.2.右键选择 MyEclipse-->Exclude From Validation .3.再右键选择 MyEclips ...
- 更新Code First生成的数据库
1,首次访问时会自动生成数据库 2,某个Model增加一个字段后,再次访问会报,数据库不是最新 操作 1,Enable-Migrations 注意选择Default project为Star.Core ...
- 有关loading share object file libjvm.so: xxxxx 的那些问题
今天在跑一个有关postgresql产品的测试,要测试postgresql的有关Mirroring Controller的功能. 在执行mc_ctl命令的时候,报错:error while loadi ...
- [Everyday Mathematics]20150228
试证: $$\bex \int_0^\infty \sin\sex{x^3+\frac{\pi}{4}}\rd x =\frac{\sqrt{6}+\sqrt{2}}{4}\int_0^\infty ...