QAxObject不为COM对象创建槽信号

QAxObject is not creating slots signals for a COM object

本文关键字:信号 创建 对象 不为 COM QAxObject      更新时间:2023-10-16

我正在使用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*,则会出现相同的问题。

在这两种情况下,很明显setControl从来没有被新的QAxObject调用过,这似乎是构建信号所必需的。我需要访问的特定接口是IHTMLDocumentEvents。

我做错了什么?

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