SuperMap iObjects C++之Qt Creator快速入门

作者:为梦齐舞

      近段时间,有很多客户咨询iObjects C++如何在Qt Creator中进行应用,相比于Visual Studio,在Qt Creator上编译确实多了很多步骤,下面我们来看下如何在Qt Creator上配置并编写代码打开地图。
一、安装Qt Creator,本篇文章中使用的Qt Creator4.1.0版本,安装步骤就不做介绍了。
二、新建一个Qt的工程
      1、新建工程,选择Qt Widgets Application,点击下一步。
这里写图片描述
      2、输入工程名称,点击下一步
这里写图片描述
      3、选择合适的构建套件,我这里选择添加的4.8.6套件
这里写图片描述
后面直接点击下一步,直到工程创建完成。
三、配置iObjcets C++环境
      1、配置UGUNICODE编码方式,此项必须配置,否则将出现打开工作空间失败、打开数据源失败、编译出错等情况。
            DEFINES += _UGUNICODE
      2、配置附加包含目录
            INCLUDEPATH += “.”
            INCLUDEPATH += “D:/SuperMapSoftware/iObjects C++/SMO_CPP_810_14025_57626_Win/include”
            INCLUDEPATH += “D:/SuperMapSoftware/iObjects C++/SMO_CPP_810_14025_57626_Win/include/private”
      3、配置输出目录
            DESTDIR = "D:/SuperMapSoftware/iObjects C++/SMO_CPP_810_14025_57626_Win/bin/bind
      4、配置附加库目录
            LIBPATH = “D:/SuperMapSoftware/iObjects C++/SMO_CPP_810_14025_57626_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、我们新建一个类,来专门用于打开地图的操作,命名为qmapcontrol
这里写图片描述
      2、让qmapcontrol继承QWidget

class QMapControl:public QWidget

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

void QMapControl::paintEvent(QPaintEvent *event)
{
    if(isNeedOnDraw)
    {
        isNeedOnDraw=false;
         UGGraphics* pGraphics = NULL;
         CreateUGGrpaphics(pGraphics);

         UGRect rcInvalid(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绘图对象:

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

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

void QMapControl::ReleaseUGGraphics(UGGraphics *&pGraphics)
{
    pGraphics->SelectImage(m_pOldImage);
    delete pGraphics;
    pGraphics = NULL;
}

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

void QMapControl::PaintToQPainter()
{
    m_pQimage = new QImage((UGC::UGbyte*)m_pMapImage->GetColors(), m_width, m_height, QImage::Format_ARGB32);
    QPainter paint;
    paint.begin(this);
    QColor backGound(255, 255, 255);
    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)
    {
        delete m_pQimage;
        m_pQimage = NULL;
    }

}

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

void QMapControl::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、封装一个打开地图和关联工作空的方法:

bool QMapControl::openMap(UGString mapName)
{
    if(m_pmap->Open(mapName))
    {
       this->Invalidate();
       return true;
    }
    return false;
}
void QMapControl::SetWorkspace(UGWorkspace *workspace)
{
    m_pmap->SetWorkspace(workspace);
}

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

void MainWindow::openWorkspace()
{
    QString qStrPath = QFileDialog::getOpenFileName(this,QString::fromUtf8("打开工作空间"), "../SampleData", tr("smwu(*.smwu)"));
    UGWorkspace *p_mWorkspace=new UGWorkspace();
    UGWorkspaceConnection p_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://pan.baidu.com/s/1gfdUeYJ 密码:2385

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值