QT qmake auto generate moc

Alles rund um die Programmierung mit Qt
Antworten
PiCiJi
Beiträge: 9
Registriert: 30. Juli 2009 19:53

QT qmake auto generate moc

Beitrag von PiCiJi »

Ich verwende den QT-Creator. Verwende ich QObject um den moc auszulösen funktioniert das auch. Nervig ist nur, dass die generierte moc.cpp Datei die entsprechende .h Datei, in welcher das QObject enthalten ist, inkludiert.
Ich kann die moc.cpp Datei so nicht kompilieren, da Abhängigkeiten nicht definiert sind. Meine App ist so aufgebaut, dass ich in jeder cpp Datei immer die main.h inkludiere, welche alle class.h inkludiert. Anders kriege ich es auch gar nicht hin, sonst droht endlos Inkludierung. Das übliche Problem Klasse A braucht B und umgekehrt.
Ich kann das Problem manuell lösen, indem ich in den moc.cpp Dateien meine main.h einfüge. Ich fände es jedoch besser, wenn die Generierung voll automatisch geschieht. Was kann ich hier tun? Kann ich keine Info in dem pro file mitgeben?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QT qmake auto generate moc

Beitrag von franzf »

PiCiJi hat geschrieben:Ich kann die moc.cpp Datei so nicht kompilieren, da Abhängigkeiten nicht definiert sind.
Poste bitte
* die entsprechende Header-Datei
* die Fehlermeldung, wenn die entsprechende moc_xyz.cpp kompiliert werden soll.
Meine App ist so aufgebaut, dass ich in jeder cpp Datei immer die main.h inkludiere, welche alle class.h inkludiert. Anders kriege ich es auch gar nicht hin, sonst droht endlos Inkludierung. Das übliche Problem Klasse A braucht B und umgekehrt.
So ein Krampf - sorry. Durch eine main.h wirst du so ein Problem nicht lösen, du zauberst dir nur endlose Kompilierorgien, wenn sich mal einer der eingebundenen Header ändert.
Faustregel:
IMMER nur das einbinden, was man wirklich braucht, ansonsten nimmt man forward declarations.

Faustregel nr. 2:
Zirkuläre Abhängigkeiten (A braucht B und B braucht A) sind tunlichst zu vermeiden, sie deuten auf fehlerhaftes Design hin.

Die zu mocende .h sollte alles enthalten, was zum Kompilieren notwendig ist. Im Allgmeinen sind das die mit Q_OBJECT versehene Klassendefinition und Teile aus dem QObject-Header. -> Wir brauchen deine Copmpiler-Fehlermeldung, um zu sagen was bei dir nicht passt!
PiCiJi
Beiträge: 9
Registriert: 30. Juli 2009 19:53

Re: QT qmake auto generate moc

Beitrag von PiCiJi »

Faustregel nr. 2:
Zirkuläre Abhängigkeiten (A braucht B und B braucht A) sind tunlichst zu vermeiden, sie deuten auf fehlerhaftes Design hin.

Die zu mocende .h sollte alles enthalten, was zum Kompilieren notwendig ist
Ich habe nie so intensiv darüber nachgedacht. Ziel war es immer einen include Weg zu finden, dass die App compiliert und linkt. Ich bin zum Glück noch nicht soweit und werde mir die Zeit nehmen das umzubauen. Ich habe diese Seite hier gefunden. Ich hoffe sie gibt ne gute Grundlage ab.

http://www.eventhelix.com/realtimemantr ... tterns.htm

Jetzt verstehe ich auch wann forward declaration ausreicht und wann include notwendig ist. Mein eigentliches Grundproblem sollte nachdem Umbau gelöst sein.

edit: nun passt es, danke.
Antworten