IHM Qt : configuration et scan
Pages concernées
| Fichier | Rôle |
|---|---|
qml/pages/config/ConfigPage.qml | Liste des réglages avec icônes (style iOS / Android) |
qml/pages/config/GeneralSettingsPage.qml | Ancien formulaire de configuration (nom, site, MQTT) |
qml/pages/config/ConsigneSettingsPage.qml | Interrupteur Mode consigne, état des casiers et de la sync |
qml/pages/consigne/ConsignePage.qml | Écran de scan (lecteur QR HID) |
qml/pages/consigne/ConsigneLayoutPage.qml | Mur de casiers : casier ouvert clignotant, casiers occupés |
qml/launcher/HomeScreen.qml | Tuile Consigne affichée seulement si le mode est actif |
src/consigne/consigne_client.{hpp,cpp} | Élément QML ConsigneClient (client HTTP de l'agent) |
Navigation
Captures depuis le Raspberry Pi
Écran de scan Consigne (avant ouverture)

Mur des casiers Consigne

ConsigneClient (C++ → QML)
class ConsigneClient : public QObject {
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(bool online READ online NOTIFY changed)
Q_PROPERTY(bool enabled READ enabled NOTIFY changed)
Q_PROPERTY(QVariantList lockers READ lockers NOTIFY changed)
Q_PROPERTY(int occupied READ occupied NOTIFY changed)
Q_PROPERTY(QString lastSyncChannel READ lastSyncChannel NOTIFY changed)
Q_PROPERTY(QString lastSyncError READ lastSyncError NOTIFY changed)
public:
Q_INVOKABLE void refresh(); // GET /consigne/status (auto toutes les 5 s)
Q_INVOKABLE void setEnabled(bool on); // POST /consigne/mode/on|off
Q_INVOKABLE void scan(const QString& code); // POST /consigne/scan
signals:
void scanFinished(bool ok, int locker, const QString& recipientName, const QString& message);
};
L'URL de l'agent est lue dans LEUKOS_NODE_API_URL ou dérivée de
/etc/leukos/node.json (api.port, défaut http://127.0.0.1:8080).
Interrupteur du mode consigne
ToggleSwitch {
checked: consigne.enabled
busy: consigne.busy || !consigne.online
accent: "#d29922"
onToggled: consigne.setEnabled(!consigne.enabled)
}
La page affiche aussi :
N libre(s) · M occupé(s) · T casier(s);Synchronisé avec Saturn via grpc|rest, ou l'erreur de synchronisation ;- une grille des casiers (vert = libre, orange = occupé).
Tuile d'accueil conditionnelle
ConsigneClient {
id: consigneState
onChanged: home.syncConsigneTile()
}
function syncConsigneTile() {
if (!consigneState.online)
return; // ne rien changer tant que l'agent n'a pas répondu
// ajoute la tuile "consigne" si enabled, la retire sinon,
// puis launcherGrid.rebuildSlots()
}
Scan QR
Le lecteur QR (ex. BF SCAN SCAN KEYBOARD, VID 9901 / PID 0301) est un clavier HID :
il tape le contenu du QR puis Entrée. La page garde un TextField invisible avec le
focus (re-forcé chaque seconde) :
TextField {
id: scannerField
width: 1; height: 1; opacity: 0
focus: true
inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhSensitiveData
onAccepted: page.submitCode(text)
}
Connections {
target: consigne
function onScanFinished(ok, locker, recipientName, message) {
page.checking = false
if (ok)
page.stack.push(layoutComponent, { stack: page.stack,
assignedDoor: locker, recipientName: recipientName })
else
page.lastError = message || "Code refusé"
}
}
:::tip Configuration du lecteur Le lecteur doit être configuré avec le suffixe CR/Entrée (réglage usine habituel). Sans ce suffixe, le code n'est jamais validé. L'application Scanner de l'accueil permet de vérifier qu'il est détecté et de voir les données lues. :::
Mur de casiers
ConsigneLayoutPage dessine les portes depuis /etc/leukos/consigne.json
(ConsigneConfig). Le casier assignedDoor clignote en vert, les casiers occupés
(d'après ConsigneClient.lockers) sont entourés en orange.
Compilation et déploiement
make -C .build/buildroot BR2_EXTERNAL="$PWD/nodes/os" leukos-ui-rebuild -j1
# binaire : .build/buildroot/output/target/usr/bin/leukos-ui
Voir Déploiement pour l'installation sur le node.