本文略作删改,让新手更好理解一些
1.下载MxDraw控件 注:可到www.mxdraw.com
2.介绍如何把控件放到QT中并运行
2.1引入控件 运行Qt Creator,点击[文件]=>[新建文件或项目…],出来新建项目窗口,如下:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_QT5](https://file.cfanz.cn/uploads/png/2023/12/22/8/c5c08470W1.png)
2.2选择”Qt Widgets Application” 新建一个桌面项目
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_MxDraw控件_02](https://file.cfanz.cn/uploads/png/2023/12/22/8/40213836c1.png)
2.3新建项目完成,点击”mainwindow.ui”,进入界面编辑,如下图:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_QT5_03](https://file.cfanz.cn/uploads/png/2023/12/22/8/09C80S4Z78.png)
2.4在界面上,插入QAxWidge控件(可以理解一个盛放dwg文件的容器),如下图:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_控件_04](https://file.cfanz.cn/uploads/png/2023/12/22/8/3aH1bMa0OW.png)
2.5运行控件安装下的RegMxDrawX.bat注册控件(找到第一步下载的MxDraw控件),只有注册了控件,在下面的界面才能看到MxDraw52,如下图:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_CAD文件_05](https://file.cfanz.cn/uploads/png/2023/12/22/8/D39cdJ693P.png)
2.6双击,拖到界面的QAxWidge控件,选择MxDrawX52
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_QT5_06](https://file.cfanz.cn/uploads/png/2023/12/22/8/37EZ71N727.png)
2.7现在需要编译运行,出现如下连接错误提示,是因为工程中,没有加入Qt Axcontainer,错误提示如下:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_控件_07](https://file.cfanz.cn/uploads/png/2023/12/22/8/LZ78RYfc13.png)
注:Qt提供了QtActiveX模块来支持微软ActiveX的开发,Qt的ActiveX和COM的开发支持两种方式:
1.支持将已有的COM或者ActiveX空间引入到Qt的应用程序中
2.支持将Qt应用程序或者Qt的对象导出成COM对象或者ActiveX控件供他人使用
具体来说,Qt是通过ActiveXQt框架中的两个模块来支持上述所说的两种方式的:
1.使用QAxContainer模块,通过QAxObject和QAxWidget分别支持COM对象和ActiveX控件的开发,可以通过这两个对象将外部的COM或者ActiveX组件接入到Qt应用程序
2.使用QAxServer模块,通过QAxAggregated、QAxBindable和QAxFactory类,通过了进程内和可执行程序exe两种方式的COM Server模式,用来将Qt写的内容导出为COM或者ActiveX供他人使用。
下图简要的说明了QtActiveX的作用:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_控件_08](https://file.cfanz.cn/uploads/png/2023/12/22/8/a0R2Qc16Qc.png)
2.8修改工程属性文件:TestQtMxDraw.pro,加入QT += axcontainer,如下
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_MxDraw控件_09](https://file.cfanz.cn/uploads/png/2023/12/22/8/5P9C4THc23.png)
2.9然后构建所有项目 ,前面的连接错误就消除了。
2.10 点击运行后如下图:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_MxDraw控件_10](https://file.cfanz.cn/uploads/png/2023/12/22/8/80X0bG0161.png)
3. 演示如何在QT调用控件打开函数,打开DWG文件
3.1 增加打开文件按钮(在界面上放一个按钮,并生成按钮事件)
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_CAD文件_11](https://file.cfanz.cn/uploads/png/2023/12/22/8/J6AFP96FS0.png)
3.2点按钮上点击右键,选择[转到槽],增加按钮点击事件
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_CAD文件_12](https://file.cfanz.cn/uploads/png/2023/12/22/8/eICPZfU442.png)
3.3点击[转到槽]
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_控件_13](https://file.cfanz.cn/uploads/png/2023/12/22/8/LC01L0T12d.png)
增加如下代码:
void MainWindow::on_pushButton_clicked()
{
// 执行控件自定义命令函数,命令的id为2,这个id用户可以自己取任意数,可以理解为是给执行的命令一个编号.
ui->axWidget->dynamicCall("DoCommand(const qint32&)",2);} 3.4给控件增加,命令显示事件,如下图:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_QT5_14](https://file.cfanz.cn/uploads/png/2023/12/22/8/b4afS30Y80.png)
在函数中,增加如下代码,打开H盘的1.dwg文件:
void MainWindow::on_axWidget_ImplementCommandEvent(int iCommandId)
{
if(iCommandId == 2)
{
// 调用控件打开函数,打开H:盘的1.dwg文件。
ui->axWidget->dynamicCall("OpenDwgFile(const QString&)","H:\\1.dwg");}
}4. 在VS中使用QT
4.1.运行VS,点[QT5]=>[Open Qt Project File(.pro)…]文件,把刚才我们用Qt Creator引入的到VS中。
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_QT5_15](https://file.cfanz.cn/uploads/png/2023/12/22/8/bSA2e3QcAf.png)
如下:
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_MxDraw控件_16](https://file.cfanz.cn/uploads/png/2023/12/22/8/23I11Ge1ea.png)
导入后,就可以直接编译运行。
![在这里插入图片描述 [Qt5] QT+VS读取dwg文件_QT5_17](https://file.cfanz.cn/uploads/png/2023/12/22/8/92Nd8dE7W0.png)









