【问题标题】:how to sendMessage to Qwidget如何向 Qwidget 发送消息
【发布时间】:2018-12-04 14:51:32
【问题描述】:

我有一个基于 QT 库的编译程序,并且有一个工具栏,它是 QWidget。我想使用SendMessage() 来单击放置在该工具栏中的特定按钮 (QWidget)。

如果我使用SendMessage(),我需要知道按钮的句柄,但是当使用 spy++、Winspector Spy 等软件检查句柄时,它们会返回整个 QWidget 的句柄而不是其中的按钮!!为什么?以及如何获得?

【问题讨论】:

  • 如何找到所需的小部件对象(按钮)并直接调用其QAbstractButton::click() 函数?

标签: c++ qt sendmessage


【解决方案1】:

这行不通,简单明了。 Qt 小部件不是 Windows 原生控件,事实上大多数现代应用程序不使用原生控件,因此 SendMessage to-a-native-control 是一种过时的方法。

您的 Qt 程序可以实现一些 RPC 机制,例如Qt Remote Objects,或ØMQ

您还可以使用native event filters in Qt 捕获通过SendMessage 发送的自定义消息。您可以按如下方式安装本机事件过滤器实例:

bool installNativeEventFilter(QAbstractNativeEventFilter *filter) {
  if (auto *dispatcher = QAbstractEventDispatcher::instance()) {
    dispatcher->installNativeEventFilter(filter);
    return true;
  }
  return false;
}

【讨论】:

  • 正如我所说的QT程序源不可用并且是一个编译程序所以我不能改变它!如果我理解你建议我在 QT 中实现事件过滤器是吗?如果是怎么办?
  • @AliDamirchy 除了根据窗口大小硬编码小部件的位置并使用SendMessage 发送鼠标点击之外,您实际上无能为力。您会将消息发送到整个窗口,但位置会影响单击的控件(如果有)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2013-08-10
  • 2021-03-07
相关资源
最近更新 更多