Ordnerstruktur

Hier können eigene Projekte, die mit Qt in Beziehung stehen vorgestellt werden.
Antworten
arj
Beiträge: 45
Registriert: 1. Juni 2009 13:51
Wohnort: Ihringen

Ordnerstruktur

Beitrag 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

Code: Alles auswählen

make: Für das Ziel »first« ist nichts zu tun.
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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
arj
Beiträge: 45
Registriert: 1. Juni 2009 13:51
Wohnort: Ihringen

Beitrag 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!
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
arj
Beiträge: 45
Registriert: 1. Juni 2009 13:51
Wohnort: Ihringen

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 :P) Es klappt mit dem qmake bei den Qt-Sourcen doch auch ganz wunderbar!
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
Antworten