QAxObject 没有为 COM 对象创建槽信号

QAxObject is not creating slots signals for a COM object

我正在使用 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.

我做错了什么?

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