Was zuletzt geschah…

Lei­der gab es lan­ge kei­ne Updates in die­sem Blog. Das liegt im wesent­li­chen dar­an, daß ich mich in den ver­gan­ge­nen Mona­ten in Qt und C++ ein­ge­ar­bei­tet habe. Dar­über nach­fol­gend ein kur­zer Bericht.

Qt ist ein Anwen­dungs­frame­work und GUI-Tool­kit zur platt­form­über­grei­fen­den Ent­wick­lung von Pro­gram­men und gra­fi­schen Benut­zer­ober­flä­chen. Qt setzt das Pro­gram­mie­ren in C++ vor­aus, was ich bis­her immer ver­mei­den konn­te. Pri­vat und auch in mei­nem gesam­ten Berufs­le­ben kam ich stets mit Ansi‑C aus und habe auch immer die jeweils neue­sten Erwei­te­run­gen in C95, C99 und zuletzt C11 mit­ver­folgt und z.T. ger­ne genutzt. Die Limi­tie­rung auf Ansi‑C liegt schlicht­weg dar­an, daß ich im wesent­li­chen hard­ware­na­he embedded Pro­gram­me geschrie­ben habe und für die weni­gen Win­dows-Pro­gram­me auch die Win32-API nicht unbe­dingt C++ verlangt.

Die Win32-API ist natur­ge­mäß nur unter Win­dows lauf­fä­hig, mit Ein­schrän­kun­gen wohl auch mit Wine unter Linux, was ich aber nie gete­stet habe. Ich bin kein Linux-Jün­ger und habe nur die eine oder ande­re vir­tu­el­le Ubun­tu-Maschi­ne lau­fen, damit ich da nicht ganz abge­hängt wer­de. Freund­li­cher­wei­se gibt es Visu­al Stu­dio von Micro­soft für Pri­vat­an­wen­dun­gen kosten­los. Es hat klei­ne nicht rele­van­te Ein­schrän­kun­gen, mit denen man als Hob­by­ist gut leben kann. Den­noch möch­te ich mich nicht all­zu abhän­gig von Win­dows machen, schon gar­nicht, wenn es um mei­ne Hob­by­an­wen­dun­gen geht. Außer­dem wird der von mir immer noch ver­wen­de­te Res­sour­cen-Edi­tor namens Resedit nicht mehr gewar­tet. Die Web­site ist ver­schwun­den. Ein Schwenk auf eine neue und zukunfts­si­che­re Cross-Platt­form Ent­wick­lungs­um­ge­bung war daher überfällig.

Es gibt dafür meh­re­re Lösun­gen, die letzt­end­lich für kosten­sen­si­ble Hob­by­an­wen­dun­gen aber nur auf zwei kon­kur­rie­ren­de Pake­te hin­aus­lau­fen, näm­lich wxWid­gets und Qt. Nach dem Lesen vie­ler Arti­kel im Inter­net habe ich mich für Qt ent­schie­den. Jeder mag per­sön­lich zu einer ande­ren Ent­schei­dung fin­den. Klar ist, daß man für jedes Paket mit einer mehr­wö­chi­gen oder auch mehr­mo­na­ti­gen Ein­ar­bei­tungs­pha­se rech­nen muß.

Für Qt gibt es vie­le You­tube-Vide­os, die mir die Ein­ar­bei­tung sehr erleich­tert haben. Erste Erfol­ge hat man damit im Grun­de in weni­gen Stun­den oder Tagen, aber bis man sinn­vol­le Appli­ka­tio­nen schrei­ben kann, wird man doch meh­re­re Wochen inve­stie­ren müs­sen. Bei mir kam noch die neue Pro­gram­mier­spra­che C++ hin­zu. Sie ist natür­lich aus C ent­stan­den und sehr ähn­lich, aber die objekt­ori­en­tier­te Her­an­ge­hens­wei­se war mir neu und ist mir immer noch etwas myste­ri­ös. Ins­be­son­de­re hade­re ich damit, daß hin­ter den Kulis­sen Din­ge pas­sie­ren, die ich nicht über­blicke. Das schö­ne ist, daß sie funk­tio­nie­ren, aber ich habe oft (noch) kein Gefühl dafür, wel­che Res­sour­cen bezüg­lich CPU-Zeit oder Spei­cher­be­darf eine gewis­se Ope­ra­ti­on benö­tigt. Viel­leicht ist das aber auch eine Krank­heit aus der Beschrän­kung von embedded Syste­men, die man ein­fach über­win­den muß. Auf einem PC hat man von allem genug, CPU-Zeit, Spei­cher und CPU-Ker­ne. Und wenn nicht, dann war­tet man ein­fach auch die näch­ste Pro­zes­sor­ge­ne­ra­ti­on. QStrings sind bei­spiels­wei­se eine sehr schö­ne Sache, die ich ger­ne ver­wen­de. Aber wie sie hin­ter den Kulis­sen funk­tio­nie­ren, ohne daß man expli­zit eine maxi­ma­le Län­ge ange­ben muß, wie z.B. bei char-Arrays in C, ist mir im Moment noch ein Rät­sel. Der Over­head ist sicher­lich nicht gering, aber in einer PC-Umge­bung ist das wohl völ­lig ver­nach­läs­sig­bar. Das sind wahr­schein­lich Refle­xe aus der Embedded-Pro­gram­mie­rung, die man halt ein­fach über­win­den muß.

Zur Doku­men­ta­ti­on mei­nes bis­he­ri­gen Fort­schritts sol­len hier nur zwei Screen­shots eines Kom­mu­ni­ka­ti­ons­pro­gramms gezeigt wer­den, das über einen USB-RS485-Kon­ver­ter mit den an ande­rer Stel­le in die­sem Blog vor­ge­stell­ten Mod­bus-Gerä­ten (Anten­nen­tu­ner und Anten­nen­um­schal­ter) kommuniziert.

Dia­gno­se-Tab des Kommunikationsprogramms

Con­fig-Tab des Kommunikationsprogramms

Qt unter­stützt die Gestal­tung der Benut­zer­ober­flä­che mit dem Qt Crea­tor und stellt die not­wen­di­gen Biblio­the­ken für das Ziel-Betriebs­sy­stem zur Ver­fü­gung. Die­se Biblio­the­ken unter­stüt­zen nicht nur die gra­fi­sche Ein- und Aus­ga­be, son­dern z.B. auch die Kom­mu­ni­ka­ti­on über eine seri­el­le Schnitt­stel­le. Man bin­det sich also nir­gends direkt an das Betriebssystem.

Als Nach­teil emp­fin­de ich im Moment, daß Qt zumin­dest in der Stan­dard­kon­fi­gu­ra­ti­on sei­ne Biblio­the­ken nicht sta­tisch lin­ked. So muß man selbst bei einem klei­nen „Hel­lo World“ Pro­gramm etwa 10 DLLs mit knapp 50 MB Grö­ße mit­lie­fern. Das macht das Hand­ling etwas schwie­rig, gera­de bei klei­nen „Kiki-Pro­gram­men“. Da gibt es bestimmt bes­se­re Lösun­gen, z.B. indem man die DLLs irgend­wo zen­tral spei­chert und mit einer Envi­ron­ment-Varia­blen dar­auf zeigt. Da muß ich noch etwas for­schen, hat aber kei­ne hohe Priorität.

Ich bin noch Anfän­ger bezüg­lich Qt und C++, aber ich kann Qt auf jeden Fall sehr emp­feh­len. Mei­ne zukünf­ti­gen Pro­jek­te wer­den Qt-basiert sein. Die Unter­stüt­zung im Inter­net lässt kei­ne Wün­sche offen.