2012-03-09 9 views
5

Projektuję klasę QT4. Do tej pory moja klasa wygląda tak:Jak generować programy ustawiające i pobierające i definiować Q_PROPERTY() z preprocesorem C++

class GIHNode : public QObject, public QGraphicsItem 
{ 

Q_OBJECT 
Q_INTERFACES(QGraphicsItem) 
[...] 
public: 
void setInteger(int); 
int getInteger(); 

[..] 
private: 
int Integer; Q_PROPERTY(int Integer READ getInteger WRITE setInteger) 
// Definition I'd like to replace 

The setters and getters are implemented like this: 
void GIHNode::setInteger(int x){Integer=x;} 
int GIHNode::getInteger(){return Integer;} 

Chciałbym zdefiniować makro, które to wszystko działa dla mnie. Próbowałem to dla definicji zmiennej oraz tekst wewnątrz Q_PROPERTY:

#define ID(x) x 
#define STR_HELPER(x,y) ID(x)y 
#define STRGET(x) STR_HELPER(get,x) 
#define STRSET(x) STR_HELPER(set,x) 
#define EXPORTEDVAR(type,varname) type varname; Q_PROPERTY(type varname READ STRGET(varname) WRITE STRSET(varname)) 

Kiedy wymienić linię:

int Integer; Q_PROPERTY(int Integer READ getInteger WRITE setInteger) 

z

EXPORTEDVAR(int,Integer) 

makro jest prawidłowo pre - przetwarzane i zastępowane przez:

int Integer; Q_PROPERTY(int Integer READ getInteger WRITE setInteger) 

Sprawdziłem ręcznie za pomocą cpp. Kod się kompiluje, ale nie mogę uzyskać własności instancji tej klasy. Używam metaobiekt (z QT4 moc) instancji tej klasy do pobierania właściwości, ale nie mogę go znaleźć. Przypuszczam, że ma to coś wspólnego z procesorem, ale nie wiem, jak to zbadać.

Odpowiedz

Powiązane problemy