2012-03-09 29 views
5

Tôi đang thiết kế lớp QT4. Cho đến nay lớp học của tôi trông giống như sau:Cách tạo bộ định vị và getters và xác định Q_PROPERTY() bằng bộ tiền xử lý 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;} 

Tôi muốn xác định macro làm tất cả những điều này phù hợp với tôi. Tôi đã thử này cho định nghĩa của một biến và các văn bản bên 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)) 

Khi tôi thay thế dòng:

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

với

EXPORTEDVAR(int,Integer) 

vĩ mô được một cách chính xác trước đã được xử lý và được thay thế bằng:

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

Tôi đã kiểm tra thủ công bằng cpp. Mã biên dịch, nhưng tôi không thể lấy thuộc tính của một thể hiện của lớp này. Tôi đang sử dụng metaobject (từ QT4 moc) của một thể hiện của lớp này để lấy các thuộc tính, nhưng tôi không thể tìm thấy nó. Tôi cho rằng điều này có liên quan đến bộ xử lý trước, nhưng tôi không biết cách điều tra.

Trả lời

3

Moc không mở rộng macro bằng đối số (Xem moc Limitations), vì vậy, nó không thấy câu lệnh Q_PROPERTY của bạn.

Các vấn đề liên quan