所在的位置: C++ >> C++资源 >> SuperMapiObjectsC之

SuperMapiObjectsC之

作者:为梦齐舞

近段时间,有很多客户咨询iObjectsC++如何在QtCreator中进行应用,相比于VisualStudio,在QtCreator上编译确实多了很多步骤,下面我们来看下如何在QtCreator上配置并编写代码打开地图。一、安装QtCreator,本篇文章中使用的QtCreator4.1.0版本,安装步骤就不做介绍了。二、新建一个Qt的工程1、新建工程,选择QtWidgetsApplication,点击下一步。2、输入工程名称,点击下一步3、选择合适的构建套件,我这里选择添加的4.8.6套件后面直接点击下一步,直到工程创建完成。三、配置iObjcetsC++环境1、配置UGUNICODE编码方式,此项必须配置,否则将出现打开工作空间失败、打开数据源失败、编译出错等情况。DEFINES+=_UGUNICODE2、配置附加包含目录INCLUDEPATH+="."INCLUDEPATH+="D:/SuperMapSoftware/iObjectsC++/SMO_CPP____Win/include"INCLUDEPATH+="D:/SuperMapSoftware/iObjectsC++/SMO_CPP____Win/include/private"3、配置输出目录DESTDIR="D:/SuperMapSoftware/iObjectsC++/SMO_CPP____Win/bin/bind4、配置附加库目录LIBPATH="D:/SuperMapSoftware/iObjectsC++/SMO_CPP____Win/lib/libd"5、配置附加依赖项LIBS+=-lSuToolkitd-lSuElementd-lSuOGDCd-lSuBased-lSuWorkspaced-lSuSpatialIndexd-lSuEngined-lSuGraphicsd-lSuMapd-lSuChartBased-lSuBase3Dd-lSuGeometryd-lSuMapEditord-lSuStreamd-lSuAlgorithmd-lSuProjectiond-lSuGeoOperationd-lSuSymbold-lSuDrawingd-lSuFileParserd-lSuRepresentationd-lSuChartToolkitd-lSuTopoBased-lSuEngineOGDCd-lSuNetToolkitd-lSuTopoBuilderd-lSuSpatialQueryd-lSuEngineImagePlugind-lSuGeneralizationd-lSuGraphics3Dd-lSuParticleSystemd-lSuGridModelingd-lSuOverlayd-lSuDataCheckd-lSuGeometry3Dd-lSuCompactFiled-lSuSceneEditord-lSuScened-lSuRenderd-lSuLayer3DDatasetd到此为止重要的配置项,就配置完成了,具体配置文档请参加后面Demo中的pro文件。四、编写代码打开地图1、我们新建一个类,来专门用于打开地图的操作,命名为qmapcontrol2、让qmapcontrol继承QWidget

classQMapControl:publicQWidget

3、编写代码用于打开地图。a、重写paintEvent方法,用于绘制图像

voidQMapControl::paintEvent(QPaintEvent*event){if(isNeedOnDraw){isNeedOnDraw=false;UGGraphics*pGraphics=NULL;CreateUGGrpaphics(pGraphics);UGRectrcInvalid(0,0,m_width,m_height);m_pMapEditorWnd-OnDraw(pGraphics,rcInvalid,rcInvalid,false,false);ReleaseUGGraphics(pGraphics);}PaintToQPainter();}

1)其中m_width/m_height通过初始化qmapcontrol时进行赋值:

QMapControl::QMapControl(){m_width=this-width();m_height=this-height();m_pQimage=NULL;isNeedOnDraw=false;this-Init();}

2)其中CreateUGGrpaphics为创建Grpaphics绘图对象:

voidQMapControl::CreateUGGrpaphics(UGGraphics*pGraphics){pGraphics=UGGraphicsManager::NewGraphics();pGraphics-CreateCompatibleGraphics(NULL,m_pMapEditorWnd-m_mapWnd.m_Map.IsGraphicsAlphaEnable());m_pOldImage=pGraphics-SelectImage(m_pMapImage);}

3)其中ReleaseUGGraphics为释放绘图对象:

voidQMapControl::ReleaseUGGraphics(UGGraphics*pGraphics){pGraphics-SelectImage(m_pOldImage);deletepGraphics;pGraphics=NULL;}

4)其中PaintToQPainter是将图像绘制到Qt的界面上:

voidQMapControl::PaintToQPainter(){m_pQimage=newQImage((UGC::UGbyte*)m_pMapImage-GetColors(),m_width,m_height,QImage::Format_ARGB32);QPainterpaint;paint.begin(this);QColorbackGound(,,);paint.fillRect(0,0,m_width,m_height,backGound);paint.drawImage(QRectF(0,0,m_width,m_height),*m_pQimage);paint.end();if(m_pQimage!=NULL){deletem_pQimage;m_pQimage=NULL;}}

b、重写resizeEvent方法,用于在窗体大小发生变化时,及时调整地图

voidQMapControl::resizeEvent(QResizeEvent*event){m_width=this-width();m_height=this-height();m_pMapEditorWnd-OnSize(NULL,UGRect(0,0,m_width,m_height));m_pMapImage=UGGraphicsManager::NewImage();m_pMapImage-CreateCompatibleImage(NULL,m_width,m_height);this-Invalidate();}

c、封装一个打开地图和关联工作空的方法:

boolQMapControl::openMap(UGStringmapName){if(m_pmap-Open(mapName)){this-Invalidate();returntrue;}returnfalse;}voidQMapControl::SetWorkspace(UGWorkspace*workspace){m_pmap-SetWorkspace(workspace);}

d、在mainwindow文件中添加空间,调用打开地图的方法即可。

voidMainWindow::openWorkspace(){QStringqStrPath=QFileDialog::getOpenFileName(this,QString::fromUtf8("打开工作空间"),"../SampleData",tr("smwu(*.smwu)"));UGWorkspace*p_mWorkspace=newUGWorkspace();UGWorkspaceConnectionp_mWorkspaceConnection=UGWorkspaceConnection();p_mWorkspaceConnection.m_strServer=QStringToUGString(qStrPath);p_mWorkspaceConnection.m_nWorkspaceType=9;if(!p_mWorkspace-Open(p_mWorkspaceConnection)){QMessageBox::critical(this,"ERROR",QString::fromLocal8Bit("打开工作空间失败"));return;}qmapControl-SetWorkspace(p_mWorkspace);qmapControl-openMap(p_mWorkspace-m_MapStorages.GetNameAt(0));}

到此为止就可以顺利的打开地图,进行浏览了。五、后续再代码中还扩展了地图缩放平移的基本操作功能,有兴趣可以参见示范代码示范代码下载


转载请注明:http://www.aierlanlan.com/rzgz/3571.html

  • 上一篇文章:
  •   
  • 下一篇文章: