Creo que lo que se puede perder es la llamada para registrarse para la notificación del dispositivo. Aquí está el código que uso para hacer lo mismo, aunque anulo el método winEvent() de la clase QWidget y no el 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
NOTA: Lo más probable es que tenga que cambiar los valores de la DEV_BROADCAST_DEVICEINTERFACE
para adaptarse a sus necesidades.
EDITAR: Para usar este código, deberá incluir los archivos de encabezado adecuados y realizar la configuración correcta. DEV_BROADCAST_DEVICEINTERFACE
requiere que se incluya el encabezado Dbt.h. Además, el punto focal de este código está en la función RegisterDeviceNotification. La información está disponible en MSDN
¡Esto es interesante! – AndreasT
@Areaste - ¡gracias! – Skilldrick
No sé si todavía tiene este proyecto suyo, pero me preguntaba (ya que recién comencé a aprender QT) si podría obtener una copia para referencia. Aún no sé cómo anular el procedimiento de wndProc y aún no he visto buenos ejemplos para él. Tampoco he visto buenos para la invocación de plataforma para Qt. Gracias de antemano. –