在qt5中,如果需要处理window啥消息,则需要使用QAbstractNativeEventFilter接口类!
具体过程为:
1)创建继承于QAbstractNativeEventFilter的新类,在这里我使用MainWIndow继承,重载nativeEventFilter方法
class MainWindow : public QMainWindow, public QAbstractNativeEventFilter
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE
{
//...
return false;
};
private:
Ui::MainWindow *ui;
};
2)实现nativeEventFilter方法,主要是对消息进行过滤,具体可以参考qt assistant
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE
{
if(eventType == "windows_generic_MSG" || eventType == "windows_dispatcher_MSG")
{
MSG* pMsg = reinterpret_cast<MSG*>(message);
if(pMsg->message == WM_COPYDATA)
{
qDebug()<<"MainWindow windows system message WM_COPYDATA";
}
}
return false;
};
3)在main方法中,将实现QAbstractNativeEventFilter的对象进行注册;注意,放到a.exec前即可
a.installNativeEventFilter(&w);
这样就可实现对系统消息的拦截
别忘了添加对应的头文件和lib库
#ifdef Q_CC_MSVC
#include <windows.h>
#pragma comment(lib, "user32.lib")
#endif