В предыдущей статье было создано две кнопки, которые отвечали за смену текста в текстовом поле. А теперь давайте рассмотрим вариант, когда нам надо вывести информацию в консоль о нажатиях по кнопкам, или вывести всплывающее сообщение. То есть модифицируем предыдущий урок.
По факту, это будет тот самый момент, когда дополнительных различий в коде практически не будет. В обоих случаях имеются соответствующие Классы/Типы, которые отвечаю за весь данный функционал.
Вывод в консоль
В случае с Java для этого служит класс Log, а в случае с QML для этого служит функционал console, который хорошо знаком Web-программистам.
Сообщения консоли имеют различные уровни важности:
- ERROR
- WARN
- NFO
- DEBUG
- VERBOSE
В случае с Java это будут следующие статические методы класса Log:
- Log.v()
- Log.d()
- Log.i()
- Log.w()
- Log.e()
В случае с Qt QML это будут методы console:
- console.log
- console.debug
- console.info
- console.warn
- console.error
Функционал console использует методы C++ qCDebug, qCWarning и т.д. То есть в рамках QML данные функции пришедшие из JavaScript транслируются в C++ методы, которые уже и служат для вывода информации в консоль.
Java
Для вывод в консоль в Java потребуется импортировать в java файл соответствующий пакет с классом Log
- import android.util.Log;
И вызвать необходимый методы данного класса
- View.OnClickListener onClickListenerOkBtn = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Log.d(TAG, "Button ОК"); // Вывод в консоль
- }
- };
QML
Для вывода в консоль из QML кода не требуется ничего подключать или импортировать. Нужно только вызвать необходимую функцию в нужном месте кода.
- onClicked: {
- console.debug("Button Ok")
- }
Всплывающие сообщения
В Java под Android имеется специальный класс для вызова всплывающих сообщений, который называется Toast. Причём только для этого он и служит. Тогда как в QML для этих целей можно использовать Тип ToolTip, который может использоваться также как и обычная всплывающая подсказка для элементов интерфейса. ToolTip можно инстанцировать и прикреплять к различным объектам QML, также многие графические объекты QML уже имеют объект ToolTip, нужно только настроить его поведение.
Но в данном уроке постараемся реализовать стандартный Toast, который присутствует в Java Android.
Данный Toast в Java Android выглядел у меня так
Тогда как Toast в QML выглядел так
Поведение и внешний вид данных всплывающих сообщений похожи, а поэтому можем теперь посмотреть программный код.
Java
Для Java нужно импортировать класс Toast
- import android.widget.Toast;
и вызвать всплывающее сообщение в нужной части кода
- Toast.makeText(getApplicationContext(), "OK Button is pressed", Toast.LENGTH_LONG).show();
Получилось мало кода, и в данном уроке Java несколько выигрывает по объёму написанного кода, поскольку в QML мы постараемся приблизить внешний вид и поведение ToolTip QML к внешнему виду и поведению Toast в Java, а это уже потребует некоторой кастомизации.
QML
Для использования типа ToolTip импортируется модуль QtQuick.Controls 2
- import QtQuick.Controls 2.3
Далее нужно добавить в главное окно приложения сам ToolTip, дать ему id и кастомизировать его.
- ApplicationWindow {
- visible: true
- width: 360
- height: 520
- title: qsTr("QML Buttons")
- ToolTip {
- id: toast
- delay: 500
- timeout: 5000
- x: (parent.width - width) / 2
- y: (parent.height - 100)
- background: Rectangle {
- color: "gray"
- radius: 15
- }
- }
- // Остальной код
- }
А потом уже установить ему текст и установить свойство visible на true.
- onClicked: {
- toast.text = qsTr("OK Button is pressed")
- toast.visible = true
- }
Заключение
Вывод в консоль равнозначен между Java и Qt QML.
Всплывающие сообщения в Java Android в состоянии по умолчанию выигрывают по лёгкости внедрения у всплывающих сообщений в Qt QML, но не будем забывать, что QML ToolTip - это всплывающая подсказка, которая имеет более расширенный функционал, чем Toast в Java. Например, ToolTip может использоваться у объекта Slider и перемещаться за бегунком, что не предусмотрено у Toast. Также ToolTip более лёгок в кастомизации.