项目背景:windows
项目须要将vc中的代码移植到Qt中,并且因为使用的SDK是32位,因此,Qt使用的版本是MinGW32,另外下载的也是官网最新的版本Qt5.11.1。this
系统环境:Windows10spa
在将windows下的消息机制想经过qt 实现的时候,遇到了问题。调试
在代码的一处使用了SendMessage 给Qt 的窗口,窗口重载了 naitveEvent来处理这个消息。code
在nativeEvent中,能够得到消息,可是得到的消息数据彻底不对,orm
bool DialogB::nativeEvent(const QByteArray &eventType, void *message, long *result) { MyMSG *param = reinterpret_cast<MyMSG *>(message); qDebug() << "MESSAGE: " << param->message; switch (param->message) { case WM_COPYDATA: { COPYDATASTRUCT *cds = reinterpret_cast<COPYDATASTRUCT*>(param->lParam); if (cds->dwData == CUSTOM_TYPE) { QString strMessage = QString::fromUtf8(reinterpret_cast<char*>(cds->lpData), cds->cbData); QMessageBox::information(this, QStringLiteral("提示"), strMessage); *result = 1; return true; } } } return QWidget::nativeEvent(eventType, message, result); }
调试发现,输出的message参数数字位9030504,(包含移动窗口时间,消息基本都是这个数据范围大小),明显不对。正常的应该100,200 这样的大小blog
而一样的代码在其它系统中使用不一样版本的qt中编译是好的,怀疑是系统的问题,后来,发现是Qt 版本致使的这个问题,换成5.9.6版本,能够正常工做。get
这应该是新版本Qt的一个bug吧!qt