Евгений Легоцкой1 марта 2018 г. 1:58

Android. Java vs Qt QML - Урок 003. Сообщения в консоли и всплывающие сообщения Toast

В предыдущей статье было создано две кнопки, которые отвечали за смену текста в текстовом поле. А теперь давайте рассмотрим вариант, когда нам надо вывести информацию в консоль о нажатиях по кнопкам, или вывести всплывающее сообщение. То есть модифицируем предыдущий урок.

По факту, это будет тот самый момент, когда дополнительных различий в коде практически не будет. В обоих случаях имеются соответствующие Классы/Типы, которые отвечаю за весь данный функционал.

Вывод в консоль

В случае с 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 более лёгок в кастомизации.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
Поделиться в социальных сетях
Donate

Проект EVILEG перешёл на некоммерческую основу и будет развиваться исключительно на энтузиазме создателя сайта, энтузиазме пользователей, пожертвованиях и реферальной системе хостинга

Спасибо за вашу поддержку

Доступные способы поддержки проекта

PayPal

PatreonYooMoneyПодробнее
AB

C++ - Тест 006. Перечисления

  • Результат:30баллов,
  • Очки рейтинга-10
МХ

C++ - Тест 003. Условия и циклы

  • Результат:42баллов,
  • Очки рейтинга-8
AB

C++ - Тест 005. Структуры и Классы

  • Результат:50баллов,
  • Очки рейтинга-4
Популярные публикации за последние 90 дней
Последние комментарии

EVILEG-CORE. Кэширование свойств объектов моделей с помощью model_cached_property

Здравствуйте. В общем меня интересует такой вопрос. Я пробовал это на Like , Dislike. Как я понимаю если не перевалидировать кеш то ничего не изменится на странице. Вернётся значение из кэша? От…
A

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Здравствуйте! Подскажите как сделать запрос к базе SQLite с двумя параметрами, в итоге нужно получить не список строк, а только факт наличия строк, соответсвующи именно двум условиям. В SQL…
A

Django - Урок 011. Добавление комментариев на сайт с Django

https://mir74.ru/27323-12-krasavic-sdelali-podarok-stalnomu-gigantu.-rabotnicy-mmk-snyalis-dlya-yubileynogo-fotokalendarya.html
a

Django - Урок 011. Добавление комментариев на сайт с Django

I read that Post and got it fine and informative.https://aflife.ru/

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Хорошо. Большое спасибо. Посмотрю что из этого получится.
Сейчас обсуждают на форуме
o

Запрос на изменение БД с помощью оператора UPDATE и странное поведение QTableView

или запрос к базе так https://www.w3schools.com/sql/sql_ref_order_by.asp или сортировка в модели через прокси модель https://doc.qt.io/qt-5/qsortfilterproxymodel.html
o

Как очичтисть очередь событий для конпки

нужно сделать связку qml и c++, тяжелые задачи отправляются на обработку в с++, в qml остаются только быстрые. и у кнопок есть свойство enabled: true\false при запуске\остановке з…
A

Развертывание QML приложения

Полностью согласен, что пример не удачный, но я так как раз попытался выразить то, что вы далее описали с примером со скадой, часть .dll и часть .qml с интерпритацией. И в Вашем ответе я ув…
АБ

Sorting the added QML elements in the ListModel

I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …
EK

HTTP server на Qt

Давно было, уже не помню как, но разрулил. Спасибо :)
О нас
Услуги
© EVILEG 2015-2022
Рекомендует хостинг TIMEWEB