《Qt结合ArcGIS Engine 10.1 开发》由会员分享,可在线阅读,更多相关《Qt结合ArcGIS Engine 10.1 开发(26页珍藏版)》请在金锄头文库上搜索。
1、 文档编号 PTM02_AE201301040051 版本号 V0.1 QtQt+ +ArcGIS EngineArcGIS Engine10.110.1 开发开发 Esri 中国信息技术有限公司 2013 年 1 月 版权声明 本文档版权为 Esri 中国信息技术有限公司所有。未经本公司书面许可,任何单位和个人不得以任何形式摘抄、复制本文档的部分或全部,并以任何形式传播。 制定及修订记录制定及修订记录 版本 完成日期 编写/修订纪要 编写者 备 注 V0.1 1 月 2 日 刘宇 目目 录录 1 Qt 环境安装 . 4 2 Qt 的第一个程序 . 5 3 ArcGIS Engine 的环境
2、. 8 4 ArcGIS Engine+Qt(控制台开发) . 8 5 ArcGIS Engine+Qt(GUI 开发) . 11 5.1 ArcGIS Engine+Qt(GUI 开发,使用 Esri 提供的控件类) . 11 5.2 代码编写 . 14 5.3 小结. 17 5.4 ArcGIS Engine+Qt(GUI 开发,使用 Qt 提供的方法) . 18 Qt作为一个跨平台跨平台C+图形用户界面应用程序开发框架, 相当于微软的MFC(只能运行在 Windows 平台上),Qt 命运多舛,几经易主,现在属于芬兰 IT 服务公司Digia。 1 Qt 环境安装环境安装 Qt 的最新版
3、本是 Qt5.0,该版本是在 12 月中旬发布的,在这里我用的是Qt4.8。1 版本,也不建议大家着急着用最新版本,关于软件的下载地址可以在下面找到。 http:/ http:/qt-project.org/downloads#qt-other 安装过程很单,只需要点击下一步即可。 因为我采用的是 VS2010 作为 Qt 的集成开发环境,整个开发环境需要下载两个软件 http:/ http:/releases.qt-project.org/vsaddin/qt-vs-addin-1.1.11-opensource.exe 说明:说明: 如 果 有 人 不 愿 意 这 么 做 , 还 可 以
4、使 用如 果 有 人 不 愿 意 这 么 做 , 还 可 以 使 用QtCreator以 及以 及qt-win-opensource-4.8.1-mingw.exe 的组合,因为新版本的的组合,因为新版本的 QtCreator 已经不包已经不包含含 mingw,所以要单独下载。,所以要单独下载。 2 Qt 的第一个程序的第一个程序 安装完后,需要配置几个环境变量,QMAKESPE(根据自己的情况配置,因为我用的是 VS2010,所有配置 win32-msvc2010) ,如下图: QTDIR(Qt 的安装目录) ,如下图: 在 Path 中添加 Qt 的 bin 目录如下图: 打开 VS201
5、0,新建工程可以找到 Qt4 的模板: 完成之后,在 VS 中运行,出现下面的界面,因为我们什么都没做,在弹出的界面上什么都没有,不过没关系,只要能出现,就说明我们的 Qt 已经可以使用了,如下图: 3 ArcGIS Engine 的环境的环境 安装 ArcGIS ArcObjects for Cross Platform C+ 的 SDK,这个没有什么好说的。 4 ArcGIS Engine+Qt(控制台控制台开发)开发) 安装了 SDK 之后, 我们就需要将 ArcGIS Engine 的类库等引入到开发环境中,在 Qt 中引入 ArcGIS Engine 的类库等信息.在新建立的 Qt
6、控制台程序工程右键,找到 C/C+,然后找到常规,在右侧的附加包含目录中输入下面三个目录的地址(因为我的有 x(86),所以出现了下面的特殊符号) : 说明:在 MFC 中我们除了引入三个目录地址,还配置了预处理器定义“ESRI_WINDOW“,在这里我并没有配置。 配置好这个之后, 在主程序文件中输入代码 (这个代码我在这里就不做解释,到时候可以看这个文档的姊妹篇- VC2010+ArcGIS Engine10.1 开发 ,最后效果如下: #include #include “ArcSDK.h“ #include “qtextstream.h“ int main(int argc, char
7、 *argv) :CoInitialize(NULL); #pragma region 绑定许可 IArcGISVersionPtr ipVer(_uuidof(VersionManager); VARIANT_BOOL succeeded; if (FAILED(ipVer-LoadVersion(esriArcGISEngine , L“10.1“, #pragma endregion / #pragma region 初始化许可 IAoInitializePtr ipInit(CLSID_AoInitialize); esriLicenseStatus status; ipInit-In
8、itialize(esriLicenseProductCodeEngine, if (status != esriLicenseCheckedOut) AoExit(0); return 0; #pragma endregion QCoreApplication a(argc, argv); #pragma region 打开工作空间 IWorkspaceFactoryPtr ipWorkspaceFactory(CLSID_ShapefileWorkspaceFactory); IWorkspacePtr pWs; BSTR bstr_str; QString q_str=“D:guestc
9、hinasimplify“; bstr_str = SysAllocString(q_str.utf16(); HRESULT hr=ipWorkspaceFactory-OpenFromFile(bstr_str,0, SysFreeString(bstr_str); QString q_str1=“china_simply.shp“; BSTR bStringWS=SysAllocString(q_str1.utf16(); if (FAILED(hr) return 0; #pragma endregion #pragma region QI 这里和NET下不一样 IFeatureWor
10、kspacePtr ipRastWork (pWs); #pragma endregion #pragma region 打开要素类并获取个数 IFeatureClassPtr pFtClass; hr=ipRastWork-OpenFeatureClass(bStringWS, SysFreeString(bStringWS); if (FAILED(hr) return 0; long pCount=0; pFtClass-FeatureCount(NULL, #pragma endregion QString s = QString:number(pCount, 10); QTextSt
11、ream cout(stdout); cout str; return a.exec(); 运行后可以看到下面的效果 5 ArcGIS Engine+Qt(GUI 开发)开发) 在 MFC 中我们介绍了两种开发 GUI 的方法,一种是通过生成相应的 Activex控件 MFC 类,另一种是通过插入 Activex 控件的方法,在 Qt 里面做 GUI 的 AE开发,也有两种不同的做法,而这两种做法需要引入的头文件也有差异,除了头文件的差异,我们需要配置额外的信息,在这里我们分别对两种方法介绍。 5.1 ArcGIS Engine+Qt(GUI 开发开发,使用,使用 Esri 提供的控件类提供的
12、控件类) 5.1.1 额外的配置额外的配置 对于这种方法,需要配置很多信息,在工程项目的连接器的常规中找到 SDK的 lib 目录(在 MFC 的开发中,我们应该没有这个步骤) ,如下图: 在附加依赖项中输入 qt4ctl.lib 和 aoctl.lib 文件如下图: 此外还要在环境变量中配置 Path(不一定要在 Path 中配置,只要在运行的时候能找到相应的文件即可) ,要不然在运行的时候会报下面的错误,如下图: 这是因为 Qt 的 AE 在运行的时候用到了 Engine 安装目录下的 bin 下的三个文件:Qt4ctl.dll, aoctl.dll, ctlbase.dll,只要将 En
13、gine 的 bin 目录配置到 Path 中就可以了,如下图: 5.1.2 Esri 提供的控件类提供的控件类 当这些信息配置好了,我们就可以开发出 GUI 程序了,在 Qt 中我们认为一个可视化的组件是一个 QWidget,这个 QWidget 类似 MFC 中的窗体,一旦有了这些 QWidget,就可以用父组件的 addWdiget 方法加入,Esri 提供了继承这些控件QWidget 的类,我们可以在 qtaxtcl.h 头文件中找到,如下: class ESRI_EXT_CLASS QAxCtl : public QWidget public: QAxCtl(const char *progID = NULL, QWidget *parent = NULL, const char *name =