繁体   English   中英

如何在Qt中的WinOS窗口中安装eventFilter?

[英]How to install a eventFilter to a WinOS window in Qt?

我有一个WinOS窗口的句柄,例如。 Qt.I中的Internet Explorer窗口以这种方式完成: m_hwndUnderCursor= WindowFromPoint(curPoint);

如何通过QWidget::find(m_hwndUnderCursor)->installEventFilter(this);将eventFilter安装到m_hwndUnderCursor QWidget::find(m_hwndUnderCursor)->installEventFilter(this); 成功了,这样我就可以在没有HOOK技术的情况下在Qt中观看m_hwndUnderCursor

我知道因为m_hwndUnderCursor是指向WinOS窗口的指针所以QWidget :: find(m_hwndUnderCursor)总是返回NULL。 有办法吗?

一个快速的答案是:你不能这样做。

一个更详细的答案:

QObject::installEventFilter()基于Qt的事件引擎(事件循环,事件传播等)工作。 这是Qt的内部资源,在Qt应用程序之外的其他窗口中无法使用。 它只适用于您正在调用installEventFilter()的同一应用程序的一部分的窗口。

出于类似的原因,如果您尝试查找非Qt窗口, QWidget::find()将永远不会在结果中为您提供现有的QWidget 它仅适用于在Qt应用程序中创建的窗口。 另请参阅: QWidget :: find可以从不同的进程中查找小部件吗?

您将不得不使用本机Windows API处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM