Qt调用ActiveX控件的两个问题
Qt使用ActiveX控件的方法这里不再介绍,具体请参考:
http://blog.csdn.net/tingsking18/archive/2010/03/22/5403038.aspx
问题1:
通过Qt调用ActiveX控件,一般是把IDispatch*或者是IKnown* 封装成QAxObject,然后再调用
querySubObject或者dynamicCall方法。但是当调用dynamicCall方法的时候需要传入一个
IDispatch*或者是IKnown*的时候我们该怎么办呢?可以调用QAxObject的asVariant()方法,
将这个COM对象装换为QVariant。例如:
SetSourceData函数的原型是:
void SetSourceData(Range^ Source, Object^ PlotBy);
我们要这样调用:
QAxObject * range = worksheet->querySubObject("Range(\"A1:H1\")");
activeChart->dynamicCall("SetSourceData(QAxObject*,int)",range->asVariant(),1);
问题2:
除了使用QAxObject方法来调用ActiveX还有什么其他的办法么?QAxObject使用起来太麻烦了。
如果不想这样做还可以QAxWidget还为我们提供了QueryInterface方法,和用VC调用基本差不多了。
例如:
IWebBrowser2 *webBrowser = 0;
activeX->queryInterface(IID_IWebBrowser2, (void *)&webBrowser);
if (webBrowser)
{
webBrowser->Navigate2(pvarURL);
webBrowser->Release();
}
Tags: activeqt, activex
Posted on August 2nd, 2010 in Qt技术 | 2 Comments ».