QAxObject不为COM对象创建插槽信号

时间:2016-09-13 15:00:20

标签: c++ qt com

我正在使用Qt3.3(并且没有升级选项,我们及时完全离开Qt)

当我用:

创建WebBrowser对象时
m_lpWebBrowser  = new QAxWidget(this, "ActiveX WebBrowser Plugin");
m_lpWebBrowser->setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}");

为浏览器中的每个事件创建信号(总共55个)

但是,如果我使用:

回复DocumentCompleted事件
pCtrl->QueryInterface(IID_IWebBrowser2, (void**)&brws);
brws->get_Document((IDispatch**)&doc);
m_pDocument = new QAxObject(doc, this, "Document");

其中pCtrl是事件返回的IDispatch我得到的对象显然是一个HTMLDocument(我可以查询任何IHTMLDocument(n)接口的接口)但它只有三个信号:

signal(const QString&,int,void*)
propertyChanged(const QString&)
exception(int,const QString&,const QString&,const QString&)

如果我使用更环绕的方法获取文件的IDispatch *并从中构建QAxObject *,则会出现同样的问题。

在这两种情况下,显然从不为新的QAxObject调用setControl,这似乎是构造信号所必需的。 我需要访问的特定接口是IHTMLDocumentEvents。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我无法解决为什么这样做不起作用的问题,但事实证明,编写自己的事件接收器并不像看起来那么令人畏惧。 QAxEventSink提供了一个简单的示例,并演示您实际上只需要实现Invoke函数。