2020-10-25
好久没有弄Qgis开发了。最近有一个项目需要后台定时生产专题图,要求能够叠加边界矢量,叠加经纬度网格,绘制图例,绘制文字标签等。想来想去,排除了python的那类科学家用的绘图工具matplot什么的,排除了gnuplot太不好用了,这类工具相对遥感和GIS来说出图能力不够专业。那么剩下就的就是PyQgis和原生Qgis二次开发了。我的C++相对更熟一些,况且python写的东西总觉得不像个业务化的程序,因此确定重新捡起C++ Qgis的二次开发。
考虑到需求不要求交互,因此想直接使用QTCreator进行开发,减少配置VS2019方面的工作。
1.下载OSGeo4W 32bit版本。
2.在线安装QGis的相关包,目前应该是3.10.10的运行包和开发包。
3.下载QT开发工具qt-opensource-windows-x86-5.14.2.exe并安装。
4.打开QTCreator (4.11.1)
![ecd7acfa2996331ff082bacba7460f7d.png](https://img-blog.csdnimg.cn/img_convert/ecd7acfa2996331ff082bacba7460f7d.png)
![707c5601ac157df115b8e1c3dd917f1c.png](https://img-blog.csdnimg.cn/img_convert/707c5601ac157df115b8e1c3dd917f1c.png)
![36077e87acb5cc318543c0c83cf1cfb5.png](https://img-blog.csdnimg.cn/img_convert/36077e87acb5cc318543c0c83cf1cfb5.png)
![c67f718325705cceb5f7784987b65131.png](https://img-blog.csdnimg.cn/img_convert/c67f718325705cceb5f7784987b65131.png)
![23d6ecda6ebef661ff4c8b6cc909c5ea.png](https://img-blog.csdnimg.cn/img_convert/23d6ecda6ebef661ff4c8b6cc909c5ea.png)
5.选择项目配置(已经配好了msvc,之前如何配置的已经不记得了,应该问题不大。)
![7f49125479387e64831d328e20d6a3e8.png](https://img-blog.csdnimg.cn/img_convert/7f49125479387e64831d328e20d6a3e8.png)
![44dc1408c3a6b24cc1aee10f30aa5c51.png](https://img-blog.csdnimg.cn/img_convert/44dc1408c3a6b24cc1aee10f30aa5c51.png)
6.使用Release模式编译
![5d4a9f9854a20f8fa73192cdf5d9f2c2.png](https://img-blog.csdnimg.cn/img_convert/5d4a9f9854a20f8fa73192cdf5d9f2c2.png)
7.使用自动生成的main.cpp编译运行一下程序
会生成D:codingbuild-testQgslayout-msvc-Releaserelease 这个目录
8.把Qt和Qgis相关的dll和目录都考到这个目录下面
拷贝必要的文件和内容后,效果如下面这个样子:
![ec6154c32be71ad0d656caf4be7ccc32.png](https://img-blog.csdnimg.cn/img_convert/ec6154c32be71ad0d656caf4be7ccc32.png)
![ac0eb41a5807811baa830a7bd7a633b8.png](https://img-blog.csdnimg.cn/img_convert/ac0eb41a5807811baa830a7bd7a633b8.png)
![638bb5d11dff74612bbefd5cf81fd457.png](https://img-blog.csdnimg.cn/img_convert/638bb5d11dff74612bbefd5cf81fd457.png)
![1ebf4873ddac986c30d145b1ba656b8c.png](https://img-blog.csdnimg.cn/img_convert/1ebf4873ddac986c30d145b1ba656b8c.png)
9.修改pro文件
按照这个配就对了,如果缺了哪个就不会编译成功。
![597f9eabd6f2b8a056c7e2931cf98daa.png](https://img-blog.csdnimg.cn/img_convert/597f9eabd6f2b8a056c7e2931cf98daa.png)
QT += core gui xml widgets webenginewidgets
CONFIG += c++11 console
CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES +=
main.cpp
#QGIS
INCLUDEPATH += "C:OSGeo4Winclude"
INCLUDEPATH += "C:OSGeo4Wappsqgis-ltrinclude"
INCLUDEPATH += "C:QtQt5.14.25.14.2msvc2017include"
INCLUDEPATH += "C:QtQt5.14.25.14.2msvc2017includeQtWidgets"
INCLUDEPATH += "C:QtQt5.14.25.14.2msvc2017includeQtPrintSupport"
INCLUDEPATH += "C:QtQt5.14.25.14.2msvc2017includeQtSvg"
INCLUDEPATH += "C:QtQt5.14.25.14.2msvc2017includeQtWebEngineWidgets"
LIBS += -L"C:QtQt5.14.25.14.2msvc2017lib"
LIBS += -L"C:OSGeo4WappsQt5lib"
LIBS += -L"C:OSGeo4Wappsqgis-ltrlib" -lqgis_core -lqgis_gui -lqgis_app
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
10.编写代码main.cpp如下
#define _USE_MATH_DEFINES
11.编译运行最后出图结果如下
![47482ac5cbfcb79aa4c311c09957a99c.png](https://img-blog.csdnimg.cn/img_convert/47482ac5cbfcb79aa4c311c09957a99c.png)
(完)