1. 程式人生 > >Qt無法正確 sendMessage 的消息

Qt無法正確 sendMessage 的消息

發現 使用 PE 時間 調試 c中 遇到 代碼 truct

項目背景:

項目需要將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吧!

Qt無法正確 sendMessage 的消息