QWidget :: nativeEvent在Qt 5.11中无法获得正确的消息

时间:2018-07-24 14:32:39

标签: qt

在Qt 5.11之前,以下代码可以正常工作。

bool MyQDialogSubclass::nativeEvent(const QByteArray& eventType, void* message, long* result) {
    MSG* msg = static_cast<MSG*>(message);
    if(msg->message == WM_NCACTIVATE) {
        emit ncActive((bool)(msg->wParam));
    }
    return QWidget::nativeEvent(eventType, message, result);
}

但是在Qt 5.11中,如果我尝试获取一些本机消息,则msg-> message的值将始终是一些大数字,例如16886792,应该像0x0086(WM_NCACTIVATE)那样小。

调试窗口显示如下内容 debug capture

我在Windows 10 17134 64bit上测试了我的项目。

我已经做了一些研究,但是仍然没有任何线索。

出什么问题了?

1 个答案:

答案 0 :(得分:2)

似乎Qt 5.11.1中有一个错误,并在5.11.2中已修复,并且有解决方法:

#if (QT_VERSION == QT_VERSION_CHECK(5, 11, 1))
MSG* msg = *reinterpret_cast<MSG**>(message);
#else
MSG* msg = reinterpret_cast<MSG*>(message);
#endif

检查Qt论坛: https://forum.qt.io/topic/93141/qtablewidget-itemselectionchanged/13