77 lines
4.9 KiB
Markdown
77 lines
4.9 KiB
Markdown
# LabelledField
|
|
|
|
## Обзор компонента
|
|
|
|
`Minecraft_launcher` — десктопный лаунчер Minecraft на Qt Quick с полностью самостоятельно
|
|
оформленным тёмным интерфейсом. В диалоге настроек и в редакторе сборок много однотипных полей
|
|
ввода: подпись сверху, поле под ней. `LabelledField` собирает эту пару в один компонент, чтобы
|
|
отступы, цвета и подсветка фокуса не переписывались в каждом месте заново.
|
|
|
|
Компонент нужен там, где пользователь вводит короткое значение: имя профиля, объём памяти, путь,
|
|
аргументы запуска.
|
|
|
|
## Место в проекте и зависимости
|
|
|
|
Импортирует `QtQuick` и `QtQuick.Controls 2.15`; C++-типы не используются.
|
|
|
|
Объявлен в `QML_FILES` модуля `Minecraft_launcher` (`CMakeLists.txt`) и доступен по имени внутри
|
|
модуля без импорта. Применяется в диалоге настроек и в карточке сборки — см. [Main](Main.md) и
|
|
[BuildsDialog](BuildsDialog.md).
|
|
|
|
## Иерархия и роль
|
|
|
|
Корневой тип — `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`, чтобы записать значение. Двусторонней привязки к бэкенду внутри компонента нет
|
|
— решение о том, когда и куда сохранять, целиком за родителем.
|
|
|
|
## Пример использования
|
|
|
|
```qml
|
|
LabelledField {
|
|
width: parent.width
|
|
label: "Оперативная память, МБ"
|
|
placeholder: "2048"
|
|
text: String(settings.memoryMb)
|
|
validator: IntValidator { bottom: 512; top: 32768 }
|
|
onEditingFinished: settings.memoryMb = parseInt(text)
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
При создании этого документа использовался ИИ.
|