這個問題困擾了我2年了,之前找到的教程都是MFC的,ATL導入向導或是通過導入類型庫的方式來調用控件,我一直都搞不明白。
最近學習了ActiveQT以及通過ActiveQT控制EXCEL、Word、PowerPoint、flash后,我終於大致明白了。
經過幾個小時的嘗試,終於成功通過Qt操作Solidworks。建議各位可以去BAIDU相關文章,關鍵詞ActiveQt
首先我要說明白一下,VC都是通過COM來操作Solidworks的,既然如此,我們只要通過Qt的COM操作方法來控制就可以了。
我用的是Qt5.4、Solidworks2014。
其實有兩種方式:1、使用ClassId 直接獲取COM對象來操作Solidworks。2、使用Qt自帶的dumpcpp工具導出H文件,然后通過指針對象來控制。
第二種方法和VC的開發方式類似。但是導出的文件有12mb,37W行代碼,IDE相當容易崩潰,而且編譯有錯誤,需要求改一下頭文件,但是因為老是崩潰,我就沒有繼續嘗試了。
不過輸出的頭文件至少可以當個API手冊看,至於輸出方法:將solidworks目錄下的sldworks.tlb文件復制到隨便一個目錄下(我復制到自己的Qt工程目錄),打開Qt的命令行功能,通過cd轉到這個目錄下,運行dumpcpp SldWorks.tlb 即可。
下面說一下如何用第一個方法:
首先在項目文件中添加:QT+= axcontainer,之后運行QMake。
在Cpp文件中添加#include <ActiveQt/QAxObject>
之后在需要運行地方添加以下代碼:
QAxObject *swApp=new QAxObject("SldWorks.Application",0);
if(!swApp->isNull())
{
swApp->dynamicCall("SetVisible(bool)",true);
swApp->dynamicCall("OpenDoc(QString,int)",QString("C:\\Users\\512\\Desktop\\a.SLDPRT"),1);
}
SldWorks.Application是COM的簡寫,可以在注冊表中搜索命名控件來獲得。
