QAxObject *document = documents->querySubObject("Open(const QString&, bool)", inFile1, true);
QAxObject *selection = axObject.querySubObject("Selection");
...
document->dynamicCall("SaveAs(const QString&)", outFile);
document->dynamicCall("Close()");
我不是在谈论这些Qt函数
querySubObject
,dynamicCall
。我说的是 Word / ActiveX 函数 Open
、SaveAs
、Close
...
我只能在一些示例代码片段中瞥见这些功能的一小部分。在哪里可以找到完整的文档?
看起来是ms-word的功能,但是考虑到
Open(const QString&, bool)
,有QString
,这就打消了这个想法。
您链接的问题已经回答了您的问题,但是看到接受的答案是如何完全没有解释的,让我们首先看看那里缺少什么,然后是正确的解决方案(接受的答案不是)。
你需要知道的是Qt提供了转换函数(在ActiveQt的几个文件中)。例如,将
QString
转换为 ActiveX
的 BSTR
:
static inline BSTR QStringToBSTR(const QString &str)
{
return SysAllocStringLen(reinterpret_cast<const OLECHAR*>(str.unicode()), UINT(str.length()));
}
对
QAxBase::querySubObject
重要的是其他地方:函数对 QVariantToVARIANT
和 VARIANTToQVariant
管理从 Qt 到 ActiveX 类型的转换以及所有方法参数的转换。
正确的解决方案是使用同一问题中未接受的投票最多的答案,即:
Word
命名空间中的类,就像在 VBA 中一样。在上面投票最多的答案和 Qt 文档之间,应该清楚这种方法有多简单。