研究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二次 ...
随机推荐
- CSS之剪切横幅
简述 clip-path属性指定一个应用到元素上的剪切路径.应用在SVG中<clipPath>元素上的属性值可以完全运用在clip-path属性上.还可以使用CSS Shapes模块中的基 ...
- PHP实现站点pv,uv统计(一)
具体步骤分为数据采集脚本,数据收取服务,数据分析脚本,数据存储服务 采集脚本一般有两种形式,一种是简单的页面插入一个图片进行请求,一种是复杂的动态生成js标签,引入一段js(这时采集服务器会网往客户端 ...
- HDU 4750
解题方法,,,首先应该可以看出来是一颗 最小生成树,任意一条的边的价值是不同的:所以计算出最小生成树的每一条边有多少对顶点满足他的 f 值就是这条边的 权值,因此可以在生成最小生成树的时候,进行一下统 ...
- Windows下配置cygwin和ndk编译环境
cygwin安装 正确的安装步骤其实很简单:1. 下载setup-86_64.exe 2. 直接从网上下载安装,选择包时,顶部选择“default”不变 3. 搜索make,勾选make,cmake, ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.7. 配置资源与参数
2.7.配置资源与参数 2.7.1. 修改主机名称 [root@linuxrac1 ~]# cd /etc/sysconfig [root@linuxrac1 sysconfig]# vi netwo ...
- 看来ms sql server if 中定义个变量出了if 还是可以用的
begin declare @abc int; end print @abc 可以打出1出来
- 嵌入式 Linux下修改MAC地址
Linux下修改MAC地址 方法一: 1.关闭网卡设备ifconfig eth0 down2.修改MAC地址ifconfig eth0 hw ether MAC地址3.重启网卡ifconfig eth ...
- hdu 1074(状态压缩dp+记录路径)
题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...
- [Papers]NSE, $u$, Lorentz space [Sohr, JEE, 2001]
$$\bex \bbu\in L^{p,r}(0,T;L^{q,\infty}(\bbR^3)),\quad\frac{2}{p}+\frac{3}{q}=1,\quad 3<q<\inf ...
- SVN中检出(check out) 和 导出(export) 的区别
SVN是常用的一种常见的版本控制软件.SVN中检出(check out) 和 导出(export) 的区别主要有如下几条: check out跟check in对应,export跟import对应. ...