Seite 1 von 1
Ordnerstruktur
Verfasst: 3. Juni 2009 09:41
von arj
Hallo zusammen,
mich würde interessieren, wie ihr die Ordnerstruktur eines Qt Projektes anlegen würdet.
Aktuell hab ich mich an folgendem
Thread orientiert, was auch wunderbar klappt.
Nun ist es allerdings so, dass ich ziemlich viele Klassen habe und die nicht alle direkt im src Ordner haben möchte, wegen der Übersicht. Oder ist das so üblich? Ich habe mir überlegt, Unterordner anzulegen und dort die Klassen rein zumachen. Dafür habe ich in der Projektdatei die Subdir Variable gefüllt, das hat aber irgendwie nicht funktioniert wie gedacht.
Code: Alles auswählen
TEMPLATE = subdirs
HEADERS += md.h
SOURCES += md.cpp
FORMS += welcome.ui
CONFIG += qt warn_on debug
QT += network xml webkit
RESOURCES += ./resources/images.qrc
win32 {
DESTDIR = ../../bin/win
} else {
DESTDIR = ../../bin/linux
}
Und dann entpsrechend im Unterordner
Code: Alles auswählen
[...]
TEMPLATE = app
HEADERS += ...
SOURCES += ...
[...]
Das funktioniert allerdings leider nicht, das Makefile das erstellt wird,
bringt immer ein
Zusätzlich zu den Klassen habe ich noch Testklassen mit QtTestLib. Würdet ihr die auch in das src Verzeichnis packen? Oder in ein Unterverzeichnis?
Ich hoffe ihr könnt mir ein paar Anregungen geben, danke schon im Voraus.
Viele Grüße
arj
Verfasst: 3. Juni 2009 12:32
von franzf
Du programmierst in Qt, das ist meist immer objektorientiert (bis auf ein paar Helperfunktionen vllt.), da sitzt du dann auf einem leeren src-Ordner (nur ein .pro liegt noch da), und alles andere wandert nach "src/classes" - irgendwie nicht so prickelnd.
Du solltest dir überlegen, ob du die Klassen nicht thematisch ordnen kannst.
ala "src/core" für alles, was nur für Daten beschaffen gebraucht wird, dann "src/gui" für alles was zum malen ist, z.B. eigene Widgets, Views, GraphicsItems, usw. Dann kannst du noch nen eigenen Ordner für Dialoge (SettingsDialog, usw.) anlegen wenn du viele davon hast.
Und eigentlich brauchst du da nicht wirklich zwingend separate .pro-files. Du kannst doch in das "src/MegaSupaApp.pro" die ganzen Dateien mit "gui/BruzzlerWidget.cpp" usw. eintragen.
Ansonsten lad dir mal die Qt-Sourcen runter. Die haben ja auch zig verschachtelte Verzeichnisse und verwenden auch die .pro-Files. Sollte für dich am interessantesten sein!
Grüße
Franz
Verfasst: 3. Juni 2009 14:45
von arj
franzf hat geschrieben:Du solltest dir überlegen, ob du die Klassen nicht thematisch ordnen kannst.
Genau dass hatte ich ja vor

Allerdings hab ich halt ein kleines
Beispiel genommen (s.o.).
Das mit den Qt-Sourcen ist ein gute Idee. Werd ich mir mal
anschauen. Danke!
Verfasst: 3. Juni 2009 15:14
von RHBaum
Naja, wenn sourcen so viel und unuebersichtlich werden ...
... isses ziemlich wahrscheinlich, das man "teile" woanders brauchen kann, bzw Teile eh von extern ausgeborgt wurden.
Ich wuerd mir dann eher ueberlegen, das Project auf binaerer Ebene (Uebersetzungseinheiten / Libraries) zu teilen ....
BTW, die QT machts auch so ...
aus /src/core wird auch eigene ne QTCore .... lib, und iss eigentlich nen eigenstaendiges project !
Ich mein, wenn du auf filesystemebene dir das schon unuebersichtlich wird, dann hasst auf C++ Ebene sicher scho zu ganz anderen mitteln gegriffen(namespaces z.b.), um die uebersicht zu wahren.
Ciao ...
Verfasst: 5. Juni 2009 09:24
von arj
Danke für Eure Ideen.
Das Projekt ist aktuell noch nicht soo groß und unübersichtlich.
Allerdings wird es noch deutlich größer werden, weshalb ich
mir halt schonmal gedanken zwecks Modularisierung machen möchte.
Man will sich ja in seinem Code zurechtfinden
Das mit den Libs ist ne gute Idee. Ist dass denn einfach portabel,
d.h. unter Linux spuckt es eine Sharedlib aus und unter Windows ne
Dll und die Einbindung funktioniert auch ohne Probleme plattformübergreifend?
Grüße
arj
Verfasst: 5. Juni 2009 11:32
von franzf
Das ist ja eben das schöne an den plattformübergreifenden Makefile-Generatoren ala qmake, cmake (scons?), usw. Man schreibt sein file genau einmal und das wars. Alles andere läuft automatisch.
Für ganz spezielle Sachen (z.B. generierung von Plattformabhangigen Dateien, oder Registry verändern, usw.) hat man aber meist noch die Möglichkeit das trotzdem zu erledigen.
Außerdem (um beim Thema Qt zu bleiben

) Es klappt mit dem qmake bei den Qt-Sourcen doch auch ganz wunderbar!
Verfasst: 5. Juni 2009 11:55
von RHBaum
Ist dass denn einfach portabel,
d.h. unter Linux spuckt es eine Sharedlib aus und unter Windows ne
Dll und die Einbindung funktioniert auch ohne Probleme plattformübergreifend?
mit statischen libs (.a / .lib, je nach compiler) funktioniert es compilerspezifisch, hasst ja auch meist eigene IDE's zu ....
das heisst, mit dem gcc unter windows und linux wirst ned viel unterschiede feststellen.
dynamische libs haben paar besonderheiten, die OS spezifisch sind. das kann aber QLibrary dir entsprechend plattformuebergreifend abstrahieren, wenn Du kein besonders eigenwilliges verhalten brauchst.
Also fuer die meisten normalen dll anwendungen wird QLibrary ausreichend sein.
Ciao ...