Kapitel 65. Beispiel für die Entwicklung einer mobilen Anwendung

Jeder Entwickler kennt das frustrierende Gefühl, wenn die Theorie vorhanden ist, aber die fertige Anwendung fehlt. Ideen sammeln sich an, Beispiele funktionieren einzeln, aber daraus ein Produkt zusammenzustellen, das man nicht schämt, im Store zu veröffentlichen, stellt sich plötzlich als schwieriger heraus als gedacht.

Dieses Kapitel wird schrittweise enthüllen, wie aus einem Set verstreuter QML-Techniken eine vollwertige mobile Anwendung entsteht. Sie werden entdecken, warum richtige Planung Wochen Entwicklungszeit spart.

QtMultimedia, QtSensors, Timer und Interface-Skalierung werden zum Einsatz kommen, und es wird gezeigt, wie man QML und C++ in einem funktionierenden Projekt verbindet. In nur einem Kapitel werden Sie auf 5 zentrale praktische Techniken stoßen, die professionelle Mobile-Entwickler täglich anwenden.

Dieses Kapitel auslassen bedeutet, weiterhin “Demos” statt Anwendungen zu schreiben.

Das Kapitel enthält Code-Beispiele, die sofort einsatzbereit sind.

Selbstüberprüfung zum Kapitel

Welche zwei Methoden zur Organisation von Mediendateien in Qt-Anwendungen werden im Kapitel erwähnt, und für welche Dateitypen wird das Asset-System empfohlen?Antwort
Richtige Antwort: Qt-Ressourcensystem (qrc) und App-Asset-System (assets). Assets werden für Dateien mit großem Umfang und Multimedia-Dateien empfohlen, sowie zur Speicherung von App-Icons.
Wozu wird in der Anwendung die Eigenschaft minDim verwendet, und wie wird sie berechnet?Antwort
Richtige Antwort: Die Eigenschaft minDim gewährleistet Unabhängigkeit der Elementgrößen von der Bildschirmauflösung. Sie wird als Math.min(width, height) berechnet – die minimale Bildschirmabmessung des Geräts.
Was ist das DelayButton-Element und wie unterscheidet es sich von einem normalen Button?Antwort
Richtige Antwort: DelayButton ist ein Button mit Aktivierungsverzögerung, der erst nach Halten für eine festgelegte Zeit (delay-Eigenschaft) auslöst. Er unterstützt Visualisierung des Wartevorgangs und umschaltbaren Zustand.
Warum empfiehlt der Autor, mit einer einfachen ersten Version der App zu beginnen, anstatt sie sofort perfekt zu machen?Antwort
Richtige Antwort: Die erste Version ist ein Test der Ideen-Eignung. Wichtiger ist es, die Basisidee zu den Nutzern zu bringen und dann die App schrittweise basierend auf ihrem Feedback zu entwickeln, was Zeit und Ressourcen spart.
Warum ist es wichtig, den Namen und das Icon der App richtig zu wählen?Antwort
Richtige Antwort: Der Name sollte die Funktionalität der App offenlegen und einzigartig sein, um Konflikte zu vermeiden. Das Icon ist das Erste, was Nutzer im Store sehen, und ein gutes visuelles Image steigert das Interesse an der App erheblich.
Wozu verwendet das Gyroscope-Element die Eigenschaft skipDuplicates: true?Antwort
Richtige Antwort: Dies spart Akku durch Vermeidung des Empfangs und der Verarbeitung identischer Sensordaten, was besonders wichtig für mobile Geräte ist.
Warum muss für iOS in der Projektdatei ffmpegmediaplugin durch darwinmediaplugin ersetzt werden?Antwort
Richtige Antwort: Das Standard-Plugin ffmpegmediaplugin kompiliert nicht unter iOS, daher muss das native darwinmediaplugin verwendet werden, das Apples eingebaute Media-Frameworks (AVFoundation) nutzt.
Wie ist der visuelle Alarm-Effekt in der Anwendung beim Auslösen des Alarms implementiert?Antwort
Richtige Antwort: Es wird eine Kombination aus Timer und Sound (MediaPlayer) verwendet: der Timer ändert periodisch die Hintergrundfarbe von weiß zu rot und zurück, während MediaPlayer einen Sirenen-Sound in Endlosschleife abspielt.
Was passiert, wenn showFullScreen() für eine iOS-App nicht aufgerufen wird?Antwort
Richtige Antwort: Der Benachrichtigungsbereich im oberen Bildschirmteil wird nicht überdeckt, und die App nimmt nicht den gesamten verfügbaren Bildschirmbereich des Geräts ein.
Wozu wird im Canvas-Element das Connections-Objekt verwendet, um Button-Progress-Änderungen zu verfolgen?Antwort
Richtige Antwort: Connections ermöglicht es, Canvas bei Änderung des Button-Zustands (progress, down, checked) durch Aufruf von requestPaint() neu zu zeichnen, was die Animation des roten Rings um den Button ermöglicht.
Wie erhält man im QML-Code Informationen darüber, auf welchem Betriebssystem die App läuft?Antwort
Richtige Antwort: Es wird die Eigenschaft Qt.platform.os verwendet, die einen String mit dem Betriebssystemnamen zurückgibt (z.B. “ios”, “android”).
Was passiert, wenn beim MediaPlayer-Element die Eigenschaft loops auf MediaPlayer.Infinite gesetzt wird?Antwort
Richtige Antwort: Die Audiodatei wird in Endlosschleife wiedergegeben, bis die Wiedergabe explizit durch Aufruf der stop()-Methode gestoppt wird.
Warum sind die Größen des Hauptelements der Anwendung (320×480) für mobile Geräte nicht wichtig?Antwort
Richtige Antwort: Die Anwendung läuft auf mobilen Geräten im Vollbildmodus und nimmt automatisch die Bildschirmgrößen an. Die angegebenen Größen werden nur für den Start auf dem Computer im Testmodus benötigt.
Welcher minimale Rotationswinkel entlang der X-, Y-, Z-Achsen gilt als kritisch für die Alarm-Auslösung?Antwort
Richtige Antwort: Der Alarm wird bei Bewegung ausgelöst, die 10 Grad an einer der Achsen überschreitet (Maximalwert von Math.abs für x, y, z).
Was passiert, wenn der Benutzer die alarm-Eigenschaft des Hauptelements während des Alarms auf false ändert?Antwort
Richtige Antwort: Der onAlarmChanged-Handler wird ausgelöst, der den Timer und die Sound-Wiedergabe stoppt und die Anwendung in den Normalzustand mit weißem Hintergrund zurückversetzt.

Praktische Aufgaben

Einfaches Level

Countdown-Timer mit Visualisierung
Erstellen Sie eine einfache Qt Quick-Anwendung mit einem Countdown-Timer auf 10 Sekunden. Beim App-Start soll der Countdown beginnen, dargestellt als großer Text in der Bildschirmmitte. Bei Erreichen von Null spielen Sie ein kurzes Tonsignal ab und ändern die Hintergrundfarbe auf grün.
Hinweise: Verwenden Sie das Timer-Element mit interval: 1000 für Aktualisierung jede Sekunde. Für die Zeit-Anzeige nutzen Sie Text mit font.pixelSize, berechnet über minDim. MediaPlayer wird für den Sound benötigt. Vergessen Sie nicht, in der .pro-Datei die Module multimedia und qml hinzuzufügen.

Mittleres Level

Bewegungsdetektor mit Empfindlichkeitseinstellung
Erweitern Sie die App-Idee aus dem Kapitel: Erstellen Sie einen Bewegungsdetektor mit Empfindlichkeitseinstellung. Fügen Sie einen Slider zur Regelung des Auslöseschwellwerts hinzu (von 5 bis 30 Grad), einen Text-Indikator für die aktuelle Empfindlichkeit und einen visuellen Indikator für den aktuellen Bewegungslevel in Echtzeit. Implementieren Sie adaptive Skalierung aller Interface-Elemente.
Hinweise: Verwenden Sie Gyroscope mit kontinuierlichem Monitoring. Erstellen Sie ein Rectangle als Indikator mit veränderbarer Breite, gebunden an den movement-Wert. Nutzen Sie Slider.value als Auslöseschwellwert. Berechnen Sie alle Größen über parent.minDim für Adaptivität. Fügen Sie Text-Elemente zur Werteanzeige hinzu.

Schwieriges Level

Multi-Modus-Alarm mit Event-Historie
Erstellen Sie eine erweiterte Version der Alarm-App mit drei Betriebsmodi: Bewegung (Gyroskop), Sound (Mikrofon über QtMultimedia) und kombinierter Modus. Fügen Sie ein Event-Log mit Zeitstempeln der Auslösungen hinzu, das zwischen Starts gespeichert wird. Implementieren Sie konfigurierbare Profile (Zuhause, Büro, Straße) mit unterschiedlichen Empfindlichkeitsparametern. Verwenden Sie Canvas zur Visualisierung der Aktivitätslevel aller Sensoren in Echtzeit.
Hinweise: Verwenden Sie StackView oder SwipeView zum Moduswechsel. Für Datenspeicherung nutzen Sie LocalStorage oder Settings. AudioRecorder wird für Sound-Monitoring benötigt. Canvas mit onPaint zeichnet Aktivitätsgraphen. Erstellen Sie separate Komponenten für jeden Modus. ListModel + ListView für das Event-Log. Vergessen Sie nicht das proper cleanup beim Moduswechsel.

💬 Nehmen Sie an der Diskussion teil!

Haben Sie die Alarm-App erfolgreich implementiert? Welche Schwierigkeiten traten bei der Arbeit mit dem Gyroskop oder der Sound-Wiedergabe auf?

Teilen Sie Ihre Ideen zur Verbesserung der App, berichten Sie über gefundene Lösungen oder stellen Sie Fragen zur Interface-Skalierung!

Haben Sie vielleicht Ihre eigene Variante der Sensor-Anwendung in mobilen Apps entwickelt? Lassen Sie uns gemeinsam diskutieren!

Leave a Reply

Your email address will not be published. Required fields are marked *