2012-03-09 13 views
5

के साथ Q_PROPERTY() को परिभाषित करें, मैं एक QT4 कक्षा डिज़ाइन कर रहा हूं। अब तक मेरी कक्षा इस तरह दिखती है:सेटर्स और गेटर्स कैसे उत्पन्न करें, और 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;} 

मैं एक मैक्रो को परिभाषित करना चाहता हूं जो मेरे लिए यह सब काम करता है। मैं एक चर की परिभाषा और Q_PROPERTY अंदर पाठ के लिए यह कोशिश की है:

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

साथ

EXPORTEDVAR(int,Integer) 

मैक्रो सही ढंग से पूर्व जाता है:

#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)) 

जब मैं लाइन की जगह -प्रोसेस्ड, और इसके साथ प्रतिस्थापित किया गया है:

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

मैंने सीपीपी के साथ मैन्युअल रूप से जांच की है। कोड संकलित करता है, लेकिन मुझे इस वर्ग के उदाहरण की संपत्ति नहीं मिल सकती है। मैं गुणों को पुनर्प्राप्त करने के लिए इस वर्ग के उदाहरण के मेटाबोजेक्ट (QT4 moc से) का उपयोग कर रहा हूं, लेकिन मुझे यह नहीं मिल रहा है। मुझे लगता है कि प्री-प्रोसेसर के साथ इसका कुछ संबंध है, लेकिन मुझे नहीं पता कि इसकी जांच कैसे करें।

उत्तर

3

मॉक तर्क के साथ मैक्रोज़ का विस्तार नहीं करता है (moc Limitations देखें), इसलिए यह आपके Q_PROPERTY कथन नहीं देखता है।

संबंधित मुद्दे