QT5.12.6+QGIS3.10二次开发(Qtcreater)(一)环境搭建

2023-11-06

一、前言

QtCreater的编译模式有msvc和mingw两种,msvc调用的第三方库是.lib结尾的,而mingw调用的库是.a结尾的。在windows下下载的QGIS开发包中的库文件是.lib库,所以,在QtCreater中直接使用下载的QGIS库只能采用msvc编译模式(至于mingw下调用.lib库比较麻烦,而且容易出各种问题,在此不做深入讨论),本文主要说明使用msvc编译模式下的环境搭建方法。
准备工作:

  1. 下载vs_Community.exe(visual studio 2017 社区版)
    链接:https://pan.baidu.com/s/1lQQUkW6AMZCVqowlJpLybw
    提取码:j1zs
    (visualstudio官网下载也行,但是有时候速度很慢)
  2. 下载qt-opensource-windows-x86-5.12.6.exe(或者其他版本)
    下载地址:
  3. 下载osgeo4w-setup-x86_64.exe
    下载地址:https://www.qgis.org/en/site/forusers/download.html
    (QGIS in OSGeo4W,有64位和32位两个版本,根据自己需要下载,需要跟QT版本一致,也就是说,如果此处下载32位版本,qt安装时也需要安装32位版本;如果此处下载64位版本,qt安装时也需要安装64位版本)
    其中,vs_Community.exe和osgeo4w-setup-x86_64.exe都是网络安装包,所以安装过程需要联网。

二、VS2017安装

1.双击vs_Community.exe,开始安装vs2017
在这里插入图片描述

点击“继续”,等待下载器下载、安装完成,
在这里插入图片描述

下载器安装完成后自动启动,进入准备界面,如下:
在这里插入图片描述

加载完毕后,出现如下界面:
在这里插入图片描述

选中“使用C++的桌面开发”,右下角选择“下载完后安装”,点击安装按钮开始安装。大约20-30分钟左右。
2.安装完毕后,vs默认未安装调试器,需要手动安装,否则Qt安装完成后MSVC的debugger缺失。安装步骤如下:
打开控制面板程序,找到“Windows Software Development Kit –Windows 10.0xxxx”,鼠标右键,选择“更改”
在这里插入图片描述

在弹出的安装程序中,选择“Change”,点击“Next”按钮
在这里插入图片描述

在窗口中勾选“Debugging Tools for Windows”,然后点击“Change”按钮(因为我是安装完后截的图,所以“Change”按钮是灰色的),等待安装完成即可。
在这里插入图片描述

三、安装QT5.12

1.双击安装程序开始安装,默认安装在C盘,一直下一步即可。在选择组件部分根据自己的需要选择,简单说一下各组件含义:
Qt5.12.6下时Qt的组件,msvc是msvc编译模式下所需要的库文件,mingw是mingw编译模式下所需的库文件,后面分别是ARM和安卓开发所需要的库文件。
Developer and Designer Tools是开发工具。
在此处,只需要安装msvc2017 64-bit和QtCreater即可(因为我使用的是64位QGIS,所以此处选择64位msvc库,其它组件根据需要选择是否安装,勾选mingw只是因为个人想在其它项目中使用,source组件建议勾选,在编码过程中比较有用)
在这里插入图片描述
在这里插入图片描述

完成安装后,启动QtCreater,在“工具”—“选项”—“Kits”中,Qt自动检测到MSVC编译器(没有黄色小图标说明安装正常)。
在这里插入图片描述

2新建一个工程,测试Qt安装是否成功(一般问题不大,创建一个窗口程序,能跑起来就行~~~~这里就不多说了)
注意选择MSVC编译模式。
在这里插入图片描述

四、安装QGIS

双击安装程序,选择“Advanced Install”,“install form network”,后面的默认配置,下一步即可。在选择下载地址界面,第一个非常非常慢,可以在第二个和第四个之中选一个。
在这里插入图片描述

在“select package”界面,在搜索框中输入“qgis”(不用敲Enter键),筛选qgis相关包,我安装的是当前的长期有效版本(ltr),所以在带“ltr”的包中选择相同版本号的包下载即可。

在这里插入图片描述

下一步完成安装即可,至此,安装工作全部完成。

五、环境测试

1.新建一个工程,选择Qt Widgets Application,在Kits步骤选择MSVC2017编译模式。
在这里插入图片描述
在这里插入图片描述

2.修改pro文件:

#需要添加xml模块
QT       += core gui xml 
#这两个语句指明了Qgis库头文件(.h)文件的路径。(这个地方网上资料有添加INCLUDE和LIB环境变量来实现的,但是我在“项目”-“构建环境”中对INCLUDE和LIB修改后,不起作用,原因未知,所以此处使用了绝对路径)*
INCLUDEPATH += C:\OSGeo4W64\apps\qgis-ltr\include
INCLUDEPATH += C:\OSGeo4W64\include
# 配置了Qgis库的lib文件的路径
LIBS += -LC:\OSGeo4W64\apps\qgis-ltr\lib -lqgis_core -lqgis_gui
#宏
unix{
DEFINES += CORE_EXPORT=
DEFINES += GUI_EXPORT=
}
!unix{
DEFINES += CORE_EXPORT=__declspec(dllimport)
DEFINES += GUI_EXPORT=__declspec(dllimport)
}

可以把OSGeo4W的安装目录配置到环境变量,添加的时候如下:
设置环境变量:OSGEO4W_HOME C:\OSGeo4W64
在pro文件中使用:
INCLUDEPATH += $( OSGEO4W_HOME)/ apps\qgis-ltr\include

3.修改main.cpp
修改后内容如下:

#include "mainwindow.h"
#include "qgsapplication.h"
#include <QDir>
int main(int argc, char *argv[])
{
    QgsApplication a(argc, argv,true);
    QgsApplication::setPluginPath(QDir::currentPath() + "/plugins");
    QgsApplication::initQgis();  //初始化QGIS应用
    MainWindow w;
    w.show();
    return a.exec();
}

4.使用release模式编译
5.拷贝相关依赖到目录
(1)拷贝C:\OSGeo4W\apps\Qt5\bin 目录下全部dll到exe目录
(2) 拷贝C:\OSGeo4W\apps\Qt5\plugins 目录下的platforms目录到 exe目录下
(3)拷贝C:\OSGeo4W\apps\qgis-ltr\bin 目录下全部文件考到exe目录下。
(4)拷贝C:\OSGeo4W\bin 目录下全部dll文件和gdalplugins目录考到exe目录下
(5)把C:\OSGeo4W\apps\qgis-ltr下的plugins文件夹拷贝到exe目录下
(6)拷贝C:\OSGeo4W\share 中gdal目录到exe同级的share目录下(需要手动新建share文件夹)
6.重新编译运行,弹出窗口说明配置完成

六、其它问题

1.环境变量PROJ_LIB
虽然在上一章节到步骤6后程序能跑起来,但是在加载图层时,如果不配置PROJ_LIB环境变量,就会出错(一堆pro.db的错误),所以这里就一起说一下。
使用OSGeo4W安装QGIS后,安装目录下有以下两个proj目录:
C:\OSGeo4W64\share\proj
C:\OSGeo4W64\apps\proj-dev\share\proj
网上有资料中使用第二个目录,但我在使用第二个目录时虽然没有了proj.db的错误,但是会出现”proj_create_from_database: SQLite error on SELECT name, type,…”的错误。使用第一个目录的时候则没有再报错,所以我把PROJ_LIB环境变量配置成了C:\OSGeo4W64\share\proj
环境变量的配置方法:
在“项目”–“构建环境”,点击“详情”,点击“添加”按钮,新增一条配置。
2.M_PI问题
如果出现M_PI未声明的标识符问题,则需要添加在pro文件中添加如下内容:
DEFINES += _USE_MATH_DEFINES

3.编码格式问题
虽然在编译时能通过,但是会报“warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”的警告,解决方法如下:
QtCreater中点击“项目”—“Project Setting”—“编译器”,将编译器设置修改为“自定义设置”,在文件编码处,默认编码设为“UTF-8”,UTF-8 BOM处选择“如果编码是UTF-8则添加”,然后将出现警告的文件修改一下然后保存(敲个回车、打个空格都行,别出BUG就行),再重新编译即可(添加的qgis头文件仍然会报警告,目前没找到解决办法)。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT5.12.6+QGIS3.10二次开发(Qtcreater)(一)环境搭建 的相关文章

  • 在新窗口中打开 SAS 程序

    目前 当您在 Windows 中双击 SAS 文件时 它将在您已打开的现有 SAS 会话中打开它 有没有办法让它在窗口中单击时会启动一个新的 SAS 窗口 据我所知 SAS 是一个所谓的 单实例 应用程序 因此它的默认行为是在现有会话中打开
  • 如何在 NERDTree 中显示隐藏文件(以句点开头)?

    我怎样才能使NERDTree https github com scrooloose nerdtree显示以 a 开头的文件 时期 我有一个名为 hgignore在项目目录中 如果我使用 NERDTree 浏览到该目录 该文件不会显示在树中
  • Qt中Q_PROPERTY的意义是什么?

    我无法理解 Q PROPERTY 的用法 Q PROPERTY 如何帮助程序具有防御性 它是干什么用的 我看过这个论坛 但确实无法应用 我已经理解了这个例子 但不明白它的用法 这是一个例子 我能从中得到什么 我知道阅读将赋予只读特权 wri
  • Python 可执行文件:py2exe 还是 PyInstaller?

    要创建可执行文件 Windows 我假设我们应该使用其中之一 Py2exe 或 PyInstaller 它们之间有什么区别 Py2exe 和 PyInstaller 都是包装器 但我注意到以下几点差异 Py2exe 与 python2 4
  • 针对初学者的 QT 商业许可证与非商业许可证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 QT 许可似乎非常反学习 因为据我所知 用它开发的任何东西都只能是商业的当且仅当 its entire开发是在使用商业许可证的情况下完成的
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • Windows7上python3.5无法安装BeautifulSoup4

    我已经从下载了 beautifulsoup4 4 5 3 tar gzhttps www crummy com software BeautifulSoup bs4 download 4 5 https www crummy com sof
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Windows 上的 Openssl 错误 0x02001005 和 0x2006D002?

    我正在尝试使用 openssl 将 cer 证书转换为 p12 证书 这是我正在使用的命令 C OpenSSL Win32 bin gt openssl x509 inform der in developer identity cer o
  • 取消后调用 boost::asio 异步处理程序没有错误

    我的代码在单个线程中使用 boost asio 和 io service 来执行各种套接字操作 所有操作都是异步的 每个处理程序都依赖于boost system error code 特别boost asio error operation
  • QTabWidget 选项卡在垂直方向,但文本在水平方向

    我正在尝试用 C Qt 制作一个带有这样的侧边栏的应用程序 但是当将 QTabWidget 方向设置为西时 它会使文本垂直 如何让文本位于左侧 但水平对齐 PS 我不需要图标 提前致谢 您可以使用QListWidget http doc q
  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例
  • 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?

    更大的问题是一般如何使用实时 ETW 网络堆栈事件 但我特别感兴趣Microsoft Windows NDIS PacketCapture 提供程序 所有其他网络堆栈提供程序都部分工作 但 NDIS PacketCapture NDIS P
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了

随机推荐

  • Android NV21与I420数据旋转90°

    概述 现在图片数据存储方式大体上分为两种 RGB和YUV模型 RGB本篇不讲 YUV是根据一个亮度 Y分量 和两个色度 UV分量 来定义颜色空间 YUV采样可分为 YUV 4 4 4采样 每一个Y对应一组UV分量 一个YUV占8 8 8 2
  • .8布尔值、Null和Undefined

    一 布尔值 Boolean 只有两个值 返回值 二 Null Null类型的值只有一个 null 专门用来表示一个空的对象 返回值 三 Undefined Undefined类型的值只有一个 undefined 声明一个变量而不赋值则为该值
  • Django2 提示 "**" is not a registered namespace

    定义应用 student 的命名空间一般步骤 第一步 应用 student 的url py 文件添加如下代码 include 函数允许引用其他的 URLconf 每当 django 遇到 include 它会截取 URL 中匹配到的前面的部
  • 微信小程序发布代码步骤

    看图说话 1 在HBuilder X 点击发行 终端会显示发行成功 2 在微信开发者工具 会新打开一个页面 点击详情看下路径是不是 dist build 这才是压缩要发行 3 点击确定 根据自己需求改版本号等等信息 点击提交 4 浏览器打开
  • [电动智能汽车-2]:原理 - 纯电动汽车的基本安全与安全操作的基本流程

    目录 第1章 安全知识概述 1 1 碰撞保护 2 2 漏电检测 1 3 过流保护 1 4 高压互锁 第2章 安全保护措施 2 1 常见安全保护设备 2 2 高压部件 2 3 高压维修的流程 2 4 仪表盘故障监控 2 5 组合仪表指示灯 2
  • Vmware虚拟机一打开电脑就蓝屏的解决方法

    1 升级虚拟机版本 最好是最新版本 这个是本人以及身边人解决虚拟机蓝屏最多的办法 建议第一个尝试这个办法 2 关闭本电脑的Hyper V服务 3 启用和关闭windows功能 对话框 gt 虚拟机平台 选项打对勾 默认没勾选 gt 确定后重
  • WPF 自定义控件完成库容表盘显示效果

    先看一下显示效果 需要注意的地方有以下几点 表盘的刻度分部 长刻度和短刻度显示 在数值80W时 需要更改刻度盘的颜色渐变 在数值80W时 更改库容总数背景的显示 也是颜色渐变 刻度盘控件属性定义 刻度盘的定义 using Microsoft
  • Google Test源码浅析(二) -------- TEST宏

    一 TEST宏的定义 一个例子 TEST TestCaseName1 TestName1 cout lt lt hello1 lt lt endl
  • 使用pyfinance进行证券收益分析!金融界的一大帮手!

    pyfinance简介 在查找如何使用Python实现滚动回归时 发现一个很有用的量化金融包 pyfinance 顾名思义 pyfinance是为投资管理和证券收益分析而构建的Python分析包 主要是对面向定量金融的现有包进行补充 如py
  • Git简介与基本使用

    文章目录 一 Git简介 1 1产生历史 二 Git的安装与配置 三 创建一个版本库 四 版本创建与回退 4 1使用 4 2工作区和暂存区 4 2 1工作区 Working Directory 4 2 2版本库 Repository 4 3
  • Python3 输入和输出

    1 输出格式美化 Python两种输出值的方式 表达式语句和 print 函数 第三种方式是使用文件对象的 write 方法 标准输出文件可以用 sys stdout 引用 如果你希望输出的形式更加多样 可以使用 str format 函数
  • 关于AD如何按1:1比例保存成PDF的具体做法

    之前用AD09保存一个A4大小原理图 但是通过智能PDF导出的PDF不能按1 1比例占满A4纸 保存出来的PDF如图所示 现在需要把这个原理图保存成竖着占满整个A4纸 试了很多办法 网上也找了好久 有说在页面设置里面设置纸张方向 但是并没有
  • 【XSS漏洞05】XSS通关大挑战

    目录 1 实验简介 2 通关过程 2 0 通关前准备 2 1 关卡1 2 2 关卡2 2 3 关卡3 2 4 关卡4 2 5 关卡5 2 6 关卡6 2 7 关卡7 2 8 关卡8 2 9 关卡9 2 10 关卡10 2 11 关卡11 2
  • 关于如何将代码推到自己的gitee分支上去

    我的方法只是用于自己的推送 如果哪里有错希望大佬指正 第一步 找到自己项目的本地文件 在项目文件里点击自己的 Git bush here 唤醒控制台 第二步 初始化自己的git 输入git init 第三步 git config globa
  • Vscode格式化代码后 代码不自动换行

    在做项目的时候原本可以在一行可以清晰展示的代码 格式化后就多行展示 有点烦人 可以尝试加入以下代码试试 Vscode中找到设置 有2种方法 vscode gt 首选项 gt 设置 之后在出现的界面输入settings json 也可以在vs
  • c# 中重载WndProc,实现重写“最小化”自定义功能的方法

    code 1 复制代码 代码如下 private void Form1 SizeChanged object sender EventArgs e 最小化隐藏窗体 if this WindowState FormWindowState Mi
  • 关于在servlet中创建了cookie,但在jsp中无法读取到该cookie的问题(已解决)

    servlet中的代码 Cookie c new Cookie userlogin ul toString ul是一个实体类的实例 我重写了该类的toString 方法返回的将是 用户名 密码 的字符串 c setMaxAge 60 res
  • String类——判断功能

    String类 判断功能 断点设置 字符串 查看API文档 String类的构造方法 字符串的长度 内存结构图 断点设置 一般情况下 需要在每个方法的第一条有效语句设置断点 String类 0 String类所在的包 java lang 所
  • 树的引进以及二叉树的基础讲解——【数据结构】

    W Y的主页 代码仓库分享 当我们学习完前面的数据结构 难度也就会上升 但是这个也是非常重要的数据结构 今天我们来学习一种新的数据类型 树 目录 树的概念以及结构 树的概念 树的相关概念 树的表示 树在实际中的运用 二叉树概念及结构 二叉树
  • QT5.12.6+QGIS3.10二次开发(Qtcreater)(一)环境搭建

    一 前言 QtCreater的编译模式有msvc和mingw两种 msvc调用的第三方库是 lib结尾的 而mingw调用的库是 a结尾的 在windows下下载的QGIS开发包中的库文件是 lib库 所以 在QtCreater中直接使用下