- MxDraw 云图
- 快速入门
- 前端 mxdraw 和 mxcad 库预览编辑图纸
- 后台使用 Node.js 调用梦想 API
- CAD 与 GIS 集成说明
- 梦想云图 Node.JS 服务
- iOS 开发
- 安卓开发
- 网页 CAD 开发
- 网页快速入门 aspaps.netphpjava
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义实体
- 自定义命令
- 光栅图处理
- 图面搜索
- 控件事件
- 打印控制
- 界面控制
- COM 开发
- 视频教程
- VB 快速入门
- Delphi 快速入门
- CSharp 快速入门
- java 快速入门
- QT 快速入门
- 易语言快速入门
- Powerbuilder 快速入门
- wpf 控件入门
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义命令
- 自定义实体
- 打印控制
- 控件事件
- 图面搜索
- 光栅图处理
- 界面控制
- C++ 开发
- C++ bulider 快速入门
- C++ 快速入门(VS2010)
- C++ 快速入门(com 接口)
- 图纸数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展程序
- 扩展数据
- 自定义函数
- 自定义实体
- 光栅图处理
- 图面搜索
- 控件事件
- 界面控制
- 常见问题
- 试用技术服务申请
- 会员下载最新程序
- 备用下载
- 控件安装运行说明
- 控件最新更新
- 控件功能简介
- 控件图形数据库
- 控件界面控制
- 控件命令执行原理
- 控件系统变量说明
- 控件常见问题说明
- 修改对象属性
- 网页加载 CAD 图纸的两个方案
- MxDraw3D 控件
- 前端基础工程化知识
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
QT调用控件COM接口方法说明
1. 创建一个COM组件
// 比如创建一个MxDrawUiPrEntity MxDrawUiPrEntity getEntity; // 比如创建一个MxDrawApplication MxDrawApplication app; // 创建之后,就可以直接调用它的函数。 // 先择一个对象. getEntity.setMessage("select entity:"); if(getEntity.go() != 1) return;
2. 得到返回的COM接口对象的使用.
函数接口返回的COM接口对象,都是I开头,比如:IMxDrawPoint*
注意:这时调用I开头的COM接口对象函数,属性时,不要直接使用函数,属性访问,可能会出错(QT的原因)。
得到属性使用:property, property返回QVariant,修改属性使用setProperty
调用方法使用:querySubObject, querySubObject返回 QAxObject, QAxObject转到QVariant:pPoint->asVariant()
IMxDrawEntity* pEnt = getEntity.Entity(); // 如下调用会出错. QString sName = pEnt->objectName() // 正确调用. QString sName = pEnt->property("ObjectName").toString(); // 同理调用函数,使用querySubObject,不要直接调用; // 比如. IMxDrawPoint* pClosestPoint = (IMxDrawPoint*)(pEnt->querySubObject("GetClosestPointTo2(QVariant,bool)",pPoint->asVariant(),1));
3.如下例子,让用户选择一个对象,然后,点取一个点,得到点到PL线的最近点,和求导数.
void MainWindow::TestSelectEntity() { MxDrawUiPrEntity getEntity; getEntity.setMessage("select entity:"); if(getEntity.go() != 1) return; MxDrawUiPrPoint getPoint; getPoint.setMessage("in pt:"); if(getPoint.go() != 1) return; IMxDrawPoint* pPoint = getPoint.value(); double dX = pPoint->property("x").toDouble(); IMxDrawEntity* pEnt = getEntity.Entity(); QString sName = pEnt->property("ObjectName").toString(); if (sName == "McDbPolyline"){ IMxDrawPoint* pClosestPoint = (IMxDrawPoint*)(pEnt->querySubObject("GetClosestPointTo2(QVariant,bool)",pPoint->asVariant(),1)); double dX2 = pClosestPoint->property("x").toDouble(); IMxDrawVector3d* pVec = (IMxDrawVector3d*)pEnt->querySubObject("GetFirstDerivEx(QVariant)",pClosestPoint->asVariant()); if(pVec != NULL) { QString st; st.sprintf("vec:%f,%f,%f", pVec->property("x").toDouble(), pVec->property("y").toDouble(), pVec->property("z").toDouble() ); qDebug() << st; } } }
4. 控件方法调用
控件对象方法调用,可以使用dynamicCall,querySubObject调用。
dynamicCall返回的是QVariant,函数返回的是一个普通值用它调用
querySubObject返回的是QAxObject,函数返回的是一个COM 接口对象使用它调用。
COM组件对象转成QVariant转递.
// 如下 : MxDrawMcCmColor cloro; cloro.SetRGB(0, 0, 255); newLayer->setProperty("Color",cloro.asVariant()); // 下面代码,创建一个图层,并设置图层的颜色 void MainWindow::on_pushButton_clicked() { // 增加图层. 得到图层id. qlonglong id = ui->axWidget->dynamicCall("AddLayer(const QString&)", "蓝色图层").toLongLong(); // 使用接口。得到数据接口。 MxDrawDatabase *database = (MxDrawDatabase *)ui->axWidget->querySubObject("GetDatabase()"); // 得到图层接口. MxDrawLayerTableRecord * newLayer = (MxDrawLayerTableRecord *)database->querySubObject("ObjectIdToObject(qlonglong lId)", id); // 修改新增加图层颜色, // 创建颜色组件. MxDrawMcCmColor cloro; cloro.SetRGB(0, 0, 255); //IMxDrawMcCmColor* pcolor = ( IMxDrawMcCmColor* )cloro.qObject(); // qt原因,SetColor不管作用. //newLayer->SetColor(pcolor);//这一行没有执行成功,图层颜色没变化 // 要使用这个方法. newLayer->setProperty("Color",cloro.asVariant()); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论