Qt / Qml — запуск событий QApplication / QQmlApplicationEngine (события клавиш и мыши)

Я должен вызвать все события в моем приложении Qt / Qml. В частности, я пытаюсь вызвать события клавиш и мыши. Я хотел бы реализовать своего рода режим ожидания с QTimer, который сбрасывается при срабатывании события.
Возможно ли реализовать эту функцию в моем приложении Qt / Qml?

-1

Решение

невозможно вызвать события из всех этих виджетов (используя
сигнал onClicked () например)

Почему бы и нет? Каждое приложение имеет несколько «виджетов», и это делается с помощью обработчиков сигналов почти во всех случаях с некоторыми очень, и я имею в виду очень редкие исключения.

Таким образом, я должен вызвать общие события на QApplication, чтобы знать, если
кнопки мыши или клавиатуры были нажаты

И оттуда использовать какой-то личный метод определения того, что должно делать это событие? Это звучит как очень плохая идея, если ваше приложение действительно настолько разнообразно в элементах GUI, как вы утверждаете. Я очень сомневаюсь, что будет проще создать более надежное или эффективное решение, чем уже реализованное, или менее глючное в этом отношении.

Либо вы совершенно новичок в QML и его парадигме программирования и не поняли, что перехватчики обработчиков являются предполагаемым способом взаимодействия с пользователем, что является более вероятным случаем, или вы пытаетесь сделать что-то очень «нестандартное».

Не так сложно реализовать «глобальный» обработчик для событий клавиатуры и мыши, достаточно поставить один MouseArea в верхней части окна приложения и используйте его для захвата всего взаимодействия с мышью, а также настройте фокус клавиатуры на одном элементе, который действует как приемник событий клавиатуры.

Однако это означает, что после этого вы берете на себя полную ответственность за ручное управление направлением событий. Я сделал это для клавиатурных событий, потому что дизайн «одного фокуса» в QML не отвечал моим конкретным потребностям, и я могу сказать, что это хлопотно. Выполнение этого для мыши также только сделает его еще более сложным и более подверженным ошибкам.

Это также означает, что вы должны отказаться практически от всех элементов пользовательского интерфейса, предоставляемых QML из коробки, поскольку все они зависят от фактического фокуса и событий.

Конечно, вы можете перехватывать события на еще более низком уровне по сравнению с C ++, но это будет еще сложнее и более подвержено действительному взлому.

Учитывая вашу редкую историю активности, похоже, что вам действительно нужно делать, лучше познакомиться с парадигмой программирования, лежащей в основе QML, чем задавать вопросы о вещах, которые вам не нужны и которые вы действительно не хотите делать, потому что они являются сложными и ненужными и в большинстве случаев представляют собой антишаблоны, которые очень контрпродуктивны.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]