赞
踩
最近要倒腾一下Qgis和QT的二次开发,感觉是一个全新的领域,预计会有不少坑,而且做的过程中感觉资料也不多,于是想着要不顺手记录下来过程吧~
网上看了几个适合的教程:
1: 最后是靠知乎大哥王峰dev的文章下成功搭建环境的,文章总结了这个环境搭建的核心:dll文件的配置。
这个就直接装就好了。没有什么难度和坑。
这个的下载可以说是超级慢了,网速快或者科学上网速度比较快的同学可以自行官网下载,下载过程可以参考上面知乎文章的教程,建议选择http://download.osgeo.org的链接,是给的三个中比较快的。
我在这里下载了3.10版本的最新的长期维护版本(ltr版本),其中比较核心的应该是ltr-devel以及ltr-grass-plugin模块,但是为了保险,直接都下了比较放心。下载完之后的图片如下所示:
建议下载路径设定为默认路径,这样和别人的教程设定比较一致,不容易因为路径设定的不熟悉出bug。
因为根据上面的步骤下载的过程也挺艰辛地,这里顺便附上了下载后的包的压缩包,如果有下不了,或者不想下的同学可以直接这里下下来,放到C盘就可以了。这是Qgis3-10-ltr版本
链接:https://pan.baidu.com/s/1QpdwWzxnSXgylJ1V19B98Q
提取码:tgz5
这个部分可以参考QT教程或者上面知乎文章,只是为了验证QT Creator的安装正确以及正常运作,没有涉及到Qgis的文件。
比较关键的语句包括:
QT += core gui xml //由于Qgis用上了xml,所以要加上这个库
// 这两个语句指明了Qgis库头文件(.h)文件的路径,这里由于不熟悉环境配置,使用了绝对路径。
//有能力的大家建议使用环境配置,这样可移植性比较强。
INCLUDEPATH += "C:\OSGeo4W64\apps\qgis-ltr\include"
INCLUDEPATH += "C:\OSGeo4W64\include"
// 配置了Qgis库的lib文件的路径
LIBS += -L"C:\OSGeo4W64\apps\qgis-ltr\lib" -lqgis_core -lqgis_gui
引入了头文件;
修改QApplication成QgsApplication,并增加第三个参数true;
#include "mainwindow.h" #include <QApplication> #include <QDir> #include "qgsapplication.h" int main(int argc, char *argv[]) { QgsApplication a(argc, argv,true); QString cpath = QDir::currentPath(); QgsApplication::initQgis(); MainWindow w; w.show(); return a.exec(); }
下面这一段拷贝了上面知乎链接文章的文字,并做了小量修改。图片就略了,有需要的自己去查看。总之就是把下载下来的文件(就是上面百度链接里的文件)都复制粘贴到QT Creator项目工程文件夹下。
注意,以下拷贝的东西一个都不能少。如果不想拷贝,那就只能自己配置环境变量了。
[Paths]
Prefix=.
这里顺便附上我根据上面的步骤建立的工程文件:
链接:https://pan.baidu.com/s/1dxKkjwP5f6j68VwpKaky0g
提取码:fxat
在我参考的第一个教程,即陈关周大佬的博客的时候,对于非unix系统,他的pro文件里多了这样两句话。
但根据我的个人尝试,发现当我加上这两句话之后,连最原始的QT项目都无法正常运行(会显示找不到头文件。但是也可以显示出来窗口,但没法正常结束)。因此就略去了这两句话。
具体这两句话的含义、原因未详,在此做一个记录。如果有知道的希望可以评论指导一下。
DEFINES += CORE_EXPORT=__declspec(dllimport)
DEFINES += GUI_EXPORT=__declspec(dllimport)
在我第一次配置好上面的步骤后,发现程序怎么运行都会报这个错。当我不调用Qgis库函数的时候则能正常运行,因此排除了由于环境配置引起的原因。
但错误信息并没有在对话窗中给出更多信息。后面根据运行release文件夹中生成的exe文件弹出的错误框,知道了是由于复制过程了出了点问题,缺失了部分dll文件导致的。
这个错误的表现形式似乎也是找不到一些头文件,但是不敢确定,因为已经过去几天了。
关于如何在QT Creator环境下怎么设定MSVC的教程,请参考了超级大洋葱806的CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。