QT的nativeEvent问题请教

bool Widget::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
 MSG* msg = (MSG*)message;
DWORD dwPid = 0;
            GetWindowThreadProcessId((HWND)msg->wParam,&dwPid);
            COPYDATASTRUCT *cds = reinterpret_cast(msg->lParam);
            QString text = QString("PID=[%1]的进程发来的消息为:%2").arg((int)dwPid).arg((char*)cds->lpData);
   return QWidget::nativeEvent(eventType, message, result);
}

      COPYDATASTRUCT data;    //使用COPYDATA的方式进行数据传递
                data.dwData = 0;
                data.cbData = param.length();
                data.lpData = ¶m[0];
                qDebug()<SendMessage(m_wnd, WM_COPYDATA, (WPARAM)wid, (LPARAM)&data);
                

QT在win下可以通过SendMessage和PostMessage机制发送给nativeEvent接收,但SendMessage和PostMessage是win下的特有机制。
我发现在linux下也存在nativeEvent,
那在linux下,和win下SendMessage和PostMessage的功能一样的函数是什么

我知道QT机制QApplication::postEvent和QApplication::sendEvent 发送的只能由event(QEvent *event)接收。

无法由nativeEvent接收。

求nativeEvent,在linux下使用方法,

  • 这篇博客: QPostEvent的源码解读中的 最后全部事件通过QApplication::SendEvent()派发出去, 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • inline bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)
    {  if (event) event->spont = false; return self ? self->notifyInternal(receiver, event) : false; }