SuperMap iObjects C++在Linux上面的使用
来源:互联网 发布:2016最红十首网络歌曲 编辑:程序博客网 时间:2024/05/06 14:33
<作者:小诗>
SuperMap iObjects C++ 是使用标准C++开发,集成了跨平台技术。所以不仅能在Window 上面使用,也可以跨平台在Linux上面使用,下面就以当今主流的Ubuntu系统为例,讲解SuperMap iObjects C++如何在Linux中进行应用.
该博文中所用到的qt-creator-opensource-linux-x86_64-3.0.1.run安装包:http://pan.baidu.com/s/1nvTrRJF ,密码: mp2c
该博文中所用到的qt-everywhere-opensource-src-4.8.6.tar.gz安装包:http://pan.baidu.com/s/1kUTLDyf ,密码:on2g
一. 安装Ubuntu的虚拟机,这一步在网上已经很多教程了,在这里就不做介绍了,我这里是安装的ubuntu-14.04-desktop。
二. 在ubuntu上面安装QT Creator;
1、Ubuntu上面最常用的的是通过apt-get命令,自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。所以先执行sudo apt-get update,更新软件源,这样才能获取到最新的软件包。
2、安装32位的运行库,嵌入式开发和应用程序都需要
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
3、安装基础开发包,主要gcc,g++等
sudo apt-get install build-essential
4、安装依赖包
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxrandr-dev libxrender-dev
执行sudo apt-get install libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev libXext-dev
5、官网下载qt-everywhere-opensource-src-4.8.6.tar.gz,或者见该文前面所提供的百度云盘链接:
运行命令解压:tar –zxvf qt-everywhere-opensource-src-4.8.6.tar.gz,把解压后的文件夹拷贝到英文目录(非tmp)下,进入该文件夹执行./configure,然后选择o(开源),接着选择yes(同意)。运行结束后提示Just run ‘make’等信息后表示这步成功了。
6、make -j8,-j8表示开8个线程,-j6表示开了6个线程。可以多开几个线程
7、sudo make install
8、设置环境变量
gedit /etc/profile
export PATH=$PATH:/usr/local/Trolltech/Qt-4.8.6/bin
9.官网下载qt-creator-opensource-linux-x86_64-3.1.2.run,或者见该文前面所提供的百度云盘链接:
执行:./qt-creator-opensource-linux-x86_64-3.1.2.run
10 执行sudo apt-get install qt4-dev-tools 然后重启;
好了,到这一步我们QT的安装就完成了;
三 下载组件产品,去超图官网下载SuperMap iObjects C++的Linux组件包:http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx
配置许可:
下载许可文件,见链接:http://pan.baidu.com/s/1slnSmyL,密码:94jb
解压aksusbd-2.4.1-i386.tar
tar –zxvf aksusbd-2.4.1-i386.tar
解压后进入aksusbd-2.4.1-i386文件夹,执行./dinst,如果出现下面截图:
许可就配置成功啦,就可以在当前Linunx上运行SuperMap产品了。
撒花,接下来我们就可以正式的开启写程序之旅了。
三 新建QT工程
1.新建工程,选择Qt Widgets Application,点击下一步。
输入工程名称,点击下一步,输入要创建的程序的基本类名,点击继续工程就新建成功了
2、接下来就是很重要的一步工程,配置环境,需要做的工作也比较多,耐心地完成此步骤的所有操作吧。
(1)我们范例中封装了一个地图窗口qmapcontrol。可以直接使用,所以第一步先用源码来编译一个,源码放在安装包里面的\sample\extensions4Qt路径下,直接打开工程编译,编译完成后会在\sample\debug\x64路径下面生成libExtensions4Qt.so库文件。为后面用做准备。
(2)回到上面新建的getstart工程,选中工程,右键添加库-选择添加外部库,即extensions4Qt工程编译结果,也就是依赖Extensions4Qt.so库文件,路径为:产品包目录\sample\debug\x64\下的Extensions4Qt.so,其为Linux上面的库文件。
(3)添加附加库文件,添加所依赖的Extensions4Qt.so库文件及所在目录;添加所依赖的SuperMap iObjects C++库文件及目录。您需要在getstart.pro文件的末端添加如下代码。
unix {
QMAKE_CXXFLAGS =-fshort-wchar
DESTDIR = “../debug/x64”
LIBS +=-L”/home/cys/SuperMap/SMO_CPP_811_14428_59859_64_x64_linux_gcc/bin/bin” \
-lSuToolkit \
-lSuElement \
-lSuOGDC \
-lSuBase \
-lSuWorkspace \
-lSuSpatialIndex \
-lSuEngine \
-lSuGraphics \
-lSuMap \
-lSuChartBase \
-lSuBase3D \
-lSuGeometry \ -L”/home/cys/SuperMap/SMO_CPP_811_14428_59859_64_x64_linux_gcc/sample/debug/x64” \
-lExtensions4Qt \
}
添加工程所引用的头文件目录:
INCLUDEPATH += “/home/cys/SuperMap/SMO_CPP_811_14428_59859_64_x64_linux_gcc/include”
INCLUDEPATH += “/home/cys/SuperMap/SMO_CPP_811_14428_59859_64_x64_linux_gcc/include/private”
INCLUDEPATH += $$PWD/../../SuperMap/SMO_CPP_811_14428_59859_64_x64_linux_gcc/sample/extensions4Qt
配置iObjects C++ 组件宏。需要在上一步的基础上继续向getstart.pro文件的末端添加如下代码。
DEFINES += _UGUNICODE
这样就部署好了开发环境,可以进入下一步:搭建应用程序界面,进行代码的编写了
3.搭建应用程序界面
(1)添加界面按钮使用的图标资源到项目的资源文件中,选中getstart工程,新建一个QT资源文件,首先将产品包目录下\sample\gettingStarted\Resources\的所有图片资源拷贝到你自己的getstart项目文件夹下的Resources文件夹中。
修改Prefix为:/
单击Add按钮,选择“Add Files”,浏览到你自己的GettingStarted项目文件夹下的Resources目录,添加其下的所有图片资源
接下来就是打开打开getstart.h,编写必要的头文件信息
1.声明所依赖的QMapControl类。
2.声明搭建界面的函数setupUI。
3.声明界面上各元素的行为函数addMapAction。
4.声明连接信号和槽的函数addConnect该函数在编写地图功能操作的步骤中使用。
5.声明一个地图窗口对象,QMapControl类对象,QMapControl类即为引入的QMapControl项目所实现的地图窗口类。
6.声明界面上的界面元素对象,如工具条、按钮。
7.添加“打开工作空间中的地图”的槽函数(openMap)声明。
getstart.h中代码如下:
#ifndef GETSTART_H#define GETSTART_H#include <QMainWindow>class QMapControl; //声明所依赖的QMapControl类namespace Ui {class getstart;}class getstart : public QMainWindow{ Q_OBJECTpublic: explicit getstart(QWidget *parent = 0); ~getstart();private: void setupUI(QMainWindow* mainWinsows);//声明搭建界面的函数 void addMapAction(QMainWindow *mainWindow);//声明界面上各元素的行为函数 void addConnect();//声明连接信号和槽的函数public slots: void openMap(); //声明槽函数openMap(打开地图操)private: Ui::getstart *ui; QMapControl* qMapControl;//声明一个地图窗口对象,QMapControl类对象 QToolBar *mainToolBar; //声明界面上工具条对象 QAction *actionOpen; //声明工具条上按钮对象};#endif // GETSTART_H
接下来就是要在getstart.cpp中编写实现代码了;
1.需要添加QMapControl.h头文件的引用。
#include "qmapcontrol.h" //引用QMapControl头文件
2.实现setupUI函数,包括:应用程序界面窗体大小,向窗体上添加工具条,向窗体中添加地图窗口。
void getstart::setupUI(QMainWindow* mainWindow){ //设置应用程序界面窗体的显示标题和窗体大小 mainWindow->setWindowTitle(tr("SuperMap iObjects C++ GettingStarted")); mainWindow->resize(800,600); //实例化一个地图窗口对象,即QMapControl对象 qMapControl = new QMapControl; //将地图窗口置于应用程序窗体的中央 mainWindow->setCentralWidget(qMapControl); //向应用程序窗体中添加工具条对象 mainToolBar = new QToolBar(mainWindow); mainWindow->addToolBar(Qt::TopToolBarArea,mainToolBar); //调用addMapAction函数向界面中添加功能按钮 qMapControl->setFocus();}
3.实现界面上各元素的行为函数addMapAction,主要是向工具条上添加各功能按钮。
//界面上各元素的行为函数void getstart::addMapAction(QMainWindow *mainWindow){ //为"打开工作空间中地图"按钮添加按钮图标并将其置于工具条上 actionOpen = new QAction(QIcon(":/Resources/Image_Open.png"),"Open", this); mainToolBar->addAction(actionOpen);}
4.在setupUI函数中,调用addMapAction函数。
addMapAction(mainWindow);
5.打开地图功能实现:
//打开工作空间中的地图void getstart::openMap(){ UGWorkspace* pWorkspace = new UGWorkspace(); //新建工作空间 UGMap* pMap = qMapControl->GetMap(); //获取工作空间中的地图对象 pMap->SetLineSmoothingMode(false); if (pWorkspace == NULL || pMap == NULL ) { QMessageBox::critical(this,"ERROR",QString::fromUtf8("初始化失败!")); return; } //获取要打开的工作空间文件路径 QString qStrPath = QFileDialog::getOpenFileName(this,QString::fromUtf8("OpenWorkSpace"), "c:/SuperMap_iObjects_CPP/sample/SampleData", tr("smwu(*.smwu)")); //打开指定的工作空间 if(pWorkspace->Open(Translator::QStr2UGStr(qStrPath))) { pMap->SetWorkspace(pWorkspace); } else { QMessageBox::critical(this,"ERROR",QString::fromUtf8("工作空间打开失败!")); return; } if(!pWorkspace->m_MapStorages.GetCount()) { QMessageBox::critical(this,"ERROR",QString::fromUtf8("工作空间不包含地图!")); return; } //获取工作空间中第一幅地图的地图名称 UGString mapName = pWorkspace->m_MapStorages.GetNameAt(0); //打开地图 if (!pMap->Open(mapName)) { QMessageBox::critical(this,"ERROR",QString::fromUtf8("打开地图失败!")); return; } qMapControl->Refresh();//刷新地图窗口}
6.连接信号和槽的函数addConnect
void getstart::addConnect(){ connect(actionOpen,SIGNAL(triggered()),this,SLOT(openMap()));}
7.在getstart::getstart(QWidget *parent) : QMainWindow(parent) 中调用setupUI函数和addConnect函数。
getstart::getstart(QWidget *parent) : QMainWindow(parent), ui(new Ui::getstart){ ui->setupUi(this); setupUI(this); addConnect();}
接下来编译运行就可以出现,单击“打开工作空间中的地图”按钮,浏览到产品安装目录中\sample\data\目录下的工作空间文件并打开地图:
后续再代码中还扩展了地图缩放、平移、量算等基本操作功能,有兴趣可以参见示范代码
示范代码下载地址:链接:http://pan.baidu.com/s/1dENmstr 密码:rktk
- SuperMap iObjects C++在Linux上面的使用
- SuperMap iObjects.NET 8C资料
- SuperMap iObjects Java 8C 产品入门
- SuperMap iObjects Java在Tomact中的应用
- SuperMap iObjects Java 8C基于地形两点间的可视性分析-下载
- SuperMap iObjects C++结合Qt在vs2012上的开发环境搭建
- SuperMap iObjects C++结合Qt在QtCreator上的开发环境搭建
- SuperMap iObjects.NET 在洪涝灾害中的简单应用
- SuperMap iObjects .NET批量更新
- 基于SuperMap iObjects.NET 7C 中扩展图层实现航线一键查询系统
- SuperMap iObjects .NET 8C技术文档 ——三维管线
- SuperMap iServer 7C(2015) war包在Linux上的WebSphere 部署
- RedHat上面部署iObjects C++
- libimobiledevice在mac和Linux上面的使用
- SuperMap iObjects .NET 实现聚合显示详解
- 浅谈SuperMap iObjects制作热力图
- SuperMap iObjects C++之MFC快速入门
- SuperMap iObjects.NET编辑撤销操作详解
- 最小乘积
- 为什么使用redis
- leetcode[496]:Next Greater Element I
- python学习之列表与元组
- leetcode4. Median of Two Sorted Arrays
- SuperMap iObjects C++在Linux上面的使用
- 最佳浏览路线问题
- 逃出迷宫
- 计算时间
- 常见分词工具包
- linux 下安装nginx
- 欢迎使用CSDN-markdown编辑器
- Spock测试代码优化
- APUE读书笔记---第10章 信号