2015-05-21 299 views
0

我想在我的Qt應用程序中接收Windows消息。我第一次開始使用winEvent()函數,但它從來沒有被調用過,我在Qt 5.4中學習過,推薦使用nativeEvent(),但它也從來沒有被調用過?下面是我的代碼,它是裸露的骨頭應用,我只想當USB設備插入趕上像WM_PAINT消息,並系統消息。Qt的nativeEvent()永遠不會被調用

// 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); 
}; 

//主窗口的.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; 
} 
+0

有關如何在將來防止此類錯誤的信息,請參閱[本答案](http://stackoverflow.com/questions/3887674/is-there-a-way-to-flag-at-compile-time -overriden的方法,它的簽名-DO)。對於Qt,你應該在方法聲明的末尾使用Q_DECL_OVERRIDE--這將使用正確的特定於平臺的關鍵字。 –

回答

2

爲nativeEvent你的方法簽名是錯誤的,它應該是:

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

將Q_DECL_OVERRIDE(或C++ 11中的覆蓋關鍵字)添加到方法聲明中以捕獲這些代碼很有用。

相關問題