Evgenii Legotckoi
1 марта 2018 г. 13: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 более лёгок в кастомизации.

Рекомендуемые статьи по этой тематике

По статье задано0вопрос(ов)

1

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
  • Последние комментарии
  • Evgenii Legotckoi
    16 апреля 2025 г. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 апреля 2025 г. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    1 апреля 2025 г. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    9 марта 2025 г. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    9 марта 2025 г. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…