Я полагаю, что вам может не хватать, чтобы позвонить, чтобы зарегистрироваться для уведомления устройства. Вот код, который я использую, чтобы сделать то же самое, хотя я переопределяю метод winEvent () класса QWidget, а не winEventFilter.
// Register for device connect notification
DEV_BROADCAST_DEVICEINTERFACE devInt;
ZeroMemory( &devInt, sizeof(devInt) );
devInt.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
devInt.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
devInt.dbcc_classguid = GUID_DEVINTERFACE_VOLUME;
m_hDeviceNotify =
RegisterDeviceNotification( winId(), &devInt, DEVICE_NOTIFY_WINDOW_HANDLE );
if(m_hDeviceNotify == NULL)
{
qDebug() << "Failed to register device notification";
} // end if
ПРИМЕЧАНИЕ. Скорее всего, вам потребуется изменить значения DEV_BROADCAST_DEVICEINTERFACE
в соответствии с вашими потребностями.
РЕДАКТИРОВАТЬ: Чтобы использовать этот код, вам необходимо включить соответствующие заголовочные файлы и выполнить правильную настройку. DEV_BROADCAST_DEVICEINTERFACE
требует, чтобы заголовок Dbt.h был включен. Кроме того, фокус этого кода находится на функции RegisterDeviceNotification. Информация доступна на MSDN