技术标签: c++ qt5 SuperMap visual studio
由于 SuperMap iObjects C++ 组件结构在版本 10.2.0
进行了更新,导致 CSDN 以前的教程无法完成开发环境的配置工作,若是使用 SuperMap iObjects C++ 10.2.0
之前 版本的组件进行开发,建议参考《SuperMap iObjects for C++ 入门详解(VS + Qt)》教程文档。
Windows 11 - 64 位操作系统, 基于 x64 的处理器
Qt 5.12.12
下载离线安装包后直接安装就好。安装完成后即可在系统中检索到 Qt Creator
(如下图)。
注意:
1. Qt 安装过程中选择组件时,务必勾选 MSVC 2017 64-bit
、MSVC 2017 32-bit
和 MSVC 2015 64-bit
组件(如果有可选的情况下),后续开发时根据 Visual Studio 2019 的开发环境选择对应的组件对 Qt 项目 进行编译。
2. Qt 安装时务必勾选 Qt Creator
编译程序,后续会使用 Qt Creator
对 SuperMap iObjects C++
组件中的 extensions4Qt
项目进行重新编译。
Visual Studio 2019 安装时,务必勾选 使用 C++ 的桌面开发
组件包 (如下图所示) ,其余组件包根据各人需求自行选择安装。
Visual Studio 2019 安装完成后打开,新建项目》选择 C++
语言,支持新建如下图所示的 C++
项目即表示环境安装成功。
退出 Visual Studio 2019 进程,双击 qt-vsaddin-msvc2019-2.8.1-rev.06.vsix
进行 Qt 插件
安装。安装完成后,打开 Visual Studio 2019 新建项目支持创建
由于 SuperMap iObjects C++
组件包中依赖的 Qt
是 5.6 版本的库,所以需要按顺序执行以下操作预处理 SuperMap iObjects C++
中的 Qt 依赖版本更新。(建议: 即使下载安装的 Qt
版本是 5.6,最好也进行以下操作进行版本更新,无法确保下载的 Qt 子版本是一致的)
将本机 Qt
安装目录(如:C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\bin)下的 Qt5Cored.dll
、Qt5Guid.dll
和 Qt5Widgetsd.dll
动态链接库文件 拷贝替换 SuperMap iObjects C++
组件包安装目录(如:C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\bin\bind_x64)中自带的 Qt5Cored.dll
、Qt5Guid.dll
和 Qt5Widgetsd.dll
动态链接库文件;
将本机 Qt
平台插件安装目录(如:C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\plugins\platforms)下的全部动态链接库文件 拷贝替换 SuperMap iObjects C++
组件包平台插件安装目录(如:C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\bin\bind_x64\plugins\platforms)中的全部动态链接库文件;
使用 Qt Creator
打开 SuperMap iObjects C++
组件包安装目录中的 Extensions4Qt 项目(项目目录如:C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\sample\extensions4Qt),打开后如图所示:
在 Qt Creator
中配置 Extensions4Qt 项目编译时需要的 环境变量,将 SuperMap iObjects C++
安装目录调试环境路径配置给 Extensions4Qt 项目,如下图所示:
在 Qt Creator
中编译生成与本机 Qt
版本适配的 Extensions4Qt 动态链接库,将新生成的 Extensions4Qt.dll
、Extensions4Qt.lib
、Extensions4Qt.exp
、Extensions4Qt.ilk
和 Extensions4Qt.pdb
文件 拷贝替换 SuperMap iObjects C++
安装目录(如:C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\bin\bind_x64)中的对应文件。
由于准备开发环境时已经为 Visual Studio 2019
安装了 Qt
插件,现在直接按以下步骤通过 Visual Studio 2019
新建 Qt
项目并配置开发环境即可:
新建 Qt Widgets Application 桌面应用项目;
鼠标右键打开新建 Qt
桌面应用项目 属性 面板,选择 C/C++ 环境配置,进行 附加包含目录 配置,如下图所示:
配置以下路径(具体路径根据本机安装路径进行调整)
C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\include
C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\include\private
C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\sample\extensions4Qt
配置 C/C++预处理器 环境
在 预处理器定义 中添加 _UGUNICODE 标记,如下图所示:
鼠标右键打开新建 Qt
桌面应用项目 属性 面板,选择 链接器 环境配置,进行 附加库目录 配置,如下图所示:
配置以下路径(具体路径根据本机安装路径进行调整)
C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\lib\libd_x64
C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\sample\debug\x64
Extensions4Qt.lib
SuSRDBCId.lib
SuStreamd.lib
SuSymbold.lib
SuSymbolExchanged.lib
SuSymbolMarker3Dd.lib
SuTheme3DBased.lib
SuTileStoraged.lib
SuToolkit3Dd.lib
SuToolkitd.lib
SuToolkitPointCloudd.lib
SuTopoBased.lib
SuTopoBuilderd.lib
SuVRDevicesd.lib
SuWorkspaced.lib
SuWrapc.lib
SuAlgorithm3Dd.lib
SuAlgorithmd.lib
SuAllocationd.lib
SuAnalyst3Dd.lib
SuAnimationd.lib
SuBase3Dd.lib
SuBased.lib
SuBGDataCompilerd.lib
SuBPlusTreed.lib
SuCacheBuilder3Dd.lib
SuCacheBuilderd.lib
SuCacheFiled.lib
SuChartBased.lib
SuChartToolkitd.lib
SuCompactFiled.lib
SuCVToolkitd.lib
SuDataCheckd.lib
SuDataExchanged.lib
SuDB2CId.lib
SuDCPackagerd.lib
SuDCToolkitsd.lib
SuDrawing3Dd.lib
SuDrawingd.lib
SuDrawingLayoutd.lib
SuDRDSCId.lib
SuElementd.lib
SuEngineBaiduMapsd.lib
SuEngineBingMapsd.lib
SuEngined.lib
SuEngineDB2d.lib
SuEngineDRDSd.lib
SuEngineESd.lib
SuEngineExtendFiled.lib
SuEngineGanosd.lib
SuEngineGaoDeMapsd.lib
SuEngineGoogleMapsd.lib
SuEngineGPd.lib
SuEngineImagePlugind.lib
SuEngineMySQLd.lib
SuEngineODBCd.lib
SuEngineOGCd.lib
SuEngineOGDCd.lib
SuEngineOpenStreetMapsd.lib
SuEngineOracled.lib
SuEnginePGd.lib
SuEnginePGisd.lib
SuEngineRestd.lib
SuEngineSCVd.lib
SuEngineSDEd.lib
SuEngineSMCloudd.lib
SuEngineSQLPLUSd.lib
SuEngineSRDBd.lib
SuEngineSspd.lib
SuEngineUDBd.lib
SuEngineXYZTiled.lib
SuFileParser3DModeld.lib
SuFileParser3dsd.lib
SuFileParserAcadd.lib
SuFileParserBitMapd.lib
SuFileParserCSVd.lib
SuFileParserd.lib
SuFileParserDEMd.lib
SuFileParserDGNd.lib
SuFileParserE00d.lib
SuFileParserENCd.lib
SuFileParserFMEd.lib
SuFileParserGDALd.lib
SuFileParserGEOJSONd.lib
SuFileParserGJBd.lib
SuFileParserGLTFd.lib
SuFileParserKMLd.lib
SuFileParserLidard.lib
SuFileParserMAPGISd.lib
SuFileParserMitabd.lib
SuFileParserNetCDFd.lib
SuFileParserOGRd.lib
SuFileParserOrangeTabd.lib
SuFileParserOSMd.lib
SuFileParserPGDBVd.lib
SuFileParserPointCloudd.lib
SuFileParserRAWd.lib
SuFileParserS3MBd.lib
SuFileParserSCVd.lib
SuFileParserSGMd.lib
SuFileParserSimpleJsond.lib
SuFileParserTEMSd.lib
SuFileParserVCTd.lib
SuFMELicensed.lib
SuGeneralizationd.lib
SuGeoCoded.lib
SuGeometricNetworkd.lib
SuGeometry3Dd.lib
SuGeometryCADd.lib
SuGeometryConverterd.lib
SuGeometryd.lib
SuGeometryLayoutd.lib
SuGeometryPlotd.lib
SuGeoOperation3Dd.lib
SuGeoOperationd.lib
SuGraphics3Dd.lib
SuGraphics3DGameEngined.lib
SuGraphics3DOGREd.lib
SuGraphicsd.lib
SuGraphicsPDFd.lib
SuGraphicsPSd.lib
SuGraphicsWd.lib
SuGridAnalystd.lib
SuGridAnalystOpenCLd.lib
SuGridModelingd.lib
SuKDBCId.lib
SuLayer3DDatasetd.lib
SuLayer3DFiled.lib
SuLayer3DMapd.lib
SuLayer3DTreed.lib
SuLayoutEditord.lib
SuLinearReferenced.lib
SuLogisticsd.lib
SuMapd.lib
SuMapEditord.lib
SuMapMatchingd.lib
SuMapServiceStubd.lib
SuMGAnimationExpd.lib
SuMGAuxiliaryPlottingd.lib
SuMGCommond.lib
SuMGMapDatad.lib
SuMGMovingTargetd.lib
SuMGObjectsd.lib
SuMGSituationd.lib
SuMGSituationMonitord.lib
SuMGSituationPlottingd.lib
SuMGSituationSimulationd.lib
SuMongoCId.lib
SuMosaicd.lib
SuMosaicGDALd.lib
SuMosaicOpenCVd.lib
SuMySQLCId.lib
SuNetToolkitd.lib
SuNetworkBuilderd.lib
SuNetworkEnvironmentd.lib
SuNTopoDataCompilerd.lib
SuNTopoIndexTreed.lib
SuODBCCId.lib
SuOGCParserd.lib
SuOGDCd.lib
SuOracleCId.lib
SuOverlayd.lib
SuParticleSystemd.lib
SuPathAnalystCHd.lib
SuPathAnalystd.lib
SuPathNavid.lib
SuPluginArcgisMapCached.lib
SuPluginCommond.lib
SuPluginGECached.lib
SuPluginGlobalCached.lib
SuPluginGridCached.lib
SuPluginMapCache50d.lib
SuPluginMapCached.lib
SuPluginWebCached.lib
SuPostgreSQLCId.lib
SuProjectiond.lib
SuProjectionProjd.lib
SuProjectionWKTd.lib
SuProximityd.lib
SuPublicTransportd.lib
SuRectifyd.lib
SuRenderd.lib
SuRepresentationd.lib
SuRStarTreed.lib
SuScened.lib
SuSceneEditord.lib
SuSDECId.lib
SuSpatialIndexd.lib
SuSpatialQueryd.lib
SuSQLiteCId.lib
Qt
桌面应用项目 属性 面板,选择 生成事件》生成后事件 ,进行 命令行 配置,如下图所示:if not exist "$(SolutionDir)$(PlatformName)\$(Configuration)\VERSION" (xcopy /r /y C:\SuperMap\supermap-iobjectscpp-10.2.1-20428-92245-win-all\bin\bind_x64\ $(SolutionDir)$(PlatformName)\$(Configuration)\ /s)
<font color=red> **注意:** *此处也可以不配置 **生成事件**;若不配置生成事件将程序运行环境复制到输出目录的话,则需要修改项目编译输出目录为 `SuperMap iObjects C++` 运行环境安装目录(此操作存在潜在损坏运行环境的潜在风险,建议配置 **生成事件**)!!!* </font>
至此已完成 SuperMap iObject C++ 10i (10.2.0及以上版本)
在 Visual Studio 2019
+ Qt
桌面应用项目的所有开发环境参数配置,下面可以开始项目编码。
C++ 头文件编码 (CSuperMapiDesktopForCPP.h)
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_CSuperMapiDesktopForCPP.h"
#include "Workspace/UGWorkspace.h"
#include "Map/UGMap.h"
#include "qmapcontrol.h"
#include "translator.h"
using namespace UGC;
using namespace std;
class CSuperMapiDesktopForCPP : public QMainWindow
{
Q_OBJECT
public:
CSuperMapiDesktopForCPP(QWidget *parent = Q_NULLPTR);
private:
Ui::CSuperMapiDesktopForCPPClass ui;
UGWorkspace* workspace;
};
C++ 源文件编码 (CSuperMapiDesktopForCPP.cpp)
#include "CSuperMapiDesktopForCPP.h"
#include "stdafx.h"
CSuperMapiDesktopForCPP::CSuperMapiDesktopForCPP(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
workspace = new UGWorkspace();
QString workpsaceFilePath = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("打开工作空间"), QString::fromLocal8Bit(""), QString::fromLocal8Bit("工作空间文件 (*.smwu *.sxwu)"));
if (workpsaceFilePath != NULL && QFileInfo::exists(workpsaceFilePath))
{
if (workspace->Open(Translator::QStr2UGStr(workpsaceFilePath)))
{
UGString mapName = workspace->m_MapStorages.GetNameAt(0);
ui.centralWidget->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
QHBoxLayout* layout = new QHBoxLayout(ui.centralWidget);
QMapControl* mapControl = new QMapControl(workspace);
layout->addWidget(mapControl);
UGMap* map = mapControl->GetMap();
map->Open(mapName);
mapControl->Refresh();
}
}
}
由于配置 SuperMap iObjects C++
在 Visual Studio 2019
和 Qt
开发环境较复杂,以下对重要步骤以及开发环境配置流程中可能存在的坑进行复盘,以免重复踩坑。
SuperMap iObjects C++ 10i (10.2.0及以上版本)
进行了结构上的更新,与 Qt
绑定更加紧密,SDK依赖了 Qt
平台插件,所以在根据本机安装的 Qt
版本对 SuperMap iObjects C++
运行环境库进行更新的时候,一定要更新 plugins\platforms 中的 Qt
平台插件。
若要使用 SuperMap iObjects C++
组件中自带的 QMapControl 控件用于显示地图,务必要根据本机安装的 Qt
版本对 Extensions4Qt 项目进行重新编译,避免因 Qt
版本不兼容造成的编译异常。
目前 SuperMap iObjects C++
仅适配 Qt 5.6
及以上版本,暂未适配 Qt 6.x
系列产品,不建议使用 Qt 6.x
版本进行开发。
建议在 Visual Studio 2019
创建的 Qt
项目中配置 生成事件 命令!若不配置,则需要修改项目编译输出路径到 SuperMap iObjects C++
安装包中的开发环境目录内才可正常运行 (此操作存在潜在损坏运行环境的潜在风险,不建议修改项目编译输出路径)。
文章浏览阅读3.2w次,点赞16次,收藏90次。对于这个问题我也是从网上找了很久,终于解决了这个问题。首先遇到这个问题,应该确认虚拟机能不能正常的上网,就需要ping 网关,如果能ping通说明能正常上网,不过首先要用命令route -n来查看自己的网关,如下图:第一行就是默认网关。现在用命令ping 192.168.1.1来看一下结果:然后可以看一下电脑上面百度的ip是多少可以在linux里面ping 这个IP,结果如下:..._linux桥接ping不通baidu
文章浏览阅读512次。小妹在这里已经卡了2-3天了,研究了很多人的文章,除了低版本api 17有成功外,其他的不是channel null 就是没反应 (channel null已解决)拜托各位大大,帮小妹一下,以下是我的程式跟 gradle, 我在这里卡好久又没有人可问(哭)![image](/img/bVcL0Qo)public class MainActivity extends AppCompatActivit..._android 权限申请弹窗 横屏
文章浏览阅读1.4k次,点赞4次,收藏6次。valid padding(有效填充):完全不使用填充。half/same padding(半填充/相同填充):保证输入和输出的feature map尺寸相同。full padding(全填充):在卷积操作过程中,每个像素在每个方向上被访问的次数相同。arbitrary padding(任意填充):人为设定填充。..._cnn “相同填充”(same padding)
文章浏览阅读790次,点赞29次,收藏28次。手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长![外链图片转存中…(img-Qpoc4gOu-1712656009273)][外链图片转存中…(img-bSWbNeGN-1712656009274)]
文章浏览阅读469次。Date对象取得年份有getYear和getFullYear两种方法经 测试var d=new Date;alert(d.getYear())在IE中返回 2009,在Firefox中会返回109。经查询手册,getYear在Firefox下返回的是距1900年1月1日的年份,这是一个过时而不被推荐的方法。而alert(d.getFullYear())在IE和FF中都会返回2009。因此,无论何时都应使用getFullYear来替代getYear方法。例如:2016年用 getFullYea_getyear和getfullyear
文章浏览阅读182次。Unix传奇(上篇) 陈皓 了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技术,而应该是去 —— 认认真真地了解和回顾历史。 Unix是目前还在存活的操作系_unix传奇pdf
文章浏览阅读308次。哈希算法:将字符串映射为数字形式,十分巧妙,一般运用为进制数,进制据前人经验,一般为131,1331时重复率很低,由于字符串的数字和会很大,所以一般为了方便,一般定义为unsigned long long,爆掉时,即为对 2^64 取模,可以对于任意子序列的值进行映射为数字进而进行判断入门题目链接:AC代码:#include<bits/stdc++.h>using na..._ac算法 哈希
文章浏览阅读952次,点赞13次,收藏27次。由于觉得Qt的编辑界面比较丑,所以想用vs2022的编辑器写Qt加MySQL的项目。_在vs中 如何装qt5sqlmysql模块
文章浏览阅读1k次。选择题题目:下面的哪个调研内容属于经济环境调研?()题目:()的目的就是加强与客户的沟通,它是是网络媒体也是网络营销的最重要特性。题目:4Ps策略中4P是指产品、价格、顾客和促销。题目:网络市场调研是目前最为先进的市场调研手段,没有任何的缺点或不足之处。题目:市场定位的基本参数有题目:市场需求调研可以掌握()等信息。题目:在开展企业网站建设时应做好以下哪几个工作。()题目:对企业网站首页的优化中,一定要注意下面哪几个方面的优化。()题目:()的主要作用是增进顾客关系,提供顾客服务,提升企业_画中画广告之所以能有较高的点击率,主要由于它具有以下特点
文章浏览阅读1k次,点赞2次,收藏5次。以爬取CSDN为例子:第一步:导入请求库第二步:打开请求网址第三步:打印源码import urllib.requestresponse=urllib.request.urlopen("https://www.csdn.net/?spm=1011.2124.3001.5359")print(response.read().decode('utf-8'))结果大概就是这个样子:好的,继续,看看打印的是什么类型的:import urllib.requestresponse=urllib.r_urlopen the read operation timed out
文章浏览阅读304次。修正sina.com/sina.cn邮箱获取不到联系人,并精简修改了其他邮箱代码,以下就是升级版版本的介绍:完整版本,整合了包括读取邮箱通讯录、MSN好友列表的的功能,目前读取邮箱通讯录支持如下邮箱:gmail(Y)、hotmail(Y)、 live(Y)、tom(Y)、yahoo(Y)(有点慢)、 sina(Y)、163(Y)、126(Y)、yeah(Y)、sohu(Y) 读取后可以发送邮件(完..._通讯录 应用读取 邮件 的相关
文章浏览阅读213次。云计算及虚拟化教程学习云计算、虚拟化和计算机网络的基本概念。此视频教程共2.0小时,中英双语字幕,画质清晰无水印,源码附件全课程英文名:Cloud Computing and Virtualization An Introduction百度网盘地址:https://pan.baidu.com/s/1lrak60XOGEqMOI6lXYf6TQ?pwd=ns0j课程介绍:https://www.aihorizon.cn/72云计算:概念、定义、云类型和服务部署模型。虚拟化的概念使用 Type-2 Hyperv_云计算与虚拟化技术 教改