Приложение Hello, World

Начало
Чтобы создать простейшее приложение по шаблону, нажмите Ctrl-Shift-P, выполните команду Rosa: Create template, и выберете конфигурацию приложения (в этой статье рассматривается single-page-template) и директорию, в которой будет сохранен проект (в данном примере, директория с проектом, и, соответственно, проект называется "example"):

Этот шаблон написан на C++ с использованием Qt/QML с использованием Rosa Controls (библиотеки визуальных компонентов) и локализации на базе KDE (KLocalizedString и KLocalizedContext). В качестве сборочной системы используется CMake. Проект организован таким образом, чтобы упростить разработку приложений с поддержкой тем, переводов и оформления в стиле Rosa.
Структура проекта
CMakeLists.txt
├── gather-tr-strings.bash
├── metainfo
│ ├── rosa.example.appdata.xml
│ ├── rosa.example.desktop
│ └── rosa.example.svg
├── po
│ ├── en_US
│ │ └── example.po
│ └── ru
│ └── example.po
├── rpm
│ └── example.spec
└── src
├── CMakeLists.txt
├── icons
│ └── other
│ ├── rosa-dark.svg
│ └── rosa-light.svg
├── icons.qrc
├── main.cpp
├── qml
│ ├── InitPage.qml
│ └── Main.qml
└── qml.qrc
- CMakeLists.txt – Сборочные инструкции для CMake.
- gather-tr-strings.bash – Скрипт, который используется для автоматического сбора строк, требующих перевода. Запускается при сборке проекта.
- metainfo/ – Каталог, содержащий различные метаданные о приложении (.desktop-файл, иконку и AppStream файл с дополнительной информацией).
- po/ – Каталог с файлами перевода .po для различных языков (в данном случае, русского и английского).
- rpm/ – Каталог, в котором находится .spec-файл с инструкциями для сборки RPM-пакета.
- src/ – Основная директория с исходным кодом приложения.
-
- CMakeLists.txt – Локальный CMake-файл, описывающий правила сборки для исходников в src.
- icons/ – Иконки приложения в формате SVG.
- icons.qrc и qml.qrc – Файлы ресурсов Qt, которые используются для включения SVG-иконок и QML-файлов в бинарный файл приложения.
- main.cpp – Точка входа в приложение и на C++.
- qml/ – Каталог с файлами QML (Main.qml, InitPage.qml).
Сборка и запуск приложения
Следуя инструкциям из описания среды разработки [ссылка!], добавьте устройство и выберите его в качестве основного, а затем используйте команду Rosa: Start Build and run on device, чтобы просто запустить приложение на физическом или виртуальном устройстве или Rosa: Start RPM Build and install on device, чтобы собрать RPM-пакет и установить его на устройстве.

Основные файлы и примеры кода
main.cpp
В файле main.cpp создаётся QApplication, настраивается стиль интерфейса (через QQuickStyle), а также подключается механизм локализации KDE (KLocalizedString). Далее инициализируется QML-движок и загружается главным интерфейсом приложения.
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QQuickStyle>
#include <KLocalizedString>
int main(int argc, char *argv[])
{
QQuickStyle::setStyle(QStringLiteral("RosaStyle"));
QApplication app(argc, argv);
KLocalizedString::setApplicationDomain("example");
QQmlApplicationEngine engine;
engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
engine.addImportPath(QStringLiteral("qrc:/qml"));
engine.load(QUrl(QStringLiteral("qrc:/qml/Main.qml")));
return app.exec();
}
Main.qml
Главный QML-файл, который определяет разметку основного окна приложения (ApplicationWindow). Здесь задаются размеры приложения, основной цвет фона, а также указывается страница, которая будет открыта при запуске (загружается QML-файл InitPage.qml).
Свойство initialPage указывает на начальную страницу, в данном случае она будет загружена при помощи функции getPage("qrc:/qml/InitPage.qml"). Путь до этой страницы имеет такой вид, т.к. объявлен соответствующим образом в файле qml.qrc.
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import RosaTheme 1.0 as Rosa
import RosaControls 1.0
ApplicationWindow {
width: Rosa.Theme.scale(360)
height: Rosa.Theme.scale(640)
color: Rosa.Theme.lightShadesBlueGrayColor
initialPage: getPage("qrc:/qml/InitPage.qml")
}
InitPage.qml
Это пример страницы (компонента Page), которая будет отображаться при запуске приложения. Здесь создается заголовок страницы, отображается иконка приложения и несколько текстовых сообщений, использующих функцию i18n() для локализации.
Аналогично загрузке QML-файлов, для использования иконок в приложении, в качестве пути до них (в данном случае "qrc:/icons/other/rosa-light.svg"), используются пути, заданные в файле icons.qrc. Далее, мы подробнее рассмотрим файлы ресурсов.
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import RosaTheme 1.0 as Rosa
import RosaControls 1.0
Page {
id: root
title: i18n("Init page")
header: PageHeader {
title: root.title
}
ColumnLayout {
anchors.fill: parent
Item {
Layout.fillHeight: true
}
Image {
Layout.alignment: Qt.AlignHCenter
sourceSize: Rosa.Theme.scaleSize(68, 68)
source: "qrc:/icons/other/rosa-light.svg"
}
PlaceholderMessage {
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
text: i18n("Template application")
description: i18n("This template is a starting point for developing applications using Rosa Controls")
}
Item {
Layout.fillHeight: true
}
}
}
Файлы ресурсов: icons.qrc и qml.qrc
qml.qrc и icons.qrc описывают файлы, которые будут включены в бинарный ресурс Qt (т.е. при сборке проекта, файлы, указанные там, будут включены в бинарный файл приложения).
<RCC>
<qresource prefix="/">
<file>qml/Main.qml</file>
<file>qml/InitPage.qml</file>
</qresource>
</RCC>
<RCC>
<qresource prefix="/">
<file>icons/other/rosa-light.svg</file>
<file>icons/other/rosa-dark.svg</file>
</qresource>
</RCC>
Файлы перевода
В каталоге po находятся .po-файлы с переводами (например, ru/example.po и en_US/example.po). Строки, отмеченные в коде функциями i18n("..."), автоматически подхватываются для перевода.
Файл .desktop и метаданные
Файл rosa.example.desktop (где "example" – имя проекта) описывает метаданные приложения для графического окружения (название, комментарий, категории, исполняемый файл и т.д.). Часть примера:
[Desktop Entry]
Name=example
Name[en_US]=example
Name[ru]=Шаблон приложения РОСА
...
Exec=example
Icon=rosa.example
Type=Application
Categories=Qt;KDE;Utility;
Также в каталоге metainfo присутствуют файлы:
- rosa.example.appdata.xml — содержит дополнительную информацию (AppStream) о приложении (описание, ссылки на сайт разработчика и баг-трекер, скриншоты и т.д.).
- rosa.example.svg — иконка приложения в формате SVG.
Файл спецификации RPM
В файле example.spec (где "example" – имя проекта) описаны параметры сборки для RPM-пакетов, в том числе зависимости, перечень устанавливаемых файлов и т.д. Часть примера:
Name: example
Summary: Template for development
Version: 0.1.0
Release: 1
Group: Graphical desktop/KDE
License: GPLv3
Url: https://mobile.rosa.ru
BuildRequires: ...
...
%files
%{_bindir}/example
%{_kde5_applicationsdir}/rosa.example.desktop
...
%{_datadir}/locale/ru/LC_MESSAGES/example.mo
%{_datadir}/locale/en_US/LC_MESSAGES/example.mo
Заключение
Используя представленный шаблон, вы можете расширять QML-интерфейс, добавлять новые страницы, компоненты и иконки, а также создавать и поддерживать переводы для вашего приложения. Для более подробного изучения примеров продвинутых приложений, вы можете ознакомиться с разбором приложений Заметки и Миграция.
Разбор приложения “Заметки” Разбор приложения “Миграция”