Qt nativeEvent 无法接收usb的插拔消息

在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的相关事件。

发布了73 篇原创文章 · 获赞 12 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/MissLong/article/details/100083606