Qt中IPC(程序間通訊)的方式一:WM_COPYDATA訊息
阿新 • • 發佈:2021-01-30
技術標籤:QT
資料複製訊息WM_COPYDATA是Windows中一個特殊的訊息,通過這個訊息能夠在程序間傳遞資料。
WM_COPYDATA訊息含兩個引數WPARAM wParam和LPARAM lParam,WPARAM和LPARAM是匈牙利命名法,歷史更迭,WPARAM指32位整形變數,LPARAM指32為整形變數指標。傳送WM_COPYDATA時,wParam賦值為傳送此訊息的窗體,lParam則指向一個COPYDATASTRUCT結構:
typedefstruct{ ULONG_PTR dwData; DWOED cdData; PVOID lpData; };
該結構體中,dwData能夠使隨意值,lpData是須要傳送給窗體所在程序的資料地址,cbData是lpData傳送資料的位元組數。
SendMessage(
hwndto, //目標窗體控制代碼
(UINT)WM_COPYDATA, //指定傳送的資料
(WPARAM)hwndfrom, //將源窗體控制代碼做WPARAM引數
(LPARAM)&cds //將COPYDATASTRUCT做LPARAM引數
);
2. Qt中處理自定義訊息:(前提是開啟了事件迴圈QEventLoop)
方式一:nativeEventFilter
使用installNativeEventFilter註冊自定義事件過濾器,繼承QAbstractNativeEventFilter實現nativeEventFilter方法以實現自定義事件過濾器。
//QCoreApplication
void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
//QAbstractNativeEventFilter
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result)=0;
方式二:nativeEvent
繼承QWidget重寫nativeEvent方法即可。
//QWidget: virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);