6.3 KiB
ProgressPanel
Обзор компонента
Minecraft_launcher — десктопный лаунчер Minecraft на Qt Quick. Почти каждое действие в нём
долгое: скачивание версии игры, установка Java, распаковка и архивация папки .minecraft при
смене сборки, загрузка сезонной сборки. Лаунчер не блокирует окно на это время, поэтому ход
операции нужно показывать неотрывно от остального интерфейса.
ProgressPanel — та самая плашка прогресса. Она размещается в левом нижнем углу главного окна,
где не перекрывает кнопку запуска, сообщение по центру и кнопки папки и настроек. Компонент
только отображает переданное состояние; сам он ничего не считает и ни за чем не следит.
Место в проекте и зависимости
Импортирует QtQuick и QtQuick.Controls 2.15; C++-типы напрямую не использует.
Объявлен в QML_FILES модуля Minecraft_launcher (CMakeLists.txt), поэтому доступен по имени
внутри модуля без импорта. Инстанцируется в Main — по одной плашке на вид долгой
операции.
Иерархия и роль
Корневой тип — Rectangle фиксированного размера 320×72 px со скруглением 8 px, тёмной заливкой,
акцентной рамкой и лёгкой полупрозрачностью, чтобы плашка читалась поверх фонового изображения
окна.
Внутри — пять элементов без внешних зависимостей: заголовок слева сверху, проценты справа сверху, полоса прогресса (дорожка и заполнение с плавной анимацией ширины на 120 мс), строка подробностей снизу и крестик отмены в правом нижнем углу с увеличенной областью нажатия.
Свойства
| Свойство | Тип | По умолчанию | Обязательное | Описание |
|---|---|---|---|---|
title |
string |
"" |
Нет | Заголовок операции в левом верхнем углу, полужирным. Длинный текст обрезается справа многоточием. |
status |
string |
"" |
Нет | Строка состояния внизу плашки. Показывается только когда detail пуст. |
fraction |
double |
-1 |
Нет | Доля выполнения от 0 до 1. Значение -1 означает «итог ещё неизвестен»: вместо процентов выводится многоточие, а полоса остаётся пустой. |
detail |
string |
"" |
Нет | Необязательная вторая строка подробностей — мегабайты у загрузки, путь у архивации. Если задана, вытесняет status. Длинный текст обрезается посередине, чтобы у пути были видны и начало, и конец. |
cancellable |
bool |
true |
Нет | Показывать ли крестик отмены. Ставится в false для операций, которые прерывать нельзя. |
Сигналы
cancelRequested()
Пользователь нажал крестик в правом нижнем углу. Сигнал сообщает только о намерении: плашка не скрывает себя и не меняет своё состояние.
Обработчик должен сам остановить операцию в бэкенде и убрать плашку с экрана — как правило, вызвав
соответствующий метод отмены у LauncherBackend; видимость плашки при этом снимется сама, потому
что она привязана к свойству занятости бэкенда.
Сигнал не испускается при cancellable: false — в этом случае крестик скрыт.
Методы
Собственных функций нет.
Взаимодействие с другими компонентами
Все пять свойств плашки — точки внешней привязки. В Main они связаны со свойствами
LauncherBackend: у загрузки версии это группа downloading / downloadProgress /
downloadVersion / downloadStatus / downloadBytesDone / downloadBytesTotal, у смены сборки —
switching / switchProgress / switchStage / switchStatus. Байты в мегабайты переводит
функция formatMb() главного окна, а не сама плашка.
Видимостью плашки управляет родитель, обычно привязывая её к тому же признаку занятости, который
питает fraction. Сигнал cancelRequested родитель замыкает на метод отмены бэкенда.
Пример использования
ProgressPanel {
anchors.left: parent.left
anchors.bottom: parent.bottom
anchors.margins: 16
visible: backend.downloading
title: qsTr("Загрузка Minecraft %1").arg(backend.downloadVersion)
status: backend.downloadStatus
fraction: backend.downloadProgress
detail: formatMb(backend.downloadBytesDone) + " / " + formatMb(backend.downloadBytesTotal)
onCancelRequested: backend.cancelDownload()
}
При создании этого документа использовался ИИ.