如何知道Qt中何时连接了新的USB存储设备?

Ski*_*ick 8 c++ windows usb qt

我想知道什么时候USB设备连接到运行我的Qt应用程序的计算机(在Windows中).在我的主要QWidget中,我重新实现了winEventFilter这样:

bool winEventFilter ( MSG * msg, long * result ) {
    qDebug() << msg;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

当我连接USB设备时,我希望qDebug能发送至少一些东西,但我什么也得不到.

我猜我从根本上误解了这个过程 - 这是我的第一个Qt应用程序!

bra*_*r24 6

我相信你可能缺少的是注册设备通知的电话.这是我用来做同样事情的代码,虽然我覆盖了QWidget类的winEvent()方法而不是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
Run Code Online (Sandbox Code Playgroud)

注意:您很可能需要更改其值DEV_BROADCAST_DEVICEINTERFACE以满足您的需求.

编辑:要使用此代码,您需要包含正确的头文件并执行正确的设置. DEV_BROADCAST_DEVICEINTERFACE需要包含Dbt.h头.此外,此代码的焦点在RegisterDeviceNotification函数上.信息在MSDN上可用