Leider gab es lange keine Updates in diesem Blog. Das liegt im wesentlichen daran, daß ich mich in den vergangenen Monaten in Qt und C++ eingearbeitet habe. Darüber nachfolgend ein kurzer Bericht.
Qt ist ein Anwendungsframework und GUI-Toolkit zur plattformübergreifenden Entwicklung von Programmen und grafischen Benutzeroberflächen. Qt setzt das Programmieren in C++ voraus, was ich bisher immer vermeiden konnte. Privat und auch in meinem gesamten Berufsleben kam ich stets mit Ansi‑C aus und habe auch immer die jeweils neuesten Erweiterungen in C95, C99 und zuletzt C11 mitverfolgt und z.T. gerne genutzt. Die Limitierung auf Ansi‑C liegt schlichtweg daran, daß ich im wesentlichen hardwarenahe embedded Programme geschrieben habe und für die wenigen Windows-Programme auch die Win32-API nicht unbedingt C++ verlangt.
Die Win32-API ist naturgemäß nur unter Windows lauffähig, mit Einschränkungen wohl auch mit Wine unter Linux, was ich aber nie getestet habe. Ich bin kein Linux-Jünger und habe nur die eine oder andere virtuelle Ubuntu-Maschine laufen, damit ich da nicht ganz abgehängt werde. Freundlicherweise gibt es Visual Studio von Microsoft für Privatanwendungen kostenlos. Es hat kleine nicht relevante Einschränkungen, mit denen man als Hobbyist gut leben kann. Dennoch möchte ich mich nicht allzu abhängig von Windows machen, schon garnicht, wenn es um meine Hobbyanwendungen geht. Außerdem wird der von mir immer noch verwendete Ressourcen-Editor namens Resedit nicht mehr gewartet. Die Website ist verschwunden. Ein Schwenk auf eine neue und zukunftssichere Cross-Plattform Entwicklungsumgebung war daher überfällig.
Es gibt dafür mehrere Lösungen, die letztendlich für kostensensible Hobbyanwendungen aber nur auf zwei konkurrierende Pakete hinauslaufen, nämlich wxWidgets und Qt. Nach dem Lesen vieler Artikel im Internet habe ich mich für Qt entschieden. Jeder mag persönlich zu einer anderen Entscheidung finden. Klar ist, daß man für jedes Paket mit einer mehrwöchigen oder auch mehrmonatigen Einarbeitungsphase rechnen muß.
Für Qt gibt es viele Youtube-Videos, die mir die Einarbeitung sehr erleichtert haben. Erste Erfolge hat man damit im Grunde in wenigen Stunden oder Tagen, aber bis man sinnvolle Applikationen schreiben kann, wird man doch mehrere Wochen investieren müssen. Bei mir kam noch die neue Programmiersprache C++ hinzu. Sie ist natürlich aus C entstanden und sehr ähnlich, aber die objektorientierte Herangehensweise war mir neu und ist mir immer noch etwas mysteriös. Insbesondere hadere ich damit, daß hinter den Kulissen Dinge passieren, die ich nicht überblicke. Das schöne ist, daß sie funktionieren, aber ich habe oft (noch) kein Gefühl dafür, welche Ressourcen bezüglich CPU-Zeit oder Speicherbedarf eine gewisse Operation benötigt. Vielleicht ist das aber auch eine Krankheit aus der Beschränkung von embedded Systemen, die man einfach überwinden muß. Auf einem PC hat man von allem genug, CPU-Zeit, Speicher und CPU-Kerne. Und wenn nicht, dann wartet man einfach auch die nächste Prozessorgeneration. QStrings sind beispielsweise eine sehr schöne Sache, die ich gerne verwende. Aber wie sie hinter den Kulissen funktionieren, ohne daß man explizit eine maximale Länge angeben muß, wie z.B. bei char-Arrays in C, ist mir im Moment noch ein Rätsel. Der Overhead ist sicherlich nicht gering, aber in einer PC-Umgebung ist das wohl völlig vernachlässigbar. Das sind wahrscheinlich Reflexe aus der Embedded-Programmierung, die man halt einfach überwinden muß.
Zur Dokumentation meines bisherigen Fortschritts sollen hier nur zwei Screenshots eines Kommunikationsprogramms gezeigt werden, das über einen USB-RS485-Konverter mit den an anderer Stelle in diesem Blog vorgestellten Modbus-Geräten (Antennentuner und Antennenumschalter) kommuniziert.


Qt unterstützt die Gestaltung der Benutzeroberfläche mit dem Qt Creator und stellt die notwendigen Bibliotheken für das Ziel-Betriebssystem zur Verfügung. Diese Bibliotheken unterstützen nicht nur die grafische Ein- und Ausgabe, sondern z.B. auch die Kommunikation über eine serielle Schnittstelle. Man bindet sich also nirgends direkt an das Betriebssystem.
Als Nachteil empfinde ich im Moment, daß Qt zumindest in der Standardkonfiguration seine Bibliotheken nicht statisch linked. So muß man selbst bei einem kleinen „Hello World“ Programm etwa 10 DLLs mit knapp 50 MB Größe mitliefern. Das macht das Handling etwas schwierig, gerade bei kleinen „Kiki-Programmen“. Da gibt es bestimmt bessere Lösungen, z.B. indem man die DLLs irgendwo zentral speichert und mit einer Environment-Variablen darauf zeigt. Da muß ich noch etwas forschen, hat aber keine hohe Priorität.
Ich bin noch Anfänger bezüglich Qt und C++, aber ich kann Qt auf jeden Fall sehr empfehlen. Meine zukünftigen Projekte werden Qt-basiert sein. Die Unterstützung im Internet lässt keine Wünsche offen.