項目背景: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