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