Champ mot de passe pour Slint
KitPasswordField · Slint Kit 0.3.1
Saisie native masquée pour un mot de passe.

Essayer le composant
Télécharger le projet complet, le décompresser et lancer cargo run --locked dans son dossier. Rust 1.92+ ; Slint Kit 0.3.0 depuis crates.io. Vous pouvez aussi copier les quatre fichiers ci-dessous.
Saisissez un mot de passe puis acceptez. Rust conserve le brouillon validé et affiche seulement sa longueur. Un brouillon vide conserve le mot de passe précédent.
ui/app.slint
export { KitFormValidation, HtmlInputKind, NumberInputFormat, KitInputConstraints, KitValidationResult, KitValidityState } from "@kit/kit.slint";
import { KitPasswordField, KitButton, KitThemes, ValidationPresentation } from "@kit/kit.slint";
export component App inherits Window {
title: "Password"; preferred-width: 520px; preferred-height: 320px;
max-width: 100000px; max-height: 100000px; background: KitThemes.light.canvas;
in-out property <string> draft; in property <string> error; in property <string> accepted;
callback edited(string); callback commit(); callback blurred(); callback cancel();
VerticalLayout {
padding: 24px; spacing: 16px; alignment: start;
control := KitPasswordField {
required: true;
label: "Password"; text <=> root.draft; error: root.error;
validation: root.error != "" ? ValidationPresentation.invalid : ValidationPresentation.pristine;
edited(value) => { root.edited(value); }
commit-requested(value) => { root.commit(); }
cancelled => { root.cancel(); }
focus-observed(focused) => { if (!focused) { root.blurred(); } }
}
KitButton { text: "Accept"; activated => { root.commit(); } }
Text { text: "Accepted: " + root.accepted; color: KitThemes.light.text-primary; wrap: word-wrap; }
}
}
src/main.rs
use slint::ComponentHandle;
use slint_kit::*;
slint::include_modules!();
#[derive(Clone, PartialEq)]
struct Value(String);
fn parse(text: &str) -> DraftValue<Value> {
if text.is_empty() {
DraftValue::Empty
} else {
DraftValue::Parsed(Value(text.into()))
}
}
fn format(value: &Value) -> String {
value.0.clone()
}
fn main() -> Result<(), slint::PlatformError> {
let app = App::new()?;
slint_kit::init_form_validation!(self, app);
let initial = Value("secret".into());
app.set_accepted("Password set".into());
let weak = app.as_weak();
let field = FieldBinding::<Value, ()>::new(
Some(initial),
Ownership::Local,
CommitPolicy::OnBlur,
AbsencePolicy::Required,
parse,
format,
|_| String::new(),
move |view| {
if let Some(app) = weak.upgrade() {
app.set_draft(view.draft.into());
app.set_error(view.error.into());
}
},
);
field.set_html_constraints(slint_kit::HtmlConstraints {
kind: slint_kit::HtmlInputKind::Password, required: true,
..Default::default()
});
let weak = app.as_weak();
field.on_intent(move |intent| {
if let Some(app) = weak.upgrade() {
if let FieldIntent::Commit(value) = intent {
app.set_accepted(format!("{} characters accepted", value.0.chars().count()).into());
}
}
});
let binding = field.clone();
app.on_edited(move |text| {
let _ = binding.edited(&text);
});
let binding = field.clone();
app.on_commit(move || {
let _ = binding.commit(CommitTrigger::Submit);
});
let binding = field.clone();
app.on_blurred(move || {
let _ = binding.commit(CommitTrigger::Blur);
});
let binding = field.clone();
app.on_cancel(move || binding.cancel());
app.run()
}
Cargo.toml et build.rs
Cargo.toml
[package]
name = "slint-kit-password-field-example"
version = "0.1.0"
edition = "2024"
rust-version = "1.92"
license = "GPL-3.0-or-later"
publish = false
[dependencies]
slint-kit = "=0.3.0"
slint = { version = "=1.18.1", default-features = false, features = ["std", "compat-1-18", "backend-winit", "renderer-skia", "accessibility"] }
[build-dependencies]
slint-kit-build = "=0.3.0"
[workspace]
build.rs
fn main() {
slint_kit_build::compile("ui/app.slint").expect("compile component example");
}
Fichiers : Cargo.toml · build.rs · ui/app.slint · src/main.rs
Liez le brouillon et connectez validation et annulation. Ajoutez vos règles de mot de passe au parseur.
L’exemple accepte une saisie non vide et affiche seulement le nombre de caractères acceptés. Le masquage ne chiffre pas le texte stocké.
Choisir entre une option intégrée et une composition personnalisée
Options partagées
label— propriété intégrée ; exemple de composition personnalisédescription— propriété intégrée ; exemple de composition personnaliséerror— propriété intégrée ; exemple de composition personnalisé
Composition visuelle
Le fichier ci-dessous produit la capture. Pour les composants pilotés par un contrôleur, il montre l’état affiché sans fournir le branchement Rust. Créer un projet.
Afficher le fichier de la capture

// Public label overrides localize this fixture; toolkit/host defaults keep their language.
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitPasswordField, KitTheme, KitThemes } from "@kit/kit.slint";
export component Example inherits Window {
title: "KitPasswordField — exemple";
preferred-width: 420px;
preferred-height: 180px;
max-width: 100000px;
max-height: 100000px;
background: root.theme.canvas;
in-out property <KitTheme> theme: KitThemes.light;
in-out property <string> status;
VerticalLayout {
padding: 24px; spacing: 16px; alignment: start;
Text { text: "Champ de mot de passe"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
KitPasswordField { character-count-label: "caractères"; checking-label: "Vérification…"; clear-label: "Effacer la recherche"; hide-label: "Masquer le mot de passe"; reveal-label: "Afficher le mot de passe"; theme: root.theme; label: "Mot de passe"; text: "keep-it-secret"; edited(value) => { root.status = "Brouillon : " + value; } }
if root.status != "": Text { text: root.status; color: root.theme.text-secondary; font-size: 12px * root.theme.text-scale; wrap: word-wrap; }
}
}
API publique
Hérite de KitTextField.
Propriétés héritées disponibles
| Nom | Type | Définie sur |
|---|---|---|
theme |
KitTheme |
KitTextField |
control-size |
ControlSize |
KitTextField |
access |
FieldAccess |
KitTextField |
validation |
ValidationPresentation |
KitTextField |
purpose |
TextPurpose |
KitTextField |
input-type |
InputType |
KitTextField |
input-kind |
HtmlInputKind |
KitTextField |
validation-twelve-hour |
bool |
KitTextField |
number-format |
NumberInputFormat |
KitTextField |
validation-text |
string |
KitTextField |
display-text |
string |
KitTextField |
intrinsic-error |
string |
KitTextField |
required |
bool |
KitTextField |
multiple |
bool |
KitTextField |
min-length |
int |
KitTextField |
max-length |
int |
KitTextField |
pattern |
string |
KitTextField |
pattern-enabled |
bool |
KitTextField |
min |
string |
KitTextField |
max |
string |
KitTextField |
step |
string |
KitTextField |
default-value |
string |
KitTextField |
validation-timing |
ValidationTiming |
KitTextField |
custom-validity |
string |
KitTextField |
required-message |
string |
KitTextField |
email-message |
string |
KitTextField |
url-message |
string |
KitTextField |
pattern-message |
string |
KitTextField |
too-short-message |
string |
KitTextField |
too-long-message |
string |
KitTextField |
underflow-message |
string |
KitTextField |
overflow-message |
string |
KitTextField |
step-message |
string |
KitTextField |
bad-input-message |
string |
KitTextField |
validity |
KitValidityState |
KitTextField |
will-validate |
bool |
KitTextField |
validation-ready |
bool |
KitTextField |
validation-message |
string |
KitTextField |
pattern-error |
string |
KitTextField |
value |
string |
KitTextField |
dirty |
bool |
KitTextField |
touched |
bool |
KitTextField |
secret-visibility |
SecretVisibility |
KitTextField |
line-mode |
TextLineMode |
KitTextField |
resize-policy |
ResizePolicy |
KitTextField |
min-lines |
int |
KitTextField |
max-lines |
int |
KitTextField |
label |
string |
KitTextField |
accessible-name |
string |
KitTextField |
input-method-hints |
InputMethodHints |
KitTextField |
show-validation-message |
bool |
KitTextField |
validation-visible |
bool |
KitTextField |
description |
string |
KitTextField |
error |
string |
KitTextField |
placeholder |
string |
KitTextField |
text-letter-spacing |
length |
KitTextField |
text-alignment |
TextHorizontalAlignment |
KitTextField |
prefix |
string |
KitTextField |
suffix |
string |
KitTextField |
text |
string |
KitTextField |
show-character-count |
bool |
KitTextField |
character-count |
int |
KitTextField |
reveal-label |
string |
KitTextField |
hide-label |
string |
KitTextField |
clear-label |
string |
KitTextField |
character-count-label |
string |
KitTextField |
checking-label |
string |
KitTextField |
has-focus |
bool |
KitTextField |