AtlasFormEntry
One labelled row of a form: a label and help text, one control, its validation and an optional settings key that loads and saves the control by itself.
Since 1.5.0
An AtlasFormEntry is one row in a Section of an AtlasForm: the label (and help under it) on the leading side, the control on the trailing side. The control is the one item declared inside the entry; any Atlas.Ui control works, and so does a plain Item. In a narrow row (less than 22 grid units), for a tall control (a text area), and for a control too wide to fit beside the label, the control goes under the label (stacked).
An entry is valid when it has no errorText, is not required and empty, and its control's acceptableInput is not false (the Atlas validators and TextField.validator set it; an optional field that is empty is never unacceptable). The error shows under the row, with an error symbol, and the control gets a red outline (a control that draws its own error, such as AtlasTextField, keeps its own):
- the app's
errorTextshows at once, asAtlasTextField.errorTextdoes; - the
requiredTextandinvalidTexterrors show only after the user has left the control once (focus moving to something else; a combo box's open list is not leaving), or afterAtlasForm.validate(). After that they follow the control live and go as soon as it is fine.
Each error is announced with Accessible.announce() when it appears. Clicking the label focuses the control.
The entry gives the control its accessible name (label; the control's own name stays when the label is empty) and description (help, then the error shown). Empty means: no text, not checked, index -1, no path, no shortcut. A colour is never empty.
Example
AtlasFormEntry {
label: qsTr("Port")
help: qsTr("1 to 65535")
required: true
settingKey: "Port"
AtlasSpinBox { from: 1; to: 65535 }
}Properties
| Name | Type | Default | Description |
|---|---|---|---|
content |
list<QtObject> (default, read-only) |
— | The control: one item. |
label |
string |
"" |
The row's label, and the control's accessible name. |
help |
string |
"" |
A muted line under the row, and the control's accessible description. |
errorText |
string |
"" |
The app's own error. Non-empty makes the entry invalid and shows at once. |
required |
bool |
false |
An empty control is invalid. |
requiredText |
string |
qsTr("Required") |
Shown when required fails. |
invalidText |
string |
qsTr("Check this value") |
Shown when the control's acceptableInput is false. |
valid |
bool (read-only) |
— | No error of any kind, shown or not. An entry that is disabled, or that the app hid with visible: false, is valid, so it never blocks a form. One on a page that is not shown still counts. |
shownError |
string (read-only) |
— | The error on screen, or "". |
stacked |
bool |
automatic | The control under the label. On in a narrow row, for a tall control and for one too wide to fit beside the label; set it to force either. |
settingKey |
string |
"" |
The key in the form's settings the control is bound to; see below. |
settingProperty |
string |
"" |
The control's property to save, for a control that is not in the table below. |
atlasRow |
bool (read-only) |
true |
Marks the entry as a row of a Section, as SectionRow does. |
isFirst |
bool (read-only) |
— | True for the first visible row of its Section, which draws no separator above itself. |
Settings that save themselves
With a settingKey the control takes the stored value when the entry is created (the control's own value is the default when the key is missing) and every user edit is written with AtlasSettings.setValue(). The edit is detected with the control's own edit signal. A change of the key made by another writer (AtlasSettings.changed(key)) updates the control.
| Control | Property saved | Edit signal |
|---|---|---|
| AtlasSwitch, AtlasCheckBox | checked |
toggled |
| AtlasSlider, AtlasSpinBox, AtlasDoubleSpinBox, AtlasRating | value |
moved, valueModified, edited |
| AtlasComboBox, AtlasSegmentedControl | currentIndex |
activated |
| AtlasTextField, AtlasTextArea | text |
textEdited (textChanged for a text area) |
| AtlasColorField | color (as #rrggbb or #aarrggbb) |
edited |
| AtlasFileField, AtlasFolderField | path |
edited |
| AtlasShortcutField | sequence (the portable form) |
edited |
| AtlasPasswordField | none: a password is not a setting | |
| other | the property named by settingProperty |
its change signal |
Only a valid value is saved: while the entry is invalid (an unacceptable text, a required control that is empty) an edit is not written. A string over 64 KiB is not saved (one warning), and a stored string over 64 KiB is ignored, so a huge paste cannot make the settings file unreadable. A key that AtlasSettings would refuse (brackets, =, a leading # or ;, control characters, over 200 characters) warns once and is ignored. A stored shortcut is read back through its portable form. A loaded path is untrusted text: validate it before use.
A stored value that does not fit the property (text for a switch) is ignored with a warning that names the key. A password is never loaded or saved, whatever settingProperty says: the control, or anything inside it (a field in a wrapper Item), counts as a password when it is an AtlasPasswordField, hides what is typed (echoMode other than Normal), sets Qt.ImhSensitiveData or reports Accessible.passwordEdit. One warning names the key. A field switched to a password later may already have saved what was typed before. An entry with a settingKey and no settings (the form has none, and it is not on a page of a dialog that has) warns.
Note
The stored value is applied like a user edit: held for one turn, then released. A control with an app binding on the property (checked: app.flag) goes back to the app's value after that turn, so the app stays in charge; the user's edits are still saved and the binding stays intact. See "App bindings" in AtlasSegmentedControl.
Keyboard
The entry takes no Tab stop; the control inside does. Return in a single-line field emits AtlasForm.accepted() while the form is valid.
Accessibility
The control has the accessible name label and the description help followed by the error shown. Errors are announced when they appear.