In unserer Qt-Anwendung verwenden wir die QML-Timer-Komponente, um Digital Signage zu verwalten und die Cursoraktivierung basierend auf der Benutzeraktivität zu steuern. Diese Komponente ermöglicht es Entwicklern, Aktionen nach einer Verzögerung oder in regelmäßigen Abständen zu planen.
In diesem Blogbeitrag zeigen wir, wie man die Timer-Komponente verwendet, um den Cursor in einer Digital Signage-Anwendung, die wir bei der Begx2 GmbH entwickeln, automatisch auszublenden. Das Ziel besteht darin, den Cursor nach 15 Sekunden Inaktivität auszublenden, sodass der Bildschirm sauber und frei von Ablenkungen bleibt.
Grundlegendes zum QML-Timer
Das Timer-Element in QML bietet eine einfache Möglichkeit, zeitgesteuerte Ereignisse zu verarbeiten. Es kann so konfiguriert werden, dass es einmal nach einer Verzögerung oder wiederholt in festgelegten Intervallen ausgelöst wird. Hier ist ein kurzer Blick auf seine wichtigsten Eigenschaften:
- Intervall: Gibt die Dauer in Millisekunden an, bevor der Timer ausgelöst wird.
- Läuft: Ein Boolescher Wert, der bestimmt, ob der Timer aktiv ist.
- Wiederholung: Wenn wahr, läuft der Timer kontinuierlich im angegebenen Intervall.
- beiAusgelöst: Der Event-Handler, der ausgeführt wird, wenn der Timer ausgelöst wird.
Implementieren der Cursor-Deaktivierung bei Inaktivität
Für unseren Digital Signage-Anwendungsfall benötigen wir einen Timer, der jedes Mal zurückgesetzt wird, wenn der Benutzer mit dem System interagiert. Wenn 15 Sekunden lang keine Aktivität erkannt wird, verschwindet der Cursor. Unten sehen Sie eine Implementierung mit QML und der MouseArea-Komponente von Qt:
import QtQuick 2.15
import QtQuick.Controls 2.15
ApplicationWindow {
visible: true
width: 1280
height: 720
property point lastMousePosition: Qt.point(0, 0)
property real movementThreshold: 5 // Minimal movement to register activity
MouseArea {
anchors.fill: parent
hoverEnabled: true
onPressed: resetTimer()
onClicked: resetTimer()
onReleased: resetTimer()
onPositionChanged: checkMovement(mouse.x, mouse.y)
Timer {
id: inactivityTimer
interval: 15000 // 15 seconds
running: true
repeat: false
onTriggered: hideCursor()
}
}
function checkMovement(x, y) {
var dx = Math.abs(x - lastMousePosition.x);
var dy = Math.abs(y - lastMousePosition.y);
if (dx > movementThreshold || dy > movementThreshold) {
resetTimer();
lastMousePosition = Qt.point(x, y);
}
}
function resetTimer() {
inactivityTimer.restart();
showCursor();
}
function hideCursor() {
Qt.inputMethod.hide(); // Hides the cursor
}
function showCursor() {
Qt.inputMethod.show(); // Shows the cursor
}
}
So funktioniert es

- Eine MouseArea-Komponente erkennt Benutzerinteraktionen wie Klicken und Drücken.
- Jede Interaktion setzt den Timer mithilfe der Funktion resetTimer() zurück.
- Wenn 15 Sekunden lang keine Interaktion stattfindet, ruft der onTriggered-Handler hideCursor() auf, wodurch der Cursor unsichtbar wird.
- Jede nachfolgende Interaktion startet den Timer neu und aktiviert den Cursor erneut.
- Kleinere Bewegungen (aufgrund von Umgebungsfaktoren) werden mithilfe der Funktion checkMovement() ignoriert, die sicherstellt, dass nur signifikante Bewegungen den Timer zurücksetzen.
Verbesserungen und Überlegungen
- Tastaturaktivität: Um diese Funktion weiter zu verfeinern, sollten Sie das Hinzufügen von Tastenereignis-Listenern in Erwägung ziehen, um den Timer bei Tastatureingaben zurückzusetzen.
- Visuelle Anzeige: Bei Bedarf kann ein subtiler Ausblendeffekt hinzugefügt werden, bevor der Cursor ausgeblendet wird.
- Benutzerkonfiguration: Ermöglichen Sie Benutzern, die Dauer der Zeitüberschreitung in den Anwendungseinstellungen zu konfigurieren.
Abschluss
Mithilfe der Timer-Komponente in QML haben wir erfolgreich einen automatischen Cursor-Deaktivierungsmechanismus implementiert, der die Benutzerfreundlichkeit einer Digital Signage-Anwendung verbessert. Dieser Ansatz kann auf verschiedene andere Anwendungsfälle ausgeweitet werden, die eine automatische Inaktivitätserkennung erfordern.
Durch die Nutzung des robusten QML-Frameworks von Qt können Sie zeitgesteuerte Ereignisse effizient verarbeiten und die Benutzerinteraktionen innerhalb Ihrer Anwendungen verbessern. Das Qt-Team von helloQt hilft Ihnen gerne bei der Implementierung Ihres Qt-Projekts.