我使用的是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)接口执行queryInterface操作),但它只有三个信号:
signal(const QString&,int,void*)
propertyChanged(const QString&)
exception(int,const QString&,const QString&,const QString&)如果我使用更间接的方法为文档获取IDispatch*并从它构造QAxObject*,也会出现同样的问题。
在这两种情况下,很明显,新的QAxObject永远不会调用setControl,这似乎是构造信号所必需的。我需要访问的特定接口是IHTMLDocumentEvents。
我做错了什么?
发布于 2016-09-19 18:08:22
我不能解决为什么这不起作用的问题,但事实证明,编写自己的事件接收器并不像看起来那么令人生畏。QAxEventSink提供了一个简单的示例,演示了您实际上只需要实现Invoke函数。
https://stackoverflow.com/questions/39473207
复制相似问题