- 起因是自己需要写一个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;
}
```