永远不会调用Qt的nativeEvent()

时间:2015-05-21 20:47:35

标签: c++ qt qt5

我正在尝试在我的Qt应用程序中接收Windows消息。我首先开始使用winEvent()函数,但它从未调用过,我在Qt 5.4中学习过,建议使用nativeEvent(),但它也从未被调用过?以下是我的代码,它是裸骨应用程序,我只想在插入USB设备时捕获WM_PAINT等消息以及系统消息。

// mainwindow.h

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    bool nativeEvent(QByteArray & eventType, void * message, long * result);
};

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

bool MainWindow::nativeEvent(QByteArray & eventType, void * message, long * result)
{
    MSG *msg = static_cast< MSG * >( message );
    // TODO: filter out or modify msg struct here
    // ...

    qDebug() << "Message recieved"; // it never comes here, never breaks in this function with debugger

    return false;
}

1 个答案:

答案 0 :(得分:2)

nativeEvent的方法签名是错误的,它应该是:

bool nativeEvent(const QByteArray & eventType, void * message, long * result);

将Q_DECL_OVERRIDE(或C ++ 11中的覆盖关键字)添加到方法声明中以捕获它们非常有用。