Qt中使用QAxObject的dynamicCall和querySubObject函数操作SolidWorks的方法

  大部分函数可以直接从VB语言“翻译”过去成为Qt中的C++语言,如

    Set Part = swApp.OpenDoc6(strFilePath & "\" & partName & ".SLDPRT", 1, 0, "", longstatus, longwarnings) '打开指定文件,这里是SLDPRT格式三维模型
    
    Set Part = swApp.ActivateDoc2(partName & ".SLDPRT", False, longstatus) '设置文件处于激活状态

   翻译到Qt就是

        Part = swApp->querySubObject("OpenDoc(QString,int)",path,1);
        Part = swApp->querySubObject("ActivateDoc(QString)",this->partName);


  这里不用OpenDoc6是为了简便。这里的数据类型都是string, int 这样子的常规类型

  但是有一种问题,就是这样的VB语言,比如SelectByID2

	boolstatus = Part.Extension.SelectByID2("MainRad@草图[email protected]", "DIMENSION", 1.52752972114265E-02, -1.13202148822171E-03, 2.30092248393811E-02, False, 0, Nothing, 0)


   根据SolidWorks的api说明文档,点击打开链接

 

Visual Basic (Usage)  
Dim instance As IModelDocExtension
Dim Name As String
Dim Type As String
Dim X As Double
Dim Y As Double
Dim Z As Double
Dim Append As Boolean
Dim Mark As Integer
Dim Callout As Callout
Dim SelectOption As Integer
Dim value As Boolean
 
value = instance.SelectByID2(Name, Type, X, Y, Z, Append, Mark, Callout, SelectOption)

 

C++/CLI  
bool SelectByID2( 
&   String^ Name,
&   String^ Type,
&   double X,
&   double Y,
&   double Z,
&   bool Append,
&   int Mark,
&   Callout^ Callout,
&   int SelectOption
) 

  这里面有一个Callout的指针,在Qt里面用

        myExtension->dynamicCall(
                    "SelectByID2(QString,QString,double,double,"
                    "double,bool,int,Callout *,int)",list);


  会提醒参数不匹配,这里要用QAxObject的asVariant()方法来解决,就是说,list里面对应append一个QAxObject*类型的参数

	list.append(myExtension->asVariant());


  然后dynamicCall里面把Callout * 改成QAxObject *类型,就可以了

 

        myExtension->dynamicCall(
                    "SelectByID2(QString,QString,double,double,"
                    "double,bool,int,QAxObject *,int)",list);

  接下来就是EditDimensionProperties2函数,这个直接翻译就可以了

 

        Part->dynamicCall("EditDimensionProperties2(int,double,double,"
                          "QString,QString,bool,int,int,bool,int,int,"
                          "QString,QString,bool,QString,QString,bool)",list1);

参考内容:点击打开链接

 

你可能感兴趣的:(QT中的问题,QT操作SolidWorks,QAxObject,IDispatch,DynamicCall)