項目背景:
項目需要將vc中的代碼移植到Qt中,而且由於使用的SDK是32位,所以,Qt使用的版本是MinGW32,另外下載的也是官網最新的版本Qt5.11.1。
系統環境:Windows10
在將windows下的消息機制想通過qt 實現的時候,遇到了問題。
在代碼的一處使用了SendMessage 給Qt 的窗口,窗口重載了 naitveEvent來處理這個消息。
在nativeEvent中,可以獲得消息,但是獲得的消息數據完全不對,
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 這樣的大小
而同樣的代碼在其它系統中使用不同版本的qt中編譯是好的,懷疑是系統的問題,后來,發現是Qt 版本導致的這個問題,換成5.9.6版本,可以正常工作。
這應該是新版本Qt的一個bug吧!