QMetaProperty - weniger Code schreiben

Verschiedenes zu Qt
Antworten
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

QMetaProperty - weniger Code schreiben

Beitrag von otternase »

Hallo

in einem Projekt muss ich eine größere Zahl von Objektklassen anlegen, die wiederum viele Properties haben, die ich aufgrund der Möglichkeit des reflexiven Lesen und Schreibens mittels des Q_PROPERTY-Macros anlege.

Dh. in der .h steht dann zB:

Code: Alles auswählen

[...]
Q_PROPERTY(int Zahl, READ getZahl, WRITE setZahl)
[...]
public:
 int getZahl()
 void setZahl(int);

[...]
private:
 mZahl;
dazu in der .cpp

Code: Alles auswählen

int klasse::getZahl() {
 return mZahl;
}

void klasse::setZahl(int value) {
 mZahl=value;
}
Das ist viel Schreibarbeit.

Ich frage mich, welche Wege es gibt, das abzukuerzen, im Prinzip sollte es fuer solche Faelle reichen, ein Makro zu haben, dem man nur Typ und Attributname übergibt:

Code: Alles auswählen

Q_PROPERTY_SIMPLE(int Zahl)
und der Rest, sowohl in der .h als auch der .cpp sollte automatisch generiert werden.

Welche Ideen gibt es dazu?
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Sprachmittes fuer die generierung von Code gibt es eigentlich in C++ nicht.
Templates typisieren eigentlich nur vorhandenen code.

Das heisst du bist auf den präprozessor(Makro), oder externe tools die dir code generieren (moccer z.b.) angeweisen.

Nen Makro was dir an nem Object ne Variable inklusive getter und setter erzeugt , sollt ned so schwer sein.

Ich rat aber dringenst von ab, weil man sieht den code ned mehr, im schlimmsten Fall sieht man in der Liste noch mal mehr die member, was zu eher sehr schlecht wartbaren, da unverstaendlichen, code führt.

Schreib dir lieber fuer die IDE deiner wahl nen kleines tool, was dir fix fertig modifizierte codebloecke einfuegt.
Die MFC / Visual Studio z.b. machts genau so und treibt das auf die spitze ^^
Schon mal MFC ohne VS programmiert ^^ nahezu unmöglich, da man wahnsinnig wird wenn man alles was die IDE generiert per Hand coden muss ^^

Ciao ....
Antworten