В предыдущей статье было создано две кнопки, которые отвечали за смену текста в текстовом поле. А теперь давайте рассмотрим вариант, когда нам надо вывести информацию в консоль о нажатиях по кнопкам, или вывести всплывающее сообщение. То есть модифицируем предыдущий урок.
По факту, это будет тот самый момент, когда дополнительных различий в коде практически не будет. В обоих случаях имеются соответствующие Классы/Типы, которые отвечаю за весь данный функционал.
Вывод в консоль
В случае с 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 более лёгок в кастомизации.