- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
使用QGis的目的是进行二次开发,或者说是融入我们的应用(无人车、无人船、无人机),本片描述搭建QGis二次基础开发环境,由于实在是太长了,进行了分篇:
空demo 。
运行qgis的demo 。
新建QWidget的子类TestWidget,使用常规initControl添加布局嵌套窗口方式,来实现在QApplication消息循环里面的窗口类里面添加单独的qgis窗口。 。
void TestWidget::testEnv(QString filePath) { QHBoxLayout *pHBoxLayout = dynamic_cast<QHBoxLayout *>(this->layout()); if(!pHBoxLayout) { pHBoxLayout = new QHBoxLayout(this); LOG; } QgsMapCanvas *pMapCanvas = new QgsMapCanvas(); // 本地影像路径 QgsRasterLayer *pLayer = new QgsRasterLayer(filePath); pMapCanvas->setLayers({pLayer}); pMapCanvas->setExtent(pLayer->extent()); pMapCanvas->refresh(); QgsMapToolPan *pMapToolPan = new QgsMapToolPan(pMapCanvas); pMapCanvas->setMapTool(pMapToolPan); pHBoxLayout->addWidget(pMapCanvas, 1); pMapCanvas->show(); setLayout(pHBoxLayout); }
然后开始编译.
编译出错如下: 。
支持c++17 。
未定义M_Pi添加 。
最终,添加了win32下自动copy的脚本 。
编译通过,但是运行崩溃,这里不好直接把bin全部copy过来,所以用打包的方式确定少了那些库,补充一个打包环境: 。
这个打包之后,像Qt5Xml.dll也没有包含进去,但是实际apps/qt5/bin下是有的,这个只能说单独弄sdk不是 很完善,目前靠个人完善。 完善之后发现: 。
基本就是OSGeo4W/bin下大部分库和OSGeo4W/apps/Qt5/bin下大部分库了: 。
没有添加Qgis代码,添加之后还少qgis_gui.dll,apps下qgis-lts中bin的dll(就qgis的直接库),所以后来干脆直接三个bin目录下下的dll都拷贝了,需要精简再反向减少即可。 。
INCLUDEPATH += $$PWD DEPENDPATH += $$PWD # 需要QDomDocument QT += xml # 需要支持c++17 CONFIG += c++17 # 未定义M_PI、M_PI_2添加 DEFINES += _USE_MATH_DEFINES win32{ # copy ffmpeg src_file = $$PWD/qgis-ltr/bin/* dst_file = $$OUT_PWD # target_file = $$DESTDIR src_file ~= s,/,\\,g dst_file ~= s,/,\\,g # target_file ~= s,/,\\,g system(xcopy $$src_file $$dst_file /y /s/q/e) # system(xcopy $$src_file $$target_file /y /s/q/e) } INCLUDEPATH += $$PWD/qgis-ltr/include LIBS += -L$$PWD/qgis-ltr/lib \ -lqgis_3d \ -lqgis_analysis \ -lqgis_app \ -lqgis_core \ -lqgis_gui \ -lqgis_native \ -lqgis_server HEADERS += \ $$PWD/qgis3.34.7.h
#ifndef QGIS3_34_7_H #define QGIS3_34_7_H #include <qgsapplication.h> #include <qgsmapcanvas.h> #include <qgsmaptoolpan.h> #include <qgsrasterlayer.h> #include <QtMath> #endif // QGIS3_34_7_H TestWidget.cpp #include "TestWidget.h" #include "ui_TestWidget.h" #include <QHBoxLayout> #include <QBoxLayout> #include <QPushButton> #include "qgis3.34.7.h" // QtCreator在msvc下设置编码也或有一些乱码,直接一刀切,避免繁琐的设置 #define MSVC #ifdef MSVC #define QSTRING(s) QString::fromLocal8Bit(s) #else #define QSTRING(s) QString(s) #endif #include <QDebug> #include <QDateTime> //#define LOG qDebug()<<__FILE__<<__LINE__ //#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__ //#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread() //#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd") #define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")
#ifndef TESTWIDGET_H #define TESTWIDGET_H #include <QWidget> namespace Ui { class TestWidget; } class TestWidget : public QWidget { Q_OBJECT public: explicit TestWidget(QWidget *parent = 0); ~TestWidget(); public: void testEnv(QString filePath); protected: void initControl(); private: Ui::TestWidget *ui; }; #endif // TESTWIDGET_H
TestWidget::TestWidget(QWidget *parent) : QWidget(parent), ui(new Ui::TestWidget) { ui->setupUi(this); QString version = "v1.0.0"; setWindowTitle(QSTRING("QGisDemo %1(作者:长沙创微智科信息技术有限公司 QQ:21497936 WX:15173255813 www.chuangweizhike.com)").arg(version)); initControl(); } TestWidget::~TestWidget() { delete ui; } void TestWidget::initControl() { } void TestWidget::testEnv(QString filePath) { QHBoxLayout *pHBoxLayout = dynamic_cast<QHBoxLayout *>(this->layout()); if(!pHBoxLayout) { pHBoxLayout = new QHBoxLayout(this); LOG; } QgsMapCanvas *pMapCanvas = new QgsMapCanvas(); // 本地影像路径 QgsRasterLayer *pLayer = new QgsRasterLayer(filePath); pMapCanvas->setLayers({pLayer}); pMapCanvas->setExtent(pLayer->extent()); pMapCanvas->refresh(); QgsMapToolPan *pMapToolPan = new QgsMapToolPan(pMapCanvas); pMapCanvas->setMapTool(pMapToolPan); pHBoxLayout->addWidget(pMapCanvas, 1); pMapCanvas->show(); setLayout(pHBoxLayout); }
开始以为是无法直接在QWidget加载,可以在QMainWindow里面加载,后来经过判断是因为变量的问题,在main函数里面是因为是全局的,所以exec()之后是存在的,而放到Qt窗口构造里面,则是new出来的就可以,简单来说就是保持对象存在.
局部改成new即可: 。
最后此篇关于QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo的文章就讲到这里了,如果你想了解更多关于QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
为了构建 CentOS 6.5 OSM 切片服务器,我正在寻找一些文档和/或教程。 我试过this one正如我在我的 previous post 中所说的那样但它适用于 Ubuntu 14.04,而
我正在寻找可用于集成任何源代码控制管理系统的通用 git 桥(如 git-svn、git-p4、git-tfs)模板。 如果没有这样的模板,至少有一些关于如何在 git 端集成基本操作的说明(对于其他
1、前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群。 redis有两种高可用的方案: High availabilit
简介 前提条件: 确保本机已经安装 VS Code。 确保本机已安装 SSH client, 并且确保远程主机已安装 SSH server。 VSCode 已经安装了插件 C/
为什么要用ELK ELK实际上是三个工具,Elastricsearch + Logstash + Kibana,通过ELK,用来收集日志还有进行日志分析,最后通过可视化UI进行展示。一开始业务量比
在日常办公当中,经常会需要一个共享文件夹来存放一些大家共享的资料,为了保证文件数据的安全,最佳的方式是公司内部服务器搭建FTP服务器,然后分配多个用户给相应的人员。今天给大家分享FileZilla搭
最近由于业务需要,开始进行 Flutter 的研究,由于 Flutter 的环境搭建在官网上有些细节不是很清楚,笔者重新整理输出 1. 配置镜像 由于在国内访问 Flutter
目录 1. 安装go软件包 2. 配置系统变量 3. 安装git 4. 设置go代理 5. 下载gin框架 6. 创建项目 7.
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任
上篇文章给大家介绍了使用docker compose安装FastDfs文件服务器的实例详解 今天给大家介绍如何使用 docker compose 搭建 fastDFS文件服务器,内容详情如下所示:
目录 1.创建Maven 2.Maven目录和porm.xml配置 3.配置Tomcat服务器 1.创建Maven
laravel 官方提供 homestead 和 valet 作为本地开发环境,homestead 是一个官方预封装的 vagrant box,也就是一个虚拟机,但是跟 docker 比,它占用体积
这个tutorial显示了 Razor Pages 在 Asp.Net Core 2 中的实现。但是,当我运行 CLI 命令时: dotnet aspnet-codegenerator razorp
我创建了一个单独的类库项目来存储数据库上下文和模型类。在同一解决方案中,我创建了一个 ASP.NET MVC 项目并引用了类库项目,并在项目的 Web.config 文件中包含了数据库上下文的连接字符
关于代码托管,公司是基于Gitlab自建的,它功能全而强大,但是也比较重,我个人偏向于开源、小巧、轻便、实用,所以就排除了Github,在Gogs和Gitea中选者。Gogs在Github有38
目录 1、高可用简介 1.1 高可用整体架构 1.2 基于 QJM 的共享存储系统的数据同步机制分析 1.3 NameNode 主
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。 在高并发连接的情况
对于我们的 ASP.NET Core 项目,我们使用包管理器控制台中的 Scaffold-DbContext 搭建现有数据库。 每次我们做脚手架时,上下文类与所有实体一起生成,它包含调用 option
我正在使用 .net 核心 2.0。我已经安装了以下 nuget 包:1: Microsoft.AspNetCore.All2: Microsoft.EntityFrameworkCore.Tools
我正在使用 NetBeans 及其 RAD 开发功能开发 JEE6 JSF 应用程序。我想使用脚手架来节省更新 Controller 和模型 View 的时间。 OneToMany 关联在 View
我是一名优秀的程序员,十分优秀!