注册插拔事件: 基于WinAPI编程都差不多

GUID HidGuid ={ 0x4D1E55B2, 0xF16F, 0x11CF,{0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}};
DEV_BROADCAST_DEVICEINTERFACE DevInterface;
ZeroMemory(&DevInterface,sizeof(DEV_BROADCAST_DEVICEINTERFACE));
DevInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
DevInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
DevInterface.dbcc_classguid = HidGuid;
RegisterDeviceNotification((HANDLE)this->winId(),&DevInterface,DEVICE_NOTIFY_WINDOW_HANDLE);

重载nativeEvent函数:

bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    MSG* msg = reinterpret_cast<MSG*>(message);
    int msgType = msg->message;
    (void)eventType;
    (void)result;
    if(msgType==WM_DEVICECHANGE)
    {
        // 设备变化
        PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;
        switch (msg->wParam) {
        case DBT_DEVICEARRIVAL:

            if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
            {
                PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                if(lpdbv->dbcv_flags ==0)
                {
                    //插入u盘
                    //QString USBDisk = QString(this->FirstDriveFromMask(lpdbv ->dbcv_unitmask));
                    //qDebug() << "USB_Arrived and The USBDisk is: "<<USBDisk ;
                    ui->textBrowser->append("USB_Arrived and The USBDisk is");

                }
            }
            else if(lpdb->dbch_devicetype = DBT_DEVTYP_DEVICEINTERFACE)
            {
            }
            else
            {

            }
            break;

        case DBT_DEVICEREMOVECOMPLETE:
            if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
            {
            }
            else if(lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
            {
               //PDEV_BROADCAST_DEVICEINTERFACE pDevInf  = (PDEV_BROADCAST_DEVICEINTERFACE)lpdb;
               //QString strname = QString::fromWCharArray(pDevInf->dbcc_name,pDevInf->dbcc_size);
               ui->textBrowser->append("移除设备 ");
            }
            else
            {
            }
            break;
    }
    return false;
}