20240719 qgis&&qt 安装
明昧 Lv7

问题路径

qt怎样读取enc

qt怎样读取海图文件

qt怎样配置qgis

VS2022如何配置qgis

qt 5./12.7如何配置qgis

需求

完成在 qt 5.12.7版本下编译器mingw和mscv的配置 以及qgis的配置

娇嗔一(×)

https://zhuanlan.zhihu.com/p/83805300

教程缺点jioachen:

1.这个到了后面的文件移植的时候 share部分在3.38版本中都缺少名为gdal的文件夹子

2.选取下载的目录看不清楚

image-20240719101749782

3.下载的版本和教程时间比较久远

好:

也告诉我一定要拷贝

image-20240719101801582

image-20240719101810007

image-20240719101819081

告诉我一定要在pro里配相关库文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
QT       += core gui xml
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++1z
DEFINES += QT_DEPRECATED_WARNINGS


INCLUDEPATH+="C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include"
INCLUDEPATH+="C:/OSGeo4W2/include"
INCLUDEPATH+="C:/OSGeo4W2/apps/qgis-ltr/include"
LIBS+= -L"C:/OSGeo4W2/apps/qgis-ltr/lib"
LIBS+= -L"C:/OSGeo4W2/lib" -lqgis_app -lqgis_core -lqgis_gui



# debug
LIBS += -L
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui



# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

相关测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#define _USE_MATH_DEFINES
#include <cmath>
#include "mainwindow.h"
#include <QApplication>
#include <qgsapplication.h>
#include <qgsmapcanvas.h>
#include <qgsvectorlayer.h>
#include <QDebug>

int main(int argc, char *argv[])
{
QgsApplication::setPrefixPath("C:/OSGeo4W2/share") ;
QgsApplication a(argc,argv,true) ;
QgsApplication::initQgis();
MainWindow w;
QgsVectorLayer* layer1 = new QgsVectorLayer("D:/datas/shps/ne_50m_land/ne_50m_land.shp","vec","ogr") ;//注意文件路径
if( layer1==nullptr ) {
qDebug("bad vec layer") ;
}
QgsProject::instance()->addMapLayer(layer1);
QList<QgsMapLayer*> layerlist ;
layerlist.append(layer1) ;

QgsMapCanvas* mapcanvas = new QgsMapCanvas ;
mapcanvas->setProject( QgsProject::instance() ) ;
mapcanvas->setLayers(layerlist) ;
w.setCentralWidget(mapcanvas);
w.show();
mapcanvas->zoomToFullExtent();
mapcanvas->refresh();
qDebug()<< QString::number(mapcanvas->layerCount() ) ;
return a.exec();
}

👎 error: LNK1158: 无法运行“rc.exe”

娇嗔二

image-20240719114541054

1
2
3
4
5
6
7
8
F:\OSGeo4W\include;
F:\OSGeo4W\apps\Qt5\include\QtXml;
F:\OSGeo4W\apps\Qt5\include\QtCore;
F:\OSGeo4W\apps\Qt5\include\QtWidgets;
F:\OSGeo4W\apps\Qt5\include\QtGui;
F:\OSGeo4W\apps\Qt5\include;
F:\OSGeo4W\apps\qgis\include;
%(AdditionalIncludeDirectories)

image-20240719114930669

1
2
3
F:\OSGeo4W\apps\Qt5\lib;
F:\OSGeo4W\apps\qgis\lib;
%(AdditionalLibraryDirectories)

image-20240719115108332

1
2
3
4
5
6
7
qgis_core.lib;
qgis_app.lib;
qgis_gui.lib;
Qt5Widgets.lib;
Qt5Xml.lib;%(AdditionalDependencies)


_USE_MATH_DEFINES;

👎 qt error: LNK1158: 无法运行“rc.exe”

https://blog.csdn.net/my_angle2016/article/details/126284219

>F:\OSGeo4W\apps\Qt5\include\QtWidgets\qdatetimeedit.h(45,10): error C1083: 无法打开包括文件: “QtCore/qcalendar.h”: No such file or directory

娇嗔三(×)

https://www.bilibili.com/video/BV1ei4y127LM/?vd_source=dbe14335c46e4fc9f76a6643a614c5af

image-20240719160358835

image-20240719160506371

image-20240719150204090

image-20240719150219588

F:\OSGeo4w\apps\gdal-dev;

F:\OSGeo4w\apps\Qt5\include;

F:\OSGeo4w\apps\Qt5\include\QtCore;

F:\OSGeo4w\apps\Qt5\include\QtWidgets;

F:\OSGeo4w\apps\Qt5\include\QtGui;

F:\OSGeo4w\apps\Qt5\include\QtXml

F:\OSGeo4w\apps\qgis\include

image-20240719150759318

image-20240719151016827

F:\OSGeo4w\apps\Qt5\lib;

F:\OSGeo4w\apps\qgis-dev\lib

image-20240719151142085

image-20240719151427654

qgis_core.lib;

qgis_app.lib;

qgis_gui.lib;

Qt5Core.lib;

Qt5Gui.lib;

Qt5Widgets.lib

image-20240719151620386

image-20240719151634387

PATH=F:\OSGeo4w\bin;

PATH=F:\OSGeo4w\apps\qgis\bin;

PATH=F:\OSGeo4w\apps\Qt5\bin

image-20240719151946755

image-20240719151959978

_USE_MATH_DEFINES

image-20240719152325856

image-20240719152855317

#include “stdafx.h”
#include “test5.h”
#include <QtWidgets/QApplication>
#include<qmainwindow.h>

#include<qgsmapcanvas.h>
#include<qgsmaptoolpan.h>
#include<qgsrasterlayer.h>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
test5 w;
w.show();
return a.exec();
}

最后这里在

image-20240719162152772

这个库里面

image-20240719162228671

这个锁引入不进去 真的很无语

为什么呢?

qt VS2022开发环境中已经在文件中引入了未定义标识符 "QRecursiveMutex"的相关库 QRecursiveMutex 标识符依然显示未定义 为什么

检查 Qt 版本: 确认你使用的 Qt 版本是否支持 QRecursiveMutex。这个类是在 Qt 5.14 及以后的版本中引入的。如果你使用的是旧版本的 Qt,可能没有这个类。

image-20240719164653403

现在下一个5.15版本的试试看,估计很久

image-20240719165956203

这里可以看到至少要下5.15.13之后的才行

我这里qt目前只提供5.15.2的

剩下的都到6了

娇嗔四

https://www.cnblogs.com/Qt895996365/p/13516902.html

image-20240719161807218

娇嗔五(自创)

qt 5.12.7 + qgis 3.10+ qt creator

image-20240719171708620

qgis 3.10下载

https://www.osgeo.cn/qgis/site/forusers/download.html

image-20240719172129353

两个86 和64 都下

image-20240719205441361


image-20240719205731146

这个下载在后面包含路径的时候没有包含image-20240719210051259

根本没有include这个文件夹里面


image-20240719210015711

我下载的时候这两个链接失效了


最后下这个

image-20240719211033429

image-20240719211726707

还是存在这个问题

没有这个文件怎么引入呢?


下别人的包试一下

https://blog.csdn.net/j_in2018/article/details/107304496

image-20240719214233257

别人的包真的有include

我好无语靠靠靠靠靠

include的话

就是把接口暴露出来给二次开发用的

上面那两个不是二次开发来着的吧

娇嗔六

https://blog.csdn.net/j_in2018/article/details/107304496

唯一走到不一样的一步

image-20240719223937584

qgis版本说明

image-20240719212842463

编译过程中jom.exe退出

image-20240719224353709

娇嗔六之后能运行又crash的程序

image-20240722091705305

没事

人崩溃很正常

活着挺开心的

image-20240722091848509

把qgs里面的相关程序代码调用屏蔽掉可以运行的

image-20240722092109692

真的很神经

那我改一下C++版本

image-20240722092203607

重新写了C++版本之后?

还是程序会崩溃

按照教程移植过去ddl们之后

出现了这个

image-20240722093939951

image-20240722093949164

此时库是这样的,我删除试试咯


好像我把版本放错了

我把32位的osg的版本放到64位的release程序之下

重新按照

https://zhuanlan.zhihu.com/p/83805300

搬完64位的dll之后

image-20240722095358085

image-20240722095418071

程序构建没有问题了


让我们祈祷它接下来能够跑起来去啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!

恢复

image-20240722095634824

只是链接头文件是可以的

但是如果是要那啥可不行

image-20240722095739597

程序还是会crash


查看编译过程信息

image-20240722100639538

这个真的合理吗


image-20240722100742292

这个是屏蔽掉代码之后的情况

image-20240722100934253

C++版本的问题?

并不是

代码还是跑不起来

setProject无法调用

image-20240722110459960

估计是gis版本有点老

没有这个函数

这个qgis版本是3.10的

 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View