Как получить события жизненного цикла мобильного приложения в QtApp
Я программирую приложение в коммерческой лицензии Qt 5.9.4. Мое приложение работает на Android и iOS.
Вопрос:
Есть ли способ в Qt обнаруживать обычные события на мобильных устройствах, такие как:
- Дисплей устройства выключен
- Устройство перешло в фоновый режим после того, как пользователь нажал кнопку "Домой" на iOS / Android
- кнопка возврата нажата на Android и т. д.
Есть куча таких событий, которые запускают каждая из платформ Android и iOS.
Если в Qt есть класс / модуль, который ретранслирует эти события, тогда мне не пришлось бы выполнять дополнительную работу по написанию нативных (java и Objective -C) классов, чтобы получить эти события внутри моего QtApp.
1 ответ
Большинство этих событий обрабатываются самим Qt, и вы можете получить их с помощью классических средств. Qt старается как можно лучше скрыть специфичные для Android вещи и доставляет эти события и т. Д. Так, как вы это делаете в настольном приложении.
Нажатие кнопки "назад" вызывает QCloseEvent
это отправляется в главное окно. Вы можете установить фильтр событий на объекте из C++, чтобы перехватить его. Для qml это сигнал Window:: closed.
Поскольку Qt не поддерживает фоновое выполнение действий, фоновая печать, вероятно, также сообщается как закрытое событие - или она выходит из приложения напрямую.
Для переключателя DIsplay я сейчас точно не знаю, но, возможно, сигнал QGuiApplication::applicationStateChanged действительно сообщает об этом как Qt::ApplicationSuspended
или другое из этих состояний - просто попробуйте! (это может относиться и к другим событиям)
Краткий совет для Android: Если вы хотите что-то, что Qt не обрабатывает, вы всегда можете просто создать пользовательское действие Java, которое расширяет QtActivity
и использовать его в манифесте. Оттуда вы можете использовать JNI для взаимодействия с Java из C++ и наоборот. Если вам нужно сделать это, взгляните на Qt Android Extras - они значительно упрощают использование JNI и предоставляют кучу хороших классов-обёрток и служебных методов в QtAndroid
Пространство имен, которое может пригодиться.