qt 环境下mapx组件的鼠标跟踪

经过两天的研究mapx组件人坐标转换还是没有转换成功,因为不管怎么变,定点转换的经纬度坐标始终与期望的值有较大的偏差。最后还是想老大请教了一下,划了半天功夫就研究出来了(不愧是老大,仰慕之情犹如滔滔江水……):老大说,组件导出的包文件中坐标转换函数在qt环境下有问题,你使用vc下面的dll就可以了,还给了一个链接让参考,再次感谢这位博主。http://blog.csdn.net/zirandeai/article/details/51160111

下面给出vc做的动态库,,可以直接下载。https://pan.baidu.com/s/1kVNN0OJ

下载后将文件放在项目路径下,然后将.pro文件加入.lib的文件路径,具体如下:LIBS += ../Eagle/MapXLib1.lib

将.h文件加入到头文件中,最后显示的加载dll文件(本人是显示的加载动态库)。

在头文件中声明一个QLibrary变量,初始化的时候加载dll。这样就可以直接使用mapx坐标转换函数了。

{

    ui->setupUi(this);
    mapx = NULL;
    QAxWidget *widget = new QAxWidget(this);
    widget->setControl("{9D6ED188-5910-11D2-98A6-00A0C9742CCA}");
    widget->move(10,10);
    widget->resize(size().width()-10,size().height()-10);
    mapx = new CMapX(widget->asVariant().value<IDispatch*>());
    pLayer = mapx->Layers()->CreateLayer("test");
    mapx->ZoomTo(3,120.06872, 29.35692);
    QObject::connect(widget, SIGNAL(MouseMove(int, int, double, double)), this, SLOT(MapxMouseMove(int, int, double, double)));

}
MouseMove(int, int, double, double)是mapx的信号

void MainWindow::MapxMouseMove(int Button, int Shift, double X, double Y){

    if(lib.load()){
        double Lng = 0.0;
        double Lat = 0.0;
        CoordScreen2Map(mapx->asVariant().value<IDispatch*>(),X,Y,Lng,Lat);
        qDebug()<<"mapx"<<Lng<<"mapy"<<Lat;

        pFeatureFactory = mapx->FeatureFactory();
        pFeature = pFeatureFactory->CreateSymbol();
        pPoint = pFeature->Point();
        pPoint->Set(Lng,Lat);
        pLayer->AddFeature(pFeature->asVariant().value<IDispatch*>());
    }
    else {
        qDebug()<<"error";
    }
}
时间: 2024-10-24 07:32:20

qt 环境下mapx组件的鼠标跟踪的相关文章

qt 环境下mapx组件打包后编译产生c2248和c2512错误

C:\Qt\Qt5.6.0\5.6\msvc2013\include\QtCore\qmetatype.h:760: error: C2248: “MapSpace::IRowCursor::IRowCursor”: 无法访问 private 成员(在“MapSpace::IRowCursor”类中声明) C:\Qt\Qt5.6.0\5.6\msvc2013\include\QtCore\qmetatype.h:761: error: C2512: “MapSpace::IRowCursor”:

qt环境下Mapx组建的编程---------regoin

#include "widget.h" #include "ui_widget.h" #include <QPushButton> #include <QToolBar> Widget::Widget(QWidget *parent) : QWidget(parent), map(nullptr), pCMapXPoint(nullptr),pCMapXPoint1(nullptr),pCMapXPoint2(nullptr), pCMapF

最强数学库GSL(GNU Scientific Library) Qt环境下部署

1.前言 GSL(GNU Scientific Library)是一个 C 写成的用于科学计算的库,有超过1000个函数,该库提供了关于数学计算的很多方面,Matlab的大部分函数几乎都能借助它实现,可以在数值计算中省却很多事情.关于GSL的详细功能.GSL的功能及相关头文件的介绍可以见此偏文章:http://blog.csdn.net/augusdi/article/details/8834182,或者看看这位仁兄的blog:http://www.cnblogs.com/Jedimaster/

Qt 环境下的mapx控件-------2

今天花了一天的时间去查找mapx相关的资料,但是到最后想要的东西还是一无所获,不过还是学到了很多东西.下面以大家分享一下: mapx软件的安装:下载后安装mapx软件,成功后会在安装路径下存在activex文件 然后使用管理员权限在cmd窗口注册该控件 regsvr32 C:\mapx\MapX4\MAPX40.OCX 注意:这里换成自己的安装路径,路径中间不要有空格,否则空间的注册数失败 排除上述问题后注册会成功 最后打开系统注册表就可以查看系统注册表中是否存在该控件 regedit -->编

Qt 环境下做的小滑块组件

Qt下实现在里面添加键值对的两个值,设置其显示模式,使其动态滑动出来 详细功能看代码! kinfocube.h /*************************************************=========================================================================== * 模块名称:信息块 KInfoCube * 功能说明:滑动显示信息模块,具有水平显示和垂直显示模式 * ---------------

QT环境下,&lt;POSIX多线程&gt;全局变量共享问题

开始的技术路线是: 首先有两个主线程: 1,gui线程 2,等待客户端socket连接用的,listen线程 (当有客户端连接时,即creat一个新的线程2用来跟客户端通信,再来新的客户端,继续creat新的work线程3用于通信,以此类推,目前最多可以creat5个线程,即可以同时跟5台客户端通信,设置了监听的socket服务器最多监听5个队列.线程2继续listen) 出现的问题是: 用来通信的work线程3,收到一个来自客户端的xml文件,然后解析文件,并将其数据放在一个全局的静态stru

Qt编程之mapx组件编程

今天利用组件打包程序写了一些小例子,给大家贴出来,顺便提高一下记忆. 上一篇介绍了直接使用控件和使用控件打包程序对控件进行编程的方法.个人感觉后者编程更方便.不说废话了: 头文件中所需要的类型指针对象,顾名思义可以看到指针对象所述的类 MapSpace::Map *map; MapSpace::CMapXPoint *pCMapXPoint,*pCMapXPoint1; MapSpace::CMapXFeatureFactory *pCMapFeaFactory; MapSpace::CMapX

Linux下配置QT环境

一.下载Qt源码包到本机,然后解压缩 #tar zxvf qt-x11-opensource-src-4.3.2.tar.gz -C /usr/local //将qt-x11-opensource-src-4.2.3.tar.gz源码包解压缩到/usr/local目录(推荐解压缩至 /usr/local目录) 二.进入用户家目录的.bash_profile文件设置Qt环境变量,在这里我们以root用户以例. #vi /root/.bash_profile //打开root用户.bash_prof

QT在linux环境下读取和设置系统时间(通过system来直接调用Linux命令,注意权限问题)

QT在Linux环境下读取和设置系统时间 本文博客链接:http://blog.csdn.NET/jdh99,作者:jdh,转载请注明. 环境: 主机:Fedora12 开发软件:QT 读取系统时间 [cpp] view plain copy void moreidDialog::refresh_time() { QDateTime time; txt_time->setText(time.currentDateTime().toString("yyyy") + ".&