4.9 KiB
LabelledField
Обзор компонента
Minecraft_launcher — десктопный лаунчер Minecraft на Qt Quick с полностью самостоятельно
оформленным тёмным интерфейсом. В диалоге настроек и в редакторе сборок много однотипных полей
ввода: подпись сверху, поле под ней. LabelledField собирает эту пару в один компонент, чтобы
отступы, цвета и подсветка фокуса не переписывались в каждом месте заново.
Компонент нужен там, где пользователь вводит короткое значение: имя профиля, объём памяти, путь, аргументы запуска.
Место в проекте и зависимости
Импортирует QtQuick и QtQuick.Controls 2.15; C++-типы не используются.
Объявлен в QML_FILES модуля Minecraft_launcher (CMakeLists.txt) и доступен по имени внутри
модуля без импорта. Применяется в диалоге настроек и в карточке сборки — см. Main и
BuildsDialog.
Иерархия и роль
Корневой тип — Column с расстоянием 3 px между элементами. Колонка содержит два потомка:
Text с подписью (серый, 11 px) и TextField фиксированной высоты 32 px с тёмным фоном,
скруглением 6 px и рамкой, которая при фокусе поля меняет цвет на акцентный.
Ширина поля привязана к ширине самой колонки, поэтому размер задаётся снаружи одним свойством
width корневого элемента. Высоту Column вычисляет сам.
Свойства
| Свойство | Тип | По умолчанию | Обязательное | Описание |
|---|---|---|---|---|
text |
string (алиас на text внутреннего поля) |
"" |
Нет | Содержимое поля ввода. Работает в обе стороны: чтение возвращает введённое значение, запись подставляет новое. |
validator |
var (алиас на validator внутреннего поля) |
null |
Нет | Валидатор ввода — например IntValidator для числовых полей. Ограничивает то, что пользователь может набрать. |
label |
string |
"" |
Нет | Текст подписи над полем. |
placeholder |
string |
"" |
Нет | Подсказка, показываемая в пустом поле приглушённым цветом. |
Сигналы
editingFinished()
Проброшен из внутреннего TextField: срабатывает, когда правка закончена — поле потеряло фокус
или пользователь нажал Enter. Промежуточные нажатия клавиш сигнала не вызывают.
Обработчик обычно сохраняет введённое значение: читает text и передаёт его в бэкенд или в
модель родительского диалога. Именно из-за этой семантики поля настроек сохраняются по завершении
правки, а не на каждый символ.
Методы
Собственных функций нет.
Взаимодействие с другими компонентами
Компонент не знает ни о бэкенде, ни о содержащем его диалоге. Родитель задаёт label,
placeholder, начальный text и при необходимости validator, а затем подписывается на
editingFinished, чтобы записать значение. Двусторонней привязки к бэкенду внутри компонента нет
— решение о том, когда и куда сохранять, целиком за родителем.
Пример использования
LabelledField {
width: parent.width
label: "Оперативная память, МБ"
placeholder: "2048"
text: String(settings.memoryMb)
validator: IntValidator { bottom: 512; top: 32768 }
onEditingFinished: settings.memoryMb = parseInt(text)
}
При создании этого документа использовался ИИ.