QT(5.12)+Qgis(3.10)开发环境搭建(QT Creator)

最近要倒腾一下Qgis和QT的二次开发,感觉是一个全新的领域,预计会有不少坑,而且做的过程中感觉资料也不多,于是想着要不顺手记录下来过程吧~

网上看了几个适合的教程:
1: 最后是靠知乎大哥王峰dev的文章下成功搭建环境的,文章总结了这个环境搭建的核心:dll文件的配置。

QT Creator安装

这个就直接装就好了。没有什么难度和坑。

Qgis二次开发库的下载

这个的下载可以说是超级慢了,网速快或者科学上网速度比较快的同学可以自行官网下载,下载过程可以参考上面知乎文章的教程,建议选择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+Qgis在QT Creator下的环境搭建

1 新建QT Creator项目

这个部分可以参考QT教程或者上面知乎文章,只是为了验证QT Creator的安装正确以及正常运作,没有涉及到Qgis的文件。

2 配置QT项目文件

2.1最后项目的pro文件如下图所示:

比较关键的语句包括:

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

QT+Qgis项目配置文件

2.2 修改main函数

引入了头文件;
修改QApplicationQgsApplication,并增加第三个参数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();
}

2.3 拷贝Qgis库文件

下面这一段拷贝了上面知乎链接文章的文字,并做了小量修改。图片就略了,有需要的自己去查看。总之就是把下载下来的文件(就是上面百度链接里的文件)都复制粘贴到QT Creator项目工程文件夹下。

注意,以下拷贝的东西一个都不能少。如果不想拷贝,那就只能自己配置环境变量了。

  1. 拷贝C:\OSGeo4W\apps\Qt5\bin 目录下全部dll到exe目录(在工程文件的release文件夹下)下。大约300多MB(这个他写的大小和我实际用的大小还不太一样,我忽略了这个差异)。QT相关库
  2. 拷贝C:\OSGeo4W\apps\Qt5\plugins 目录下的platforms目录到 exe目录下plugins目录(自己新建)里。Qt插件库
  3. 拷贝C:\OSGeo4W\apps\qgis-ltr\bin 目录下全部文件考到exe目录下。Qgis相关库
  4. 拷贝C:\OSGeo4W\bin 目录下全部dll文件和gdalplugins目录考到exe目录下。GDAL、OSGEO相关库
  5. 把C:\OSGeo4W\apps\qgis-ltr\plugins目录下全部文件考到exe同级plugins目录下,该目录下的dll是各种文件的驱动程序,如果缺少则无法打开文件。Qgis插件库
  6. 拷贝C:\OSGeo4W\share 中gdal目录到exe同级的share目录下。这个目录包含了GDAL_DATA中的辅助文件,在代码中需要注册GDAL_DATA的环境变量到这个目录。
  7. 在exe目录下新建一个qt.conf文件,填写如下内容,用txt写完之后换个拓展名就可。
    定制的qgis程序启动后,自动到上面这个文本文件里读取qt相关的库文件根路径,我这里把qt相关库文件(包括plugins)都放在exe同级目录下,所以这里路径配置为当前目录“一个点”。
[Paths]
Prefix=.
  1. 上面配置好了以后,在Release模式下重新生成exe
  2. 程序成功运行,则弹出窗口,说明各种路径、DLL文件成功链接上了。

这里顺便附上我根据上面的步骤建立的工程文件:
链接:https://pan.baidu.com/s/1dxKkjwP5f6j68VwpKaky0g
提取码:fxat

3 过程中出现的一些问题,以及解决办法

3.1 Define语句的问题

在我参考的第一个教程,即陈关周大佬的博客的时候,对于非unix系统,他的pro文件里多了这样两句话。
但根据我的个人尝试,发现当我加上这两句话之后,连最原始的QT项目都无法正常运行(会显示找不到头文件。但是也可以显示出来窗口,但没法正常结束)。因此就略去了这两句话。
具体这两句话的含义、原因未详,在此做一个记录。如果有知道的希望可以评论指导一下。

DEFINES += CORE_EXPORT=__declspec(dllimport)
DEFINES += GUI_EXPORT=__declspec(dllimport)

3.2 程序异常结束(The Process was ended forcefully)

在我第一次配置好上面的步骤后,发现程序怎么运行都会报这个错。当我不调用Qgis库函数的时候则能正常运行,因此排除了由于环境配置引起的原因。
但错误信息并没有在对话窗中给出更多信息。后面根据运行release文件夹中生成的exe文件弹出的错误框,知道了是由于复制过程了出了点问题,缺失了部分dll文件导致的
程序异常结束
执行生成的exe文件得到更具体的错误信息

3.3 编译器导致的错误(应选择MSVC编译器而不能选择MinGw编译器)

这个错误的表现形式似乎也是找不到一些头文件,但是不敢确定,因为已经过去几天了。
关于如何在QT Creator环境下怎么设定MSVC的教程,请参考了超级大洋葱806的CSDN博客

成功走出了项目的第一步,希望之后顺利进行吧~

猜你喜欢

转载自blog.csdn.net/j_in2018/article/details/107304496