Ich habe eine Anleitung geschrieben, die Anfängern dabei helfen soll,
das Programmieren zu erlernen.
http://stefanfrings.de/qt_lernen/index.html
Es wird die Programmiersprache C++ und Qt Framework verwendet.
Die Rechtschreibkontrolle steht noch auf meiner TODO Liste.
Immerhin zeigst du erfrischenden Humor:
"Wie geht es weiter?
Wenn du bis hierhin tapfer durchgehalten hast, ohne die Wand an zu
schreien oder durch zu drehen, ..."
Oliver
> Für Anfänger ist das schon hammerhart komprimierter Stoff, oder?
Ich fand es ziemlich wirr und durcheinander ohne jeden didaktischen
Wert. Das sieht eher aus wie ein Notizblock fuer dich persoenlich.
Allerdings hab ich es nur ueberflogen und haette es zu unhoeflich
gefunden dir meine Meinung zu sagen ohne das du nachgefragt haettest.
.-)
Qt ist erstmal C++. Also sollte man sich vielleicht einfach ein Buch zu
C++ besorgen. Ich gebe zu das dies aus Sicht von funktional C denkenden
Entwicklern nicht immer ganz einfach ist. Auch ich muss immer kotzen
wenn ich z.B streams sehe und verdrehe bei templates die Augen.
Wenn man dann erstmal ein paar C++ Basics drauf hat dann kann man sich
mit Qt beschaeftigen, also in Prinzip dem Slot Mechanismus und dem
Framework/Qtcreator.
Auch da hilft IMHO eher ein Buch weiter. In meinem Fall war das: "C++
GUI Programming with Qt 4". Koennte aber heute etwas veraltet sein.
Nichts gegen dich, aber ich denke das Thema Qt ist ganz erheblich zu
komplex um das in einer Internetseite abzuhandeln.
Olaf
Ach so, Nachtrag:
Die nicht unwesentliche Anzahl an Windows-Nutzern wird eh ganz schnell
weiterwandern, weil ohne Compiler halt nichts funktioniert, und apt-get
install nur zu lustigen Fehlermeldungen führt (und die eh nicht mal
wüssten, wo man das denn überhaupt eintippen könnte)
Oliver
Olaf schrieb:> Ich fand es ziemlich wirr und durcheinander
Das kann gut sein, ist der erste Entwurf. In der tat habe ich die
Reihenfolge während des Schreibens mehrfach geändert weil ich vermeiden
wollte, dass der Leser erstmal alle wissen muss, um die Beispiele zu
verstehen.
Da gibt es sicher noch Verbesserungsbedarf.
> Qt ist erstmal C++. Also sollte man sich vielleicht> einfach ein Buch zu C++ besorgen.
Die Leute, mit denen ich gesprochen habe fanden C++ Bücher sehr
unattraktiv weil sie nicht zeigen, wie man damit grafische Oberflächen
baut. Andererseits setzen alle Qt Bücher aber voraus, dass man schon C++
kann.
> ich denke das Thema Qt ist ganz erheblich zu> komplex um das in einer Internetseite abzuhandeln.
Kann gut sein. Generell ist das Programmieren grafischer Oberflächen für
Anfänger zu komplex finde ich. Die wollen aber damit anfangen. Wo landet
man dann: Beim App-Inventor oder anderen Baukästen. Mit denen stehe ich
auf Kriegsfuß.
> Ich sag mal vorsichtig, die "Zielgruppe" für diese Art proggen zu> lernen sucht seit Jahren eher auf youtube...
Da muss ich passen, dafür bin ich zu alt. (Ja ich merke, worauf das
hinaus läuft. Gut dass ich nicht Lehrer bin.)
Ich hab' die Seite nur kurz überflogen und kann somit zur Umsetzung
nichts sagen, finde den Ansatz aber durchaus lobenswert, denn
Stefan ⛄ F. schrieb:> Die wollen aber damit anfangen.
Das kann man gut oder schlecht finden, aber GUIs sind nunmal seit 20
Jahren das einzige, was ein reiner Anwender kennt. Folglich erwartet er
oder sie, daß sein Programm genauso aussieht, selbst wenn es nix anderes
macht als in ein kleines Fenster "Hallo Welt" zu schreiben.
Stefan ⛄ F. schrieb:> Generell ist das Programmieren grafischer Oberflächen für> Anfänger zu komplex finde ich.
Kein Wunder, wenn jeder einzelne Button ein Objekt darstellt...
> Die Leute, mit denen ich gesprochen habe fanden C++ Bücher sehr> unattraktiv weil sie nicht zeigen, wie man damit grafische Oberflächen> baut.
Das ist auch nicht ganz falsch. Die meisten Buecher fuer C++
hinterlassen auch bei mir den Eindruck das der Autor vor allem die
Intention hatte die Treppe zum Elfenbeinturm schoen sauber zu halten.
> Andererseits setzen alle Qt Bücher aber voraus, dass man schon C++> kann.
Naja, man kann es ja unabhaengig lernen. Das Problem ist vielleicht,
niemand, also ich nicht, will C++ komplett lernen. Wir, also der
etechnische Bodensatz, wollen diverse sinnvolle Grundlagen drauf haben
wie sie fuer Mikrocontroller oder einfache Hilfsprogramme auf PCs
notwendig sind. Aus der Ecke duerfte IMHO auch das Beduerfnis nach sowas
wie qt/python herkommen.
> Da muss ich passen, dafür bin ich zu alt. (Ja ich merke, worauf das> hinaus läuft. Gut dass ich nicht Lehrer bin.)
Naja, gerade bei einem Klickibunti-Framework kann ein Video hier und da
schon sehr hilfreich sein. Wer allerdings glaubt bei sowas wie Qt oder
gar C++ ausschliesslich auf Youtube setzen zu koennen wird auch immer
unwissend bleiben. Das ist wie in der Uni. Der Type vorne an der Tafel
war Youtube-live, aber lernen und Uebungen waren doch notwendig. .-)
Olaf
>, und apt-get install nur zu lustigen Fehlermeldungen führt
W10 und WSL sei Dank nicht mehr.
Offensichtlich kommt für Qt nicht nur C++ zuerst, sonde auch noch W10
ein Stück weit zu beherrschen.
Dass nun apt und der ganze Umfang an *buntu Pakete auch auf W10 so gut
wie OutOfTheBox verfügbar sind, vereinfacht solche Anleitungen
ungemein: die paar apt Befehle zur Voraussetzung gelten für eine viel
grössere installierte Basis als nur "native" *buntus.
Ein Nachteil f. mich persönlich: das Eis unter mir wird dünner um
Gemosere über unzulängliche "Betriebssysteme" abzusondern...
> (und die eh nicht mal> wüssten, wo man das denn überhaupt eintippen könnte)
Wer Windows WILL, soll sich gefälligst (ein Stück weit + eine
Nasenlänge) um das Beherrschen desselben bemühen. Ist schließlich seine
eigene Wahl!
NB: das Einrichten von WSL per PowerShell erfordert weniger Schritte als
sich durch W10-GUI-Dialoge zu klicken.
Plattformübergreifer schrieb:>>, und apt-get install nur zu lustigen Fehlermeldungen führt> W10 und WSL sei Dank nicht mehr.> Offensichtlich kommt für Qt nicht nur C++ zuerst, sonde auch noch W10> ein Stück weit zu beherrschen.
Da würde ich der gerne mal zuschauen, wie du die in der Anleitung für
Windows vorgeschlagene Qt-Version "MinGW 64bit" unter WLS zum laufen
bekommst.
@Stefan
Da feht noch der Hinweis auf den zu setzenden Haken unter tools bei
MinGW, damit das auch installiert wird.
Oliver
Oliver S. schrieb:> Da feht noch der Hinweis auf den zu setzenden Haken unter tools bei> MinGW, damit das auch installiert wird.
Der ist automatisch an - es sei denn du hast schon einen kompatiblen
Compiler installiert. Ich füge trotzdem ein, kann nicht schaden.
nun ja schrieb:> ObjektorientierungVorIfAnweisungenZuThematisierenFindeIchÄußerstFragwür> digmehrhabeichnichtgelesen
Dann guck dir mal an, die die Arduino Tutorial beginnen.
Also ich ziehe den Hut vor jedem, der sich so viel
Arbeit macht, um anderen ein Lernen zu ermöglichen.
Ich würde dich aber trotzdem bitten, dein Konzept
nochmal zu überdenken.
Als blutiger Anfänger habe ich etwas installiert
(QtCreator, ...), habe wirren Text irgendwohin kopiert
und lese sofort im Anschluß etwas von Objekt-Instanzen,
Klassen, Parametern, Operatoren, usw. Du versuchst
in einem Rutsch C++, Qt und Objektorientierung zu
erklären. Zu jedem einzelnen Thema kann man mehrere
Bücher schreiben, jedes Thema ist sehr komplex und
auch für erfahrene Entwickler anspruchsvoll. Ich glaube,
ein Anfänger wird sich da sehr schnell sehr verloren
vorkommen. Und da hilft es auch nichts, wenn du jede
Menge Links zu Wikipedia setzt, wo die eigentliche
Erklärung der Begriffe erfolgt. Das stört den Lesefluß
und hindert nur beim Erfassen der Materie.
Hast du schon Rückmeldungen erhalten von Leuten,
die mit deiner Anleitung Qt lernen wollen?
merciless
Dirk K. schrieb:> Hast du schon Rückmeldungen erhalten von Leuten,> die mit deiner Anleitung Qt lernen wollen?
Natürlich nicht, die Anleitung ist ja gerade erst veröffentlicht.
Ich bin guter Dinge, dass innerhalb der nächsten 5 Jahre was brauchbares
raus wird. Wie auch bei den anderen Anleitungen, die ich bisher schrieb.
Mir gefällt dein Ansatz, vom Ziel her zu erklären. Für viele Fälle ist
ein genaues Verständnis von "Objekt", "Klasse", "Vererbung", "Typecast",
"streams" uvm. nicht nötig. Es gibt Konstrukte, die lernt man und nutzt
sie. Mir scheint dein Ansatz wesentlich praxisnäher, als der Hinweis auf
drei dicke Bücher zu C, C++ und Qt. Sonst kommt man nie zu einem
Programm mit einer GUI. Wenn man ehrlich ist, läuft das Meiste auf
Datenschieben zwischen verschiedenen APIs hinaus.
Wie die Erklärungen im Detail von einem Einsteiger erfasst werden, kann
ich nicht beurteilen, da ich einen Großteil der Begriffe bereits kenne
und richtig einordnen kann.
Wünsche dir viele Leser von dem Tutorial!
Elias K. schrieb:> Für viele Fälle ist> ein genaues Verständnis von "Objekt", "Klasse", "Vererbung", "Typecast",> "streams" uvm. nicht nötig.
Das hat der Elias jetzt sicher nicht ernstgemeint, oder?
Hab nur die ersten paar Zeilen durchgelesen und kann deshalb keine
vollumfassende Bewertung abgeben, aber:
Ich finde deine Anleitungen meist immer sehr verständlich und gut
geschrieben und dafür, dass du alles kostenlos für jedermann anbietest,
würde ich mich hier nie anmaßen dich gleich mit Kritik zu überschütten.
Ich finde gut was du da machst und wie viel Arbeit du da investierst.
Zur Rechtschreibung: "Englische Texte" schreibt man glaube ich klein
und "Ein Beispiel ist zum Beispiel der..." klingt komisch. :)
Elias K. schrieb:
> Für viele Fälle ist> ein genaues Verständnis von "Objekt", "Klasse", "Vererbung", "Typecast",> "streams" uvm. nicht nötig.Markus schrieb:> Das hat der Elias jetzt sicher nicht ernstgemeint, oder?
Ich glaube schon und ich finde, dass er da gar nicht so falsch liegt.
Timo N. schrieb:> würde ich mich hier nie anmaßen dich gleich mit Kritik zu überschütten.
Das ist nett gemeint, aber ich weiß schon was mich hier erwartet :-)
Euer Feedback hilft aber schon, den Artikel zu verbessern, deswegen: Nur
zu, keine falschen Hemmungen!
Stefan ⛄ F. schrieb:> Das ist nett gemeint, aber ich weiß schon was mich hier erwartet :-)
Dachte ich übernehme den anderen Part.. Also den Part, der auch mal lobt
und motiviert weiterzumachen. Kritiker gibts hier ja eh genug.
Markus schrieb:> Elias K. schrieb:>> Für viele Fälle ist>> ein genaues Verständnis von "Objekt", "Klasse", "Vererbung", "Typecast",>> "streams" uvm. nicht nötig.>> Das hat der Elias jetzt sicher nicht ernstgemeint, oder?
Das habe ich durchaus ernst gemeint. Musst du bei deinem Auto wissen,
wie Luft und Treibstoff in den Zylinder eingespritzt werden, um es zu
fahren? Erst wenn du dein Auto tunen möchtest, solltest du dich dazu
informieren. Davor reicht es meist zu wissen, dass dein Auto mit dem
Treibstoff X fährt und du den nachfüllst, wenn die Anzeige unter Y
fällt.
Stefan ⛄ F. schrieb:> ... ich weiß schon was mich hier erwartet :-)
Die Leute kennen dich und deinen - sagen wir einmal wohlwollend -
peinlichen Stil der Selbstbeweihräucherung.
Elias K. schrieb:> Musst du bei deinem Auto wissen,> wie Luft und Treibstoff in den Zylinder eingespritzt werden,
Das reicht doch nur für ganz simple Programme, die eher den Umfang eines
Skripts aufweisen. Sobald es etwas ins Eingemachte geht, kommst Du um
OOP nicht herum und dafür muß man doch wissen, was es mit Klassen,
Objekten, Vererbung usw. auf sich hat? Wo genau endet bzw. beginnt für
dich "ein genaues Verständnis"?
Ich finde es für erste Schritte eines Einsteigers in das Thema nicht
schlecht, und es macht sicher auch eine Menge Arbeit das so zu
erstellen. Dafür vielen Dank.
Nach den interessanten Diskussionen neulich hier rund um C++ hatte ich
mir vorgenommen in Richtung C++ mal wissensmässig aufzurüsten und kann
deshalb nun das Buch 'C++ Das umfassende Handbuch'von Torsten T. Will
empfehlen. Sehr verständlich geschrieben und er erklärt an vielen
Beispielen nicht nur wie das in C++ gelöst ist sondern warum das so ist,
welche Alternativen es gibt usw.
Vorweg: hab’s nur grob überflogen. Meine Eindrücke dabei: für ’nen
absoluten Einsteiger, der weder von C++, noch von dem Konzept der
Toolkits eine Idee hat, ist das möglicherweise in der derzeitigen Form
nicht sehr hilfreich. Für jemanden, der bereits ein Grundverständnis
hat, kann es brauchbar sein.
Allerdings wäre eine bessere Gliederung unbedingt anzuraten, denke ich.
Abgeschlossene Lerneinheiten mit klarer Aufgabenstellung und Ziel und
so, aufgeteilt auf einzelnen Unterseiten.
Aber ich find’s toll, dass du dir die Arbeit machst und die Zeit
investierst :)
Moin,
erst mal Danke für den mutigen Ansatz, so etwas umzusetzten und das dann
auch als Köder in dieses Haifischbecken zu schmeissen ;).
Ich hab das jetzt für mich als neuen Versuch genommen, um mich erneut
mit C++ und QT auseinander zusetzen.
Was nett wäre: eine Gliederung bzw. Inhaltsverzeichniss, das auf der
linken Seite "statisch" stehen bleibt, während man scrollt. Noch besser:
wenn das aktuelle Kapitel dort hervorgehoben wird.
Viel Erfolg
Grüße
M.
Ich wuerde eher einen anderen Ansatz vorschlagen. Die Menschen neigen
dazu zuerst Ergebnisse sehen zu wollen und dann etwas erklaert zu
bekommen.
1. Erklaeren was genau man installieren muss.
2. Fertiges Projekt zum runterladen liefern das aus einem Quit-Button
besteht.
3. Jede Zeile in dem Projekt erklaeren, das slot-Konzept erklaeren.
4. Zeigen wie man mit QT-Creator da ein Lineedit reinzieht. (workflow
verstehen)
5. Erklaeren was ein QString ist und wie man die Dokumentation dazu
nutzt.
6. Intellektueller einschub: Was ist eine Klasse, Methode, Konstructor,
Destructor, was soll private und public.
7. 2-3 weitere Grafikelemente wie z.B das 7Segment Display zeigen und
daran
nochmal erklaeren wo man es deklariert, wie man die Hilfe nutz und
welche
Methoden da drin stecken. Also Wissen vertiefen.
8. usw...z.B einen String ueber eine serielle Schnittstelle senden.
dazu vielleicht zweites Fenster oeffnen wo man die Baudrate
einstellt.
Zeigen wie man in Qt Daten systemuebergreifend abspeichert.
So kommt man relativ schnell dazu das jemand sich was eigenes basteln
kann.
Olaf
Ich arbeite gerade an der Gliederung, da ist mir etwas sau-blödes
aufgefallen:
Was zum Teufel hat die Klasse der Schüler mit der Klasse Schueler zu
tun?
Verdammte Sch*****
Soll ich deswegen jetzt nochmal alles umschreiben?
Ich probiere heute Abend mal ein anderes Wording (C++ Klasse versus
Schulklasse), vielleicht reicht das schon.
Wilhelm M. schrieb:> Du schreibst etwas zu Qt und kennst diese Klassiker nicht?
Nein, wirklich nicht.
Ich hatte im laufe der letzten 15 Jahre drei deutsche Bücher über QT
gekauft, war aber am Ende von allen dreien Enttäuscht, weil der Inhalt
kaum mehr war, als was man auf der qt.io Seite finden konnte.
Ohne Englisch geht es wohl nicht mehr.
Stefan ⛄ F. schrieb:> Ohne Englisch geht es wohl nicht mehr.
Das ist allerdings so.
Ob allerdings 12 Jahre alte Bücher zu Qt noch sinnvoll sind, sei auch
mal dahingestellt.
Oliver
Oliver S. schrieb:> Ob allerdings 12 Jahre alte Bücher zu Qt noch sinnvoll sind, sei auch> mal dahingestellt.
Auf dem Niveau der Einführung von Stefanus aber allemal. Denn das
Designprinzip von Qt hat sich nicht geändert. Sehr wohl ist QML dazu
gekommen, aber diese einfache und coole Technik beschreibt er ja gar
nicht. Aber gerade QML wäre wichtig ...
Wilhelm M. schrieb:> Denn das Designprinzip von Qt hat sich nicht geändert.
Den Eindruck habe ich auch. Ich hätte auch keine Hemmungen, ein altes
Buch zum Lernen zu verwenden.
> Den Eindruck habe ich auch. Ich hätte auch keine Hemmungen, ein altes> Buch zum Lernen zu verwenden.
Naja, von 4 nach 5 haben sich schon ein paar Kleinigkeiten geaendert.
Wenn man mit Qt schon umgehen kann oder wenigstens C++ kann ist das
sicher kein Problem, wenn aber alles neu ist dann wird man schon hier
und da mal leicht Frust schieben.
Ich hab z.B noch so dunkel in Erinnerung da sich beim anziehen der
Libaries in fuer qmake ein paar Dinge geaendert haben.
Olaf
Olaf schrieb:> Ich wuerde eher einen anderen Ansatz vorschlagen. Die Menschen neigen> dazu zuerst Ergebnisse sehen zu wollen und dann etwas erklaert zu> bekommen.> ...> ...
Ein meiner Meinung nach sehr guter Ansatz!
Hallo Stefan,
deine Anleitung ist OK.
Ich habe vor 3 Monaten das Fachbuch 'Einstieg in C++' von Thomas Theis
gekauft und mich in die C++Programmierung eingearbeitet.
Jede zusätzliche Information finde ich gut.
Prima, mach weiter so und bleib aktiv.
Gruß
Kurt
Kurt P. schrieb:> deine Anleitung ist OK.
Mehr aber auch nicht.
Ich finde sie didaktisch schlecht und es sind zu viele fachliche Fehler
/ Fragwürdigkeiten drin.
Wilhelm M. schrieb:> Ich finde sie didaktisch schlecht und es sind zu viele fachliche Fehler> / Fragwürdigkeiten drin.
Ich würde mich freuen, wenn du mir bei den fachlichen Fehlern helfen
würdest.
Servus Stefan,
finde ich gut!
Ich bin bisher nur (wenig) hardwarenah in C unterwegs und habe QT auf
dem Zettel.
Ich denke dies kann ein guter Einstieg für mich sein um mich näher damit
zu beschäftigen.
Danke + weiter so!
Unabhängig vom Inhalt fällt mir als erstes das für meinen Monitor total
unpassende Layout der Webseite auf.
Die Gliederung klebt als Balken ziemlich genau in der Mitte des Monitor
und wird beim scrollen nicht bewegt. Das lenkt total vom Text der sich
links davon versteckt ab während die recht Hälfte des monitors frei
bleibt.
Mike R. schrieb:> Die Gliederung klebt als Balken ziemlich genau in der Mitte des Monitor> und wird beim scrollen nicht bewegt.
Witzig, vorher wurde kritisiert, dass sie mit scrollt.
> während die recht Hälfte des monitors frei bleibt.
Ab einer gewissen Breite kann man die Textzeilen nur noch mühsam lesen,
deswegen hat die Seite ein Limit.
Ich glaube ich mache demnächst wieder ein PDF, dann könnt ihr euren PDF
Reader kritisieren.
Stefan ⛄ F. schrieb:> Witzig, vorher wurde kritisiert, dass sie mit scrollt.
Ich kritisiere ja auch gar nicht das srcollen. Mein Problem mit der
Ansicht ist, dass bei 100% Zoom "dein" Text nur auf der linken Seite
dargestellt wird und im Zentrum der Inhaltsverzeichnis "hängt".
Das macht ein flüssigen lesen verdammt schwierig.
Ich denke es würde auf großen Monitoren besser sein, den Inhalt zu
zentrieren
(wie hier im Forum auch).
Mike R. schrieb:> Screenshot
Wow, du hast aber einen großen Bildschirm!
> Mein Problem mit der Ansicht ist, dass bei 100% Zoom "dein"> Text nur auf der linken Seite dargestellt wird und im Zentrum> der Inhaltsverzeichnis "hängt".
Wie hättest du es denn lieber? Breitere Textzeilen kommen wohl kaum in
Frage und die Gliederung an den rechten Bildschirm-Rand zur schieben ist
auch doof.
Soll ich die freie Fläche marktüblich mit Werbebanner füllen?
> Ich denke es würde auf großen Monitoren besser sein, den> Inhalt zu zentrieren
Wenn du deinen Browser nicht maximiert hättest, könntest du es dort hin
schieben, wo es Dir am besten gefällt. Nutze die freie Fläche doch, um
daneben die Entwicklungsumgebung zu öffnen. Ich habe die Seite
absichtlich so gestaltet, dass er platzsparend in schmaleren Fenstern
darstellbar ist. Das ist mir ehrlich gesagt wichtiger, als die
Vollbild-Darstellung auf extrem großen Bildschirmen. Dann scrollt
übrigens auch die Gliederung wieder mit, wie du das haben willst.
In Deutschland schreiben wir immer noch linksbündig. Dass immer mehr
Webseiten neuerdings zentrieren, halte ich für Blödsinnig. Das ist einer
der vielen Mode-Trends, die bald wieder verschwinden. Da kannst du
sicher sein.
> Wow, du hast aber einen großen Bildschirm!
Hehe..das sind die Probleme der neuen Zeit mit unseren unterschiedlichen
Displays. :-)
Um mal wieder auf das Thema zurueckzukommen bei Qt habt ihr die Probleme
auch weil die Bildschirme auf dem euer Programm dargestellt wird
unterschiedlich gross sind, manchmal hochkant genutzt werden und ganz
schlimm, stark unterschiedliche DPIs besitzen koennen.
Qt bietet verschiedene Ansaetze das in den Griff zu bekommen, aber nach
meiner Erfahrung klappt das nicht zu 100% wenn sich die DPIs zu sehr
unterscheiden. (vor allem Fontgroessen/Lesbarkeit/Schrift passt noch in
Button oder nicht)
Meine Loesung sieht dann so aus das ich verschiedene ui-Files habe die
ich jeweils anziehe wenn ich einen Source fuer den PC oder fuer mein
Handy uebersetze.
Nicht elegant, aber einfach...
Olaf
Olaf schrieb:> bei Qt habt ihr die Probleme auch
Allerdings. Das betrifft jede grafische Oberfläche mehr oder weniger.
Einfach alles auf die verfügbare Fläche verteilen ist auch keine Lösung.
Ganz geil sind so manche Android Apps auf Fernsehern. Manche haben
Buttons mit 20x100px, da kann ich von der Couch aus nicht einmal
erkennen, was das ist.
Das der default Font mit 32 Pixeln Größe so manche UI Designer
überfordert, kommt dann noch dazu.
Olaf schrieb:> Meine Loesung sieht dann so aus das ich verschiedene ui-Files habe die> ich jeweils anziehe wenn ich einen Source fuer den PC oder fuer mein> Handy uebersetze.> Nicht elegant, aber einfach...
Ich denke, dass es manchmal nicht anders geht, jedenfalls nicht wenn es
gut aussehen soll. Skalieren und auseinander ziehen macht nur bedingt
Sinn.
Ist angedacht, die Crosscompilierbarkeit in weiteren Kapiteln mit ein zu
beziehen?
Tatsächlich hatte ich mich damals für ein Android-Smartphone
entschieden, pur aus dem Grund, weil ich gesehen hatte, dass der
QtCreator out of the box apk files für Android erstellen kann.
Wobei das aufsetzten der Toolchain für mich ein Hassle war.
In dem Zusammenhang würde es Sinn machen, Beispiele gleich mit den
QLayouts zu machen, um auf den verschiedenen Bildschirmen eine sinnvolle
Darstellung zu kriegen.
Ich persönlich finde sehr sexy, dass man je nach Plattform über
USB-Com-Port oder BLE mit z.B. HC-xx eigene Hardware erreichen kann.
Ich verstehe das als Anleitung, um überhaupt prozedural und ggf. OO
programmieren zu lernen:
Stefan ⛄ F. schrieb:> Ich habe eine Anleitung geschrieben, die Anfängern dabei helfen soll,> das Programmieren zu erlernen.
Dabei ist C++ und Qt als Bibliothek nur das Vehikel:
Stefan ⛄ F. schrieb:> Es wird die Programmiersprache C++ und Qt Framework verwendet.
Meine Meinung dazu habe ich schon gesagt. Und an der Stelle könnte man
Qt auch ganz weglassen.
Anders wäre es, wenn er es als Einführung in Qt verstehen würde. Nur
dann wären eben andere Inhalte wichtig.
Auch anders wäre es, wenn man es als Einführung zu C++ verstehen würde.
Dann müsste man den Inhalt korrigieren.
Wilhelm M. schrieb:> Stefan ⛄ F. schrieb:>> Es wird die Programmiersprache C++ und Qt Framework verwendet.>> Meine Meinung dazu habe ich schon gesagt. Und an der Stelle könnte man> Qt auch ganz weglassen.> Anders wäre es, wenn er es als Einführung in Qt verstehen würde. Nur> dann wären eben andere Inhalte wichtig.>> Auch anders wäre es, wenn man es als Einführung zu C++ verstehen würde.> Dann müsste man den Inhalt korrigieren.
Soweit ich verstanden habe, ist es als Einführung in die Entwicklung
graphischer Oberflächen mit C++ gedacht, ohne dass man dafür aber vorher
schon C++ ohne graphische Oberfläche gelernt haben muss. Da C++ selbst
dafür nichts eingebautes hat, muss man ein Toolkit wählen, mit dem das
möglich ist. Qt ist da nicht die schlechteste Wahl.
Stefan ⛄ F. schrieb:> Ich habe eine Anleitung geschrieben, die Anfängern dabei helfen soll,> das Programmieren zu erlernen.
Hier steht nichts von GUI ...
> QtCreator out of the box apk files für Android erstellen kann.> Wobei das aufsetzten der Toolchain für mich ein Hassle war.
Das war in der Anfangszeit ja auch extrem aeh komplex. Mittlerweile geht
es eigentlich. Wenn du irgendwo im Internet einer Anleitung folgst die
dir zeigt wie man den Googledreck installiert auf den qt zugreifen muss
geht es danach praktisch einfach so..
Olaf
Wilhelm M. schrieb:> Hier steht nichts von GUI ...
Aber hier:
Stefan ⛄ F. schrieb:> Die Leute, mit denen ich gesprochen habe fanden C++ Bücher sehr> unattraktiv weil sie nicht zeigen, wie man damit grafische Oberflächen> baut. Andererseits setzen alle Qt Bücher aber voraus, dass man schon C++> kann.
Timo N. schrieb:
...
> Ich finde deine Anleitungen meist immer sehr verständlich und gut> geschrieben und dafür, dass du alles kostenlos für jedermann anbietest,> würde ich mich hier nie anmaßen dich gleich mit Kritik zu überschütten.> Ich finde gut was du da machst und wie viel Arbeit du da investierst.>
da möchte ich mich anschließen!
Stefanus, nimm Dir die Kritiken nicht zu sehr zu Herzen. Manches ist
sicher konstruktiv, aber vieles auch nur Wichtigtuerei.
Meine - zweifellos subjektive - Meinung zu Deinen Anleitungen auf Deiner
website: Du hast ausgesprochenes didaktisches Geschick (ich glaube, das
beurteilen zu können, habe über 30 Jahre lang Studis nicht ganz
erfolglos unterrichtet).
Weiter so!
Jasson J. schrieb:> Android...> Wobei das aufsetzten der Toolchain für mich ein Hassle war.
Kann ich bestätigen, war bei mir auch sehr anstrengen. Ist das noch so,
dass man unbedingt eine sehr alte Version des NDK nutzen muss?
Bei Android musst du so viel anders machen oder zumindest speziell
berücksichtigen, dass man dafür ein eigenes Tutorial bräuchte.
Ich habe auch starke Bedenken, was die zentrale Installation der Qt
Bibliotheken angeht. Ich kann mir nicht vorstellen, dass es noch lange
erlaubt sein wird, Bibliotheken aus "fremden" Apps (Ministro) zu laden.
Jasson J. schrieb:> Ich persönlich finde sehr sexy, dass man je nach Plattform über> USB-Com-Port oder BLE mit z.B. HC-xx eigene Hardware erreichen kann.
Blutooth Support kam erst vor kurzem dazu. Ich musste damals noch über
JNI auf C++ heraus die Java Klassen von Android aufrufen. Das gleiche
machen jetzt die Qt Bibliotheken.
Md M. schrieb:> http://stefanfrings.de/dippekuchen/index.html>> Schmeckt das wirklich mit dem Geräucherten und dazu Apfel- oder> Birnenmus?
Ja, ich finde es total lecker.
Dippekuchen sieht allerdings wie Kotze aus - ist nicht jedermanns Sache.
>> Android...>> Wobei das aufsetzten der Toolchain für mich ein Hassle war.>Kann ich bestätigen, war bei mir auch sehr anstrengen. Ist das noch so,>dass man unbedingt eine sehr alte Version des NDK nutzen muss?
Das beruhigt mich schon mal sehr :) Dachte schon ich währe allein.
Ansonsten weiß ich nicht, wie es heute ist - hatte das vor ein paar
Jahren aufgesetzt und seit es lief die heilige Kuh nicht mehr angefasst.
>Blutooth Support kam erst vor kurzem dazu. Ich musste damals noch über>JNI auf C++ heraus
Da hab ich ja Glück gehabt, dass es zumindest mit BT inzwischen easy
geht. Ich hab das mit JNI mal gemacht, um den Androidplayer für MP3´s zu
benutzen und auf einem BananaPi wollte ich auf biegen und brechen ohne
GpioLibs direkt aus dem .apk heraus an die Pins kommen. Wobei das auch
bei dem Exempel geblieben ist...
> Kann ich bestätigen, war bei mir auch sehr anstrengen. Ist das noch so,> dass man unbedingt eine sehr alte Version des NDK nutzen muss?
Hm..ich hab es erst vor zwei Monaten mal neu installiert. Irgendwo in
dem Prozess gibt es ein Auswahlfenster wo du dir ein passendes NDK
aussuchen kannst.
Ich hab mir aber bewusst etwas aelteres ausgesucht. Aber es ist wohl
richtig das du harmonierende Versionen von NDK, Java(sehr wichtig!) und
Qt brauchst wenn am Ende alles klappen soll. Ich wuerde also nicht
empfehlen da unoetig kreativ zu sein, ausser man weiss sehr genau was
man will.
BTW: Bei mir hat es nach der Installation zuerst nicht funktioniert und
die Fehlermeldung war auch nicht so richtig aussagekraeftig. Grund war
das man nach der Installation noch einmal irgendein zum NDK gehoerendes
Programm aufrufen muss um darin zu bestaetigen das man die Lizenz gut
findet. Das war bei meiner letzten Installation noch nicht so.
Aber klar. Grundsaetzlich ist das ein gutes Beispiel wieso unsere Welt
derzeit in Kacke versinkt. Zuviele Leute verwenden zuviel
unterschiedliches Zeug und am Ende besteht die Gefahr das es nur noch
auf dem einen Rechner des Entwicklers funktioniert weil es zuviele
Variablen gibt. Und nein Container sind nicht die Loesung, die verdecken
die Scheisse nur.
> Bei Android musst du so viel anders machen oder zumindest speziell> berücksichtigen, dass man dafür ein eigenes Tutorial bräuchte.
Nur bei der Installation ist es etwas tricky. Aber dafuer gibt es
Anleitungen.
https://doc.qt.io/qt-5/android-getting-started.htmlhttps://retifrav.github.io/blog/2017/12/28/qt-for-android/
Wenn es einmal installiert ist dann funktioniert es vollkommen
problemlos und ohne jeden Unterschied zur PC Entwicklung. Eine Ausnahme
sind eventuell Sachen die ganz neu sind. Ich hab vor ein paar Jahren
etwas mit BLE gemacht als das noch neu war und da waren noch nicht alle
Funktionen fuer jedes Betriebssystem verfuegbar. Und manchmal gibt es
auch Bugs die auf das Betriebsystem zurueckgehen. Ich hab vor einigen
Jahren mal ein Testprogramm geschrieben das RS485 genutzt hat und das
lief unter Windows nicht vernuenftig weil Windows immer zurueckgemeldet
hat das der Schreibbuffer bereits leer war obwohl er noch gesendet hat.
Das sind aber alles spezielle Sachen die irgendwas mit Hardware machen.
Wenn man erstmal nur mit Buttons und Fenstern zaubert wird man keinen
Unterschied merken.
Olaf
Olaf schrieb:> Wenn es einmal installiert ist dann funktioniert es vollkommen> problemlos und ohne jeden Unterschied zur PC Entwicklung.
Das ist dann schon falsch, denn Android Anwendungen müssen nach einen
Neustart da weiter machen, wo sie vorher aufgehört hatten. Zumindest,
wenn man sich an die Designvorgaben von Google hält.
Google hat auch ganz spezielle Vorstellungen davon, die das Menü bzw die
Navigation innerhalb der App aussehen soll. Ich hatte das mal als
eigenes Widget implementiert, doch wenige Monate später wollte Google
wieder alles ganz anders haben. Das nervt. Aber Apple nervt noch mehr,
soweit ich gehört habe.
> Das ist dann schon falsch, denn Android Anwendungen müssen nach einen> Neustart da weiter machen, wo sie vorher aufgehört hatten.
Also meine Programme muessen das machen was ich da rein programmiere und
das ist auch der Fall.
> Zumindest, wenn man sich an die Designvorgaben von Google hält.
Willst du mich zum lachen bringen? Weisst du was mich Designvorgaben von
Google interessieren? So ein abwertendes Wort wie es hier angebracht
waere hab ich gar nicht im Wortschatz. Mein Programme haben sogar einen
Quit-Button. Etwas da Google in seinen <auspuck> Designvorgaben
vermutlich vergessen hat.
Olaf
Olaf schrieb:> Willst du mich zum lachen bringen? Weisst du was mich Designvorgaben von> Google interessieren?
Hast du mal versucht, etwas in den Apple Store zu bekommen?
> Etwas da Google in seinen <auspuck>> Designvorgaben vermutlich vergessen hat.
Nicht vergessen, die haben das sogar begründet. Eine Android App nach
deren Gusto wird dann beendet, wenn das OS es für notwendig hält. Und
nur dann.
Dennoch beende ich auf meinem Smartphone die Apps manuell, weil ich
schon öfters verschlafen habe weil irgend eine App über Nacht den Akku
leer gesaugt hat und deswegen der Wecker tot war.
> Hast du mal versucht, etwas in den Apple Store zu bekommen?
Ich hab mal was fuer den ][+ unter UCSD-P entwickelt. Ich glaube da
hatten sie noch kein Store.
Olaf
Stefan ⛄ F. schrieb:> Ich habe eine Anleitung geschrieben, die Anfängern dabei helfen soll,> das Programmieren zu erlernen.
Ich finde es immer wieder erschreckend, wenn Leute andere in einem Thema
unterrichten wollen, von dem sie selbst erwiesenermaßen wenig verstehen.
Ein Disclaimer am Anfang wäre angebracht wie z.B. "Ich versuche nun
einige Jahrzehnte lang, die Grundlagen von C++ zu lernen. Ich bin dabei
nicht weiter gekommen als ein Fachinformatiker in der ersten Woche
seiner Ausbildung. Dennoch verspüre ich den Drang, mein lückenhaftes und
fehlerbehaftetes Wissen weiterzugeben an diejenigen, die von der
Materie noch weniger verstehen als ich."
Konrad S. schrieb:> Ich finde es immer wieder erschreckend, wenn Leute andere in einem Thema> unterrichten wollen, von dem sie selbst erwiesenermaßen wenig verstehen.
Das glaube ich dir. Viele Leute, die sich für die absoluten Experten
halten, denken so. Die gleichen Leute haben auch mit dem Arduino System
Akzeptanzprobleme.
Auf der anderen Seite wissen Anfänger am ehesten, welche Informationen
Anfänger brauchen.
Schicke mal einen 15 Jährigen zu einer C++ Vorlesung in die UNI und
frage ihn danach, wie viel er verstanden hat. Wahrscheinlich nichts.
Stefan ⛄ F. schrieb:> Auf der anderen Seite wissen Anfänger am ehesten, welche Informationen> Anfänger brauchen.
Du siehst dich also als Anfänger. Sehr gut.
Warum schreibst du in deinem Bilderbuch nichts davon?
Konrad S. schrieb:> Warum schreibst du in deinem Bilderbuch nichts davon?
Weil ich abschreckende Bemerkungen an dieser Stelle unpassend finde.
Im Impressum steht das aber sehr deutlich.
Konrad S. schrieb:> fehlerbehaftetes Wissen weiterzugeben
Eine kleine Bitte auch an dich: Mit konkreten Hinweisen die zur
Korrektur von Fehlern führen, ist mir und den Lesern mehr geholfen, als
mit persönlichen Angriffen.
Bitte nenne mir die Fehler, die du gefunden hast.
Stefan ⛄ F. schrieb:> Bitte nenne mir die Fehler, die du gefunden hast.
Das habe ich bereits getan. Der Fehler ist, dass jemand wie du anderen
vorgaukelt, ihnen Programmieren beibringen zu können.
> Das habe ich bereits getan. Der Fehler ist, dass jemand wie du anderen
vorgaukelt, ihnen Programmieren beibringen zu können.
Also inhaltlich nix zu kritisieren, sondern einfach mal stänkern ...
solche Leute wie dich brauchts im Forum wirklich nicht.
@Stefanus : Find ich gut was du machst mit der Anleitung.
Nur mal so als Anmerkung: der linke Teil ist nerviger Ballast.
Bei einer derart langen Seite stört der ungenutze Platz links der nur
oben mit etwas Leben gefüllt ist das derjenige nicht braucht der diese
Seite an sich nutzen will.
NichtWichtig schrieb:> Nur mal so als Anmerkung: der linke Teil ist nerviger Ballast.> Bei einer derart langen Seite stört der ungenutze Platz links der nur> oben mit etwas Leben gefüllt ist das derjenige nicht braucht der diese> Seite an sich nutzen will.
Andererseits halte ich nichts davon, die volle Bildschirmbreite für Text
zu nutzen, weil die Zeilen dann arg lang werden. Zumindest ich habe dann
Schwierigkeiten beim Lesen.
Das könntest du ja den Leser entscheiden lassen. Du schreibst doch eh
schon, dass er einfach das Browserfenster schmaler machen soll, wenn die
Ränder stören. Das kann er ja auch, wenn ihn lange Zeilen stören, nur
hat er dann selber die Wahl, ob er das will oder nicht.
Rolf M. schrieb:> Das könntest du ja den Leser entscheiden lassen. Du schreibst doch> eh> schon, dass er einfach das Browserfenster schmaler machen soll, wenn die> Ränder stören. Das kann er ja auch, wenn ihn lange Zeilen stören, nur> hat er dann selber die Wahl, ob er das will oder nicht.
Ja, bis zu einem gewissen Maximum, das ich festlege. Ich hatte es früher
mal ohne limitierte Breite, da bekam ich eine Menge negatives Feedback
sogar per Email.
Bei kleinen Bildschirmen (Smartphones, Tablets) wird die links
Navigation ausgeblendet, um angemessenen Platz für Text zu schaffen.
Stefan ⛄ F. schrieb:>> Andererseits halte ich nichts davon, die volle Bildschirmbreite für Text> zu nutzen, weil die Zeilen dann arg lang werden. Zumindest ich habe dann> Schwierigkeiten beim Lesen.
Es ist schon seit Jahren möglich nur ein Teilbereich des Fensters zu
nutzen.
Daneben läuft dann gleich QtCreator und die App selbst, gerade im
Zeitalter von UHD echt cool.
Die Zeit von 1024x768 ist schon lange vorbei und selbst FullHD gehört
auf's Abstellgleis.
NichtWichtig schrieb:> Es ist schon seit Jahren möglich nur ein Teilbereich des Fensters zu> nutzen.
Außer auf dem Smart-TV, aber das ist eine andere Baustelle die mir in
diesem Fall Sch*** egal ist.
Warum sind Fernseher egal, Handys aber nicht? Ich halte beide für so ein
Tutorial für gleichermaßen ungeeignet.
NichtWichtig schrieb:> und selbst FullHD gehört auf's Abstellgleis.
Mag sein, aber es ist immer noch sehr verbreitet.
Stefan ⛄ F. schrieb:> In Deutschland schreiben wir immer noch linksbündig. Dass immer mehr> Webseiten neuerdings zentrieren, halte ich für Blödsinnig. Das ist einer> der vielen Mode-Trends, die bald wieder verschwinden. Da kannst du> sicher sein.
In einem Buch klebt der Textblock auch nicht am linken Blattrand,
sondern ist zentriert. Und das schon seit vielen Jahrhunderten.
Stefan ⛄ F. schrieb:> Ich hatte es früher mal ohne limitierte Breite, da bekam ich eine Menge> negatives Feedback sogar per Email.
Erstaunlich. Die Leute wollen also ihre Webseiten in großen
Browserfenstern anschauen, die zur Hälfte leer sind. Hätt ich nicht
gedacht.
Rolf M. schrieb:> Warum sind Fernseher egal, Handys aber nicht? Ich halte beide für so ein> Tutorial für gleichermaßen ungeeignet.
Wwenn ich am Rechner arbeite und mein Bildschirm nicht groß genug ist,
die Anleitung neben Qt Creator anzuzeigen, weiche ich eventuell auf ein
Smartphone oder Tablet aus.
Rolf M. schrieb:> In einem Buch klebt der Textblock auch nicht am linken Blattrand,> sondern ist zentriert.
Das ist wohl wahr. Andererseits frage dich mal, warm Web Browser per
Default immer alles linksbündig anzeigen.
Die Mode ändert sich von Zeit zu Zeit.
> Erstaunlich. Die Leute wollen also ihre Webseiten in großen> Browserfenstern anschauen, die zur Hälfte leer sind. Hätt> ich nicht gedacht.
Ja. Wo andere jeden Millimeter mit Werbung zupflastern kann so eine
leere Fläche sehr beruhigend wirken. Die schicken Wohnungen der reichen
Leute im Fernsehen haben auch viel mehr leere Flächen, als gewöhnlich.
Cool dass du dir die Mühe machst. Beim drüberscrollen fallen mir ein
paar Dinge auf:
- Das "name = name"-Problem in Konstruktor vermeidet fast jeder
Entwickler, indem er den Membern ein Präfix gibt, meist m oder m_. Die
this-> Lösung sieht man eher selten.
- Ebenso setzt fast jeder Entwickler vor und nach "=" ein Leerzeichen.
Du machst das ... manchmal.
- Klar ist, dass man vieles weglassen muss. Ich finde aber teilweise
die Auswahl der Komplexität merkwürdig. So lässt du zum Beispiel das
extrem gängige "const& für Parameter"-Konstrukt weg. Ok. Dafür erklärst
du aber das wirre Konstrukt, wie man in der Windows-Konsole die
Zeichenkodierung ändert? Ich weiß nicht ob das ein kluger Tradeoff ist.
- LD_LIBRARY_PATH ist Murks, und das schon eigentlich immer. Das ist
was für Endbenutzer, die irgendwas workarounden wollen. Für
Development-Setups auf Linux sollte man das Buildsystem eher so bauen,
dass es RPATH/RUNPATH richtig setzt.
- Wie quasi in allen Tutorials finde ich Text I/O stark überbetont --
sehr wenige Menschen schreiben Konsolenanwendungen, und zu
Diagnosezwecken ist qDebug() einem QTextStream(stdout) stark überlegen.
In den letzten 30.000 Zeilen C++ die ich geschrieben habe, habe ich das
nie benutzt.
- Der Ternary-Operator wird vor dem if/else eingeführt, wirklich? :D
Lass ihn einfach weg.
- Genauso würde ich die Bitweise-Operatoren weglassen. Das ist super
spezielles Zeug, den man bei normaler Software so gut wie nie benötigt.
- "obwohl das nicht zwingend notwendig ist, weil das Betriebssystem
schon automatisch aufräumt, wenn das Programm endet" doch, das ist
unbedingt notwendig, weil du nicht weißt welche anderen Resourcen
abhängige Objekte noch allokiert haben, die das Betriebssystem nicht
automatisch aufräumen kann. Typisches Beispiel wäre QTemporaryFile.
Bitte den Anfängern nicht gleich solchen Pfusch beibringen. Das in
modernem C++ extrem wichtige Thema der automatischen Speicherverwaltung
sprichst du gar nicht an -- ich würde mir entweder den new/delete-Teil
ganz sparen, oder zumindest noch std::shared_ptr erklären.
- Dein Teil über Zufallszahlen benutzt die C-Standardbibliothek statt
der von C++. Auch INT_MAX kommt aus der C-Welt, in C++ gibt es den
std::numeric_limits-Kram.
Sven B. schrieb:> - Das "name = name"-Problem in Konstruktor vermeidet fast jeder> Entwickler, indem er den Membern ein Präfix gibt, meist m oder m_. Die> this-> Lösung sieht man eher selten.
Das Grundproblem ist, dass er ja weder den Unterschied zwischen
Deklaration und Definition noch den Unterschied zwischen Zuweisung und
Initialisierung verstanden hat. Das Tutorial ist mehr ein Notizzettel
für ihn persönlich, was er noch lernen muss.
Die Stelle, die Du wohl ansprichst, ist einfach nur falsch.
Die richtige Lösung wäre eine Element-Initialisierungsliste /
Element-Initialisierer und / oder in-class-Initialisierung.
Stefan ⛄ F. schrieb:> Rolf M. schrieb:>> Warum sind Fernseher egal, Handys aber nicht? Ich halte beide für so ein>> Tutorial für gleichermaßen ungeeignet.>> Wwenn ich am Rechner arbeite und mein Bildschirm nicht groß genug ist,> die Anleitung neben Qt Creator anzuzeigen, weiche ich eventuell auf ein> Smartphone oder Tablet aus.
Halte ich für eher unpraktisch. Wenn ich von der Seite irgendwelchen
Code rauspasten oder abspeichern will, ist das umständlich, und man muss
es dann erstmal noch irgendwie vom Handy auf den Rechner übertragen.
Oder halt alles abtippen. Aber ok, ich bin ja immer wieder überrascht,
was Menschen so alles für sinnvoll halten - wie eben halb leere
Browserfenster.
Stefan ⛄ F. schrieb:> Rolf M. schrieb:>> In einem Buch klebt der Textblock auch nicht am linken Blattrand,>> sondern ist zentriert.>> Das ist wohl wahr. Andererseits frage dich mal, warm Web Browser per> Default immer alles linksbündig anzeigen.
Weil der, der das ursprünglich mal festgelegt hat, nicht so genau drüber
nachgedacht hat?
> Die Mode ändert sich von Zeit zu Zeit.
Ich sitze nicht vor dem linken Rand des Bildschirms, sondern mittig.
>> Erstaunlich. Die Leute wollen also ihre Webseiten in großen>> Browserfenstern anschauen, die zur Hälfte leer sind. Hätt>> ich nicht gedacht.>> Ja. Wo andere jeden Millimeter mit Werbung zupflastern kann so eine> leere Fläche sehr beruhigend wirken. Die schicken Wohnungen der reichen> Leute im Fernsehen haben auch viel mehr leere Flächen, als gewöhnlich.
Über Platzverschwendung, gerade bei User-Interfaces rege ich mich öfters
auf. Zum Beispiel, wenn das Radio in meinem Auto ein Viertel der
Displayfläche dafür verschwendet, um ein Icon eines USB-Sticks
anzuzeigen, damit ich weiß, dass jetzt von USB abgespielt wird, dafür
aber dann 50% aller Musiktitel unvollständig angezeigt werden (mit "…"
am Schluss), weil der Platz dafür zu klein ist. Das ist besonders
ärgerlich, wenn der Anfang des Titels immer gleich ist und nur der Teil
hinter dem "…" sich unterscheidet.
Sven B. schrieb:> - Klar ist, dass man vieles weglassen muss. Ich finde aber teilweise> die Auswahl der Komplexität merkwürdig. So lässt du zum Beispiel das> extrem gängige "const& für Parameter"-Konstrukt weg. Ok. Dafür erklärst> du aber das wirre Konstrukt, wie man in der Windows-Konsole die> Zeichenkodierung ändert? Ich weiß nicht ob das ein kluger Tradeoff ist.>> - LD_LIBRARY_PATH ist Murks, und das schon eigentlich immer. Das ist> was für Endbenutzer, die irgendwas workarounden wollen. Für> Development-Setups auf Linux sollte man das Buildsystem eher so bauen,> dass es RPATH/RUNPATH richtig setzt.
Ich empfinde nun gerade RPATH eher als Murks. Die Pfade sollten nicht im
Programm hartkodiert sein. In der Regel packt man einfach das Setzen von
LD_LIBRARY_PATH mit dem Programm-Aufruf zusammen in ein Shellskript.
> - Wie quasi in allen Tutorials finde ich Text I/O stark überbetont --> sehr wenige Menschen schreiben Konsolenanwendungen, und zu> Diagnosezwecken ist qDebug() einem QTextStream(stdout) stark überlegen.
Allerdings muss man da ein bisschen aufpassen. Bei manchen
Linux-Distributionen wurde qDebug kaputtkonfiguriert. Das hat mich
letztens fast zur Verzweiflung gebracht. Es fehlten einfach
qDebug-Ausgaben, die ich eingebaut hatte, um zu sehen, ob ich an eine
bestimmte Stelle im Code komme, die nicht funktionierte. Ich hatte mich
gefragt, warum zum Teufel der Code nicht aufgerufen wird, aber er wurde.
Nur qDebug war halt stillgelegt.
Nach etwas Googelei kam folgendes raus: Es gibt wohl irgendein
KDE-Programm, das die Logfiles mit zu vielen Debug-Ausgaben zuspammt.
Deshalb hat jemand die glorreiche Idee gehabt, das nicht etwa zu fixen,
sondern stattdessen einfach der Default global für alle Programme qDebug
komplett abzuschalten.
Die Lösung ist, in ~/.config/QtProject eine leere Datei namens
qtlogging.ini anzulegen.
> - Der Ternary-Operator wird vor dem if/else eingeführt, wirklich? :D> Lass ihn einfach weg.
Den halte ich auch für Anfänger für erstmal eher weniger wichtig.
> - Genauso würde ich die Bitweise-Operatoren weglassen. Das ist super> spezielles Zeug, den man bei normaler Software so gut wie nie benötigt.
Bei Qt muss man doch ständig irgendwelche Flags verodern. Die Operatoren
gehören für mich schon zu den wichtigen Grundlagen.
Rolf M. schrieb:>> - LD_LIBRARY_PATH ist Murks, und das schon eigentlich immer. Das ist>> was für Endbenutzer, die irgendwas workarounden wollen. Für>> Development-Setups auf Linux sollte man das Buildsystem eher so bauen,>> dass es RPATH/RUNPATH richtig setzt.>> Ich empfinde nun gerade RPATH eher als Murks. Die Pfade sollten nicht im> Programm hartkodiert sein. In der Regel packt man einfach das Setzen von> LD_LIBRARY_PATH mit dem Programm-Aufruf zusammen in ein Shellskript.
Leider hat sich das Design von RPATH/RUNPATH auch nicht gerade mit Ruhm
bekleckert. Es ist aber immer noch weniger murksig als LD_LIBRARY_PATH.
Die generelle Strategie momentan ist, RPATH oder RUNPATH korrekt zu
setzen wenn das Programm gebaut wird. Dann kann es aus dem
Build-Verzeichnis ohne irgendwelches Setup korrekt gestartet werden.
Beim installieren ("install"-Target des Build-Systems) wird RPATH
wieder entfernt, denn ab dann sollten stattdessen die
System-Linker-Suchpfade benutzt werden. Das ist zum Beispiel das
Standard-Verhalten von CMake.
"LD_LIBRARY_PATH mit Shellskript" ist eine Murkslösung, denn du kannst
ohne elendes Gefrickel keine Kindprozesse vom System mehr starten. Die
erben nämlich dann alle deinen (für sie falschen) LD_LIBRARY_PATH und
versuchen irgendwas von irgendwo zu laden, nur nicht das was sie
sollten. Den ursprünglichen Wert von LD_LIBRARY_PATH bekommst du dann
auch nicht mehr ohne weiteres raus. Für QT_PLUGIN_PATH gilt übrigens
dasselbe: hier ist stattdessen qt.conf o.ä. die bessere Lösung. Generell
finde ich, dass Anwendungen zum Starten von sich aus keinerlei
Umgebungsvariablen brauchen sollten; die sind was für den Endbenutzer
und sein spezifisches Setup, nicht für mein Deployment.
Die LD_LIBRARY_PATH-Variante hat noch andere nervige Nachteile, so ist
es zum Beispiel schwieriger, das Programm in einem Debugger oder
Profiler oder in strace oder so zu starten. Versuche mal deine IDE dazu
zu bewegen, das Shellskript als Debug-Target zu nehmen ...
> Bei Qt muss man doch ständig irgendwelche Flags verodern. Die Operatoren> gehören für mich schon zu den wichtigen Grundlagen.
Das sehe ich genauso. Vor allem bei Leuten die von hier kommen. Die
kommen ja alle aus der Hardwareecke und wollen irgendwas mit Hardware
machen. Nur die wenigsten werden sich wohl ein Programm fuer ihre
Steuererklaerung oder ein Game schreiben.
Olaf
Die Operatoren sind aber in QFlags eh überladen und sind nicht mehr die
original bitweise-ops. So ähnlich wie der operator<< vom text stream. Da
hilft es dir auch wenig, wenn du weißt dass der left shift macht ;)
Will sagen, das Wissen "um Flags A und B anzugeben schreibe ich A | B"
ist ziemlich unabhängig von diesen C-Bitweise-Operatoren.
Hab gerade eigentlich was ganz andere gesucht, aber durch Zufall das
hier gefunden:
https://www.proggen.org/doku.php?id=start
Da kann man C lernen, darauf aufbauend C++ und darauf aufbauend Qt.
Fand ich garnicht so schlecht...
Olaf
Olaf schrieb:> Da kann man C lernen, darauf aufbauend C++ und darauf aufbauend Qt.
Das ist der klassische Weg, den auch ich gegangen war. Vor C kam bei mir
noch Assembler, allerdings auf einem 8 Bit Rechner (C64) und davor
getaktete Logikschaltungen.