【问题标题】:Qt : Where is the event type defined?Qt:事件类型在哪里定义?
【发布时间】:2017-09-01 14:15:29
【问题描述】:

我正在尝试根据官方网站上提供的解释实现一个nativeEventFilter来拦截我的Qt应用程序中的windows消息:

https://doc.qt.io/qt-5/qabstractnativeeventfilter.html#details

但是,他们没有提到应该在哪里/如何定义 eventType,也没有提供的示例显示任何提示。因此,windows_dispatcher_MSG 在我的程序中显然是未定义的。

【问题讨论】:

  • 创建一个字节数组static const QByteArray windowsDispatcherMSG("windows_dispatcher_MSG"); 并将它与你得到的eventType == windowsDispatcherMSG 进行比较。此外,由于QByteArray 可以从"windows_dispatcher_MSG" 隐式转换,您还应该能够直接比较eventType == "windows_dispatcher_MSG",其中eventTypenativeEventFilter 函数的第一个参数
  • 我对 static_cast 感到困惑,因为 windowsDispatcherMSG 不是一种类型(因此我不能像 Qt 示例中那样从 void* 转换为 windowsDispatcherMSG* )。很明显,我缺少一些东西。您能否提供一个示例 sn-p 来拦截 WM_DEVICECHANGE 消息。提前致谢。

标签: windows qt message


【解决方案1】:

以下一个小例子:

bool Foo::nativeEventFilter(const QByteArray & eventType, void * message, long * result)
{
    static const QByteArray windowsDispatcherMSG("windows_dispatcher_MSG");
    if (eventType != windowsDispatcherMSG)
        return false;

    const MSG * m = static_cast<MSG*>(message);
    if (m->message != WM_DEVICECHANGE)
        return false;

    /** ...do something... **/
}
  1. 将 eventType 与您要处理的进行比较
  2. 将空指针转换为MSG
  3. 检查消息的类型
  4. 用它做任何你需要做的事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2018-03-14
    • 2016-10-27
    相关资源
    最近更新 更多