как отправить сообщение в Qwidget - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть скомпилированная программа, основанная на библиотеке QT, и у меня есть панель инструментов, которая является QWidget.Я хочу использовать SendMessage(), чтобы нажать на определенную кнопку, которая находится на этой панели инструментов (QWidget).

Если я использую SendMessage(), мне нужно знать маркер кнопки, но при проверке дескрипторов такими программами, как spy ++, Winspector Spy, .. они возвращают дескриптор целого QWidget, а не кнопку в нем !!Зачем?И как это получить?

1 Ответ

0 голосов
/ 04 декабря 2018

Это не сработает, просто и понятно.Виджеты Qt не являются родными элементами управления Windows, и фактически большинство современных приложений не используют собственные элементы управления, поэтому SendMessage to-a-native-control является устаревшим подходом.

Ваша программа Qt можетреализовать некоторый механизм RPC, например, Удаленные объекты Qt или ØMQ .

Вы также можете перехватывать пользовательские сообщения, отправленные через SendMessage, используя собственные фильтры событий вQt .Вы можете установить собственный экземпляр фильтра событий следующим образом:

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