- 起因是自己需要写一个Qt操作office word文档的类,
总结出了QAxObject相关方法的使用模板
- 大家可以对支持ActiveX的程序查程序API文档后对号入座
- 程序名可以使用ApplicationName.Application或者Uuid
- 使用ApplicationName的话可以到QtCreator的designer中
拖拽一个QAxObject到窗口, 再右键添加控件, 就可以看到支持的控件
- 找不到想要的控件的, 可以自己到注册表查询Uuid
```c++
#include <QAxObject>void qax_activeX_example_code()
{QAxObject* obj2 = new QAxObject();obj2->setControl("ApplicationName.Application|Uuid");/* 间接获得程序接口 */QAxObject* obj = new QAxObject("ApplicationName.Application|Uuid");/* 直接获得程序接口 */obj->dynamicCall("Function()");/* dynamicCall时prototype必须显式的使用()表示Function是方法 */int arg = 0, arg2 = 1;obj->dynamicCall("Function(Arg, Arg2)", arg, arg2);/* 带参的dynamicCall */obj->setProperty("Attribute", arg); /* 设置属性 */int num = obj->property("Attribute").toInt();/* 获取相应属性(int) */ (void)num;bool can = obj->property("Attribute2").toBool();/* 获取相应属性(bool) */ (void)can;QString qstr2 = obj->property("Attribute3").toString();char* ch_str2 = (char*)qstr2.toStdString().c_str();/* 获取相应属性(QString --> char*) */ (void)ch_str2;char* ch_str = (char*)obj->property("Attribute3").toString().toStdString().c_str();/* 获取相应属性(char*) */ (void)ch_str;QAxObject* sub_obj = obj->querySubObject("Parent.Sub");/* 从obj获取子对象(无参) */ (void)sub_obj;QAxObject* sub_obj2 = obj->querySubObject("Parent.Sub(arg)", arg);/* 从obj获取子对象(有参) */ (void)sub_obj2;QAxObject* sub_obj2 = obj->querySubObject("Sub(arg)", arg);/* 从obj获取子对象(有参), 也有可能是这种形式* 以所调程序对象的方法prototype为准*/ (void)sub_obj2;
}
```