Qt熱插拔USB設備函數總結(Windows版)

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()虛函數)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章