У попередній статті було створено дві кнопки, які відповідали за зміну тексту у текстовому полі. А тепер давайте розглянемо варіант, коли нам треба вивести інформацію в консоль про натискання по кнопках, або вивести спливаюче повідомлення. Тобто модифікуємо попередній урок.
За фактом, це буде той момент, коли додаткових відмінностей у коді практично не буде. В обох випадках є відповідні Класи/Типи, які відповідаю за весь цей функціонал.
Виведення в консоль
У випадку з Java для цього служить клас Log, а у випадку з QML для цього служить функціонал console, який добре знайомий Web-програмістам.
Повідомлення консолі мають різні рівні важливості:
- ПОМИЛКА
- ПОПЕРЕДЖЕННЯ
- NFO
- ВІДЛАГОДЖУВАТИ
- ДЕСЛІВНЕ
У випадку 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 легший у кастомізації.