Я должен вызвать все события в моем приложении Qt / Qml. В частности, я пытаюсь вызвать события клавиш и мыши. Я хотел бы реализовать своего рода режим ожидания с QTimer, который сбрасывается при срабатывании события.
Возможно ли реализовать эту функцию в моем приложении Qt / Qml?
невозможно вызвать события из всех этих виджетов (используя
сигнал onClicked () например)
Почему бы и нет? Каждое приложение имеет несколько «виджетов», и это делается с помощью обработчиков сигналов почти во всех случаях с некоторыми очень, и я имею в виду очень редкие исключения.
Таким образом, я должен вызвать общие события на QApplication, чтобы знать, если
кнопки мыши или клавиатуры были нажаты
И оттуда использовать какой-то личный метод определения того, что должно делать это событие? Это звучит как очень плохая идея, если ваше приложение действительно настолько разнообразно в элементах GUI, как вы утверждаете. Я очень сомневаюсь, что будет проще создать более надежное или эффективное решение, чем уже реализованное, или менее глючное в этом отношении.
Либо вы совершенно новичок в QML и его парадигме программирования и не поняли, что перехватчики обработчиков являются предполагаемым способом взаимодействия с пользователем, что является более вероятным случаем, или вы пытаетесь сделать что-то очень «нестандартное».
Не так сложно реализовать «глобальный» обработчик для событий клавиатуры и мыши, достаточно поставить один MouseArea
в верхней части окна приложения и используйте его для захвата всего взаимодействия с мышью, а также настройте фокус клавиатуры на одном элементе, который действует как приемник событий клавиатуры.
Однако это означает, что после этого вы берете на себя полную ответственность за ручное управление направлением событий. Я сделал это для клавиатурных событий, потому что дизайн «одного фокуса» в QML не отвечал моим конкретным потребностям, и я могу сказать, что это хлопотно. Выполнение этого для мыши также только сделает его еще более сложным и более подверженным ошибкам.
Это также означает, что вы должны отказаться практически от всех элементов пользовательского интерфейса, предоставляемых QML из коробки, поскольку все они зависят от фактического фокуса и событий.
Конечно, вы можете перехватывать события на еще более низком уровне по сравнению с C ++, но это будет еще сложнее и более подвержено действительному взлому.
Учитывая вашу редкую историю активности, похоже, что вам действительно нужно делать, лучше познакомиться с парадигмой программирования, лежащей в основе QML, чем задавать вопросы о вещах, которые вам не нужны и которые вы действительно не хотите делать, потому что они являются сложными и ненужными и в большинстве случаев представляют собой антишаблоны, которые очень контрпродуктивны.
Других решений пока нет …