Markiert mit "QML"


calDAV und iCalendar code example mit Qt, C++ und QML

Nachdem ich mich letztes Jahr schon hier und da mit Kalendern für Webseiten und dem iCalendar-Format beschäftigt hatte, habe ich letztens während dem 33C3 in Hamburg noch einen calDAV-Client in C++ und QML mit Qt geschrieben. Zweck: den Küchen-Computer um eine Kalenderansicht mit meinen anstehenden Terminen erweitern. Da ich keinen passenden Beispielcode finden konnte, der nicht entweder nur ansatzweise funktioniert oder völlig overfeatured ist, habe ich kurzerhand anhand der offiziellen Spezifikation selbst etwas geschrieben:
Screenshot
GUI-Screenshot des Beispielprojekts
Features (u.a.):
  • Verbindet sich mit calDAV-Servern (z.B. ownCloud, Nextcloud, etc.)
  • Lädt iCalendar-Dateien von Festplatte oder über HTTP und HTTPS
  • Verarbeitet Wiederholungsregeln für Terminserien und erstellt Listen von Terminen für einzelne Kalenderdaten
  • Verwaltet mehrere Kalenderquellen simultan
  • Anlegen, Editieren und Löschen von Terminen
  • ... usw. ...
Eine komplette Beschreibung und Download gibt es auf der Projektseite... Das Beispielprojekt und zugehöriger source code stehen unter CC BY-NC-SA 3.0.

Irrationales Programmieren mit QML

Ich habe Qt5 auf dem Raspberry Pi 2 kompiliert und installiert. Das war zwar ein bisschen umständlich, lief bis jetzt eigentlich ohne unüberwindbare Probleme. Aber jetzt hol' ich gleich die Kettensäge und geb' dem Drecksteil den Rest! Den Code des Küchencomputers portiere ich derzeit auf Qt5 und QtQuick 2.4 und mache ihn unabhängig von Plattform und Auflösung. Er läuft inzwischen gleichermaßen problemlos auf Windows 7 wie auf Debian Wheezy mit LXDE. Nur auf dem Raspberry nicht. Da werden manche Texte nicht angezeigt und das Layout ist verschoben. Und QML wirft mir unzählige Fehlermeldungen entgegen - allen gemein ist, dass sie mit string-Properties zu tun haben. Also habe ich in den letzten Stunden ein Minimalprojekt angelegt um das Problem nachzustellen, einzukreisen und dann eine passende Lösung zu entwickeln. So was kostet Zeit, funktioniert aber immer. Nur hier nicht. Dieser Mistcode bringt mich noch um den Verstand: import QtQuick 2.4 import QtQuick.Window 2.2 Window { id: myWindow width: 400 height: 200 visible: true Text { id: myText text: "12" } Text { x: 30 text: myText.text Component.onCompleted: { myText.text = "99" } } } Das funktioniert genau so, wie es soll. Wenn man aber "99" durch "34" ersetzt, bleibt der zweite Text leer und QML meldet Unable to assign [undefined] to QString in der Zeile text: myText.text. Allerdings nur auf dem Raspberry. Unter Windows und einem x86-Linux macht es, was es soll. Was zur Hölle soll das? Warum gerade "34"?? Warum nicht z.B. "42"??? Nerv! Ich spiele schon mit dem Gedanken wieder zurück auf Qt4.8 zu portieren ...