Seite 1 von 1

Qt/C++ unter der Haube

Verfasst: 21. Mai 2020 00:54
von monem
Hallo allerseits,
ich nutze Qt-Framework eigentlich noch nicht so lange. Mir gefällt aber die Arbeit damit bis jetzt sehr gut, obwohl ich noch viele Fassetten von Qt nicht kenne. Jetzt möchte ich tiefer darin einsteigen, und brauche dazu ein möglichst sehr solides Verständnis von den einzelnen Komponenten, die bei der Programmerstellung beteiligt sind und wie die miteinander verzahnt sind.
Was ich meine ist, Beispielsweise wie bei einem normalen C/C++ Programm welches mit Präprozessor, Compiler und Linker erstellt wird. Wobei der Präprozessor erst eine Textersetzung macht, danach kommt der compiler, der eine Objekt-Datei erstellt und diese an dem Linker übergibt, der wiederum die Lib-Dateien aus der Bibliothek dazu einbindet und schließlich gibt es am ende eine exe-Datei.
Oder bei Java z.B. gibt es noch diese Bytecode und virtual machine usw.
Wie ist es jetzt bei Qt? Was gibt es denn hier genau alles? Es unterscheidet sich ja von der normalen C++ Programmierung. Kennt Ihr vielleicht ein Bild, Skizze, oder Link der alles genau und richtig transparent und anschaulich macht wie alles unter der Haube abläuft.? Mit diesem Qt Designer, um jetzt wieder ein Beispiel zu nennen, kann man ja auf die schnelle mal eben eine kleine Anwendung programmieren aber ich möchte mehr Kontrolle darüber haben Verstehen wo und wie der Rest des Codes von der QtDesigner für mich erstellt wurde und wie kann ich den Code selbst manipulieren. Welche Dateien sind beteiligt usw.
Ich würde auch gerne das mit diesem Signal und Slot - Concept viel besser verstehen und der Zusammenhang mit dem Macro Q_OBJECT. Ich weis, dass der Macro nötig ist, aber warum? wie hängt all das zusammen? Wäre super wenn ihr helfen könnt. Danke
Gruß

Re: Qt/C++ unter der Haube

Verfasst: 27. Mai 2020 12:47
von GoaSkin
QT ist im Wesentlichen nur ein Framework, sprich eine Sammlung von Klassen und Funktionen für alles Mögliche, aber keine grundlegend neue Toolchain. Der Compiliervorgang ist im Wesentlichen der selbe. Was dabei von QT selbst ins Spiel kommt, sind Tools, die mit dem Designer erstellte Interfaces (UI-Dateien) sowie Sprachübersetzungsdateien in C++-Code konvertieren und der Meta Object Compiler (moc), der dafür sorgt, dass proprietäre QT-Erweiterungen im Source Code (z.B. signals und slots) in einen C++-konformen Workaround konvertiert werden, der sich dann mit einem normalen Compiler kompilieren lässt.

Der Linker bindet übrigens nicht nur schlichtweg Bibliotheken ein. Er generiert das ausführbare Programm auf Basis der einzelnen Kompilate; ggf. unter Einbeziehung statischer Bibliotheken, deren Code dann ebenfalls im Programm verwurstet werden und generiert dann eine Symboltabelle im Programm, aus der hervor geht, welche in irgend einem Teil des Programmes aufgerufene Funktion wo gefunden werden kann. Dies können dann am Ende sowohl bestimmte Positionen im Binärcode sein, als auch Verweise auf (dynamische) Bibliotheken wie DLLs.