1.1在一個QWidget上重寫虛函數QWidget::nativeEvent(),插拔USB設備後,會自動觸發該虛函數。下面是重寫虛函數代碼:
#include <dbt.h>
#include <QDebug>
bool Widget::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
//在這裏做你想要的操作
//其中eventType表明了此次消息的類型,message存儲着具體是什麼信息,result是個傳出變量;
//eventType在windows操作系統下是"windows_generic_MSG"字符串,可以查看Qt的文檔知道
//message表明這個信號附帶哪些信息,在熱插拔事件中是WM_DEVICECHANGE類型,具體windows定義了哪些,可以查看“Dbt.h”文件
if(eventType == QByteArray("windows_generic_MSG"))
{
//MSG是winApi定義的結構體,具體定義如下:
/*
* typedef struct tagMSG {
* HWND hwnd;
* UINT message; //消息類型,熱插拔是WM_DEVICECHANGE
* WPARAM wParam; //對消息的進一步描述
* LPARAM lParam; //指向一個結構體,結構中有好多消息
* DWORD time; //產生時間
* POINT pt; //鼠標座標
* } MSG;
*/
MSG *pMsg = reinterpret_cast<MSG*>(message);
if(pMsg->message == WM_DEVICECHANGE)
{
switch(pMsg->wParam)
{
//設備連上
case DBT_DEVICEARRIVAL: qDebug() << "設備連上" ; break;
//設備斷開
case DBT_DEVICEREMOVECOMPLETE: qDebug() << "設備斷開" ; break;
//其他的消息可以查看“Dbt.h”文件
}
}
}
return false;
}
1.2結果下圖所示:
1.3由上面結果可知,插入USB時提示設備連上,拔出USB設備時提示設備斷開。但要求知道哪個設備插入或者斷開時,可以參考這篇博客:https://blog.csdn.net/qq_34236354/article/details/82707900。
參考內容:
https://blog.csdn.net/qq_34236354/article/details/82707900(參考:主要參考插拔nativeEvent()虛函數)