在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上测试了我的项目。
我已经做了一些研究,但是仍然没有任何线索。
出什么问题了?
答案 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