在QWidgt中重载nativeEvent 方法,却无法接收DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE消息
MSG* msg = reinterpret_cast<MSG*>(pMessage);
auto wParam = msg->wParam;
if (wParam == DBT_DEVICEARRIVAL || wParam == DBT_DEVICEREMOVECOMPLETE) {
auto lParam = msg->lParam;
auto deviceType = reinterpret_cast<DEV_BROADCAST_HDR *>(lParam)->dbch_devicetype;
if (deviceType == DBT_DEVTYP_VOLUME) {
auto unitmask = reinterpret_cast<DEV_BROADCAST_VOLUME *>(lParam)->dbcv_unitmask;
for (int i = 0; i < 32; ++i) {
if ((unitmask & (1 << i)) != 0) {
// setDriveChanged('A' + i, wParam == DBT_DEVICEARRIVAL);
}
}
}
}
return false;
经调查发现,当前widget为子窗口,nativeEvent只有在nativa windows的情况下才能接收windows系统消息,故需要在native的窗体中处理usb的相关事件。