我有類Node
Qt的鑄有繼承
class Node : public QObject { Q_OBJECT public: Node(QObject* p) : QObject(p){} void run() { //access to property runImplementtation(); } virtual void runImplementation() = 0; };
我有類NodeA
class NodeA : public Node { Q_OBJECT Q_PROPERTY(double _a READ a WRITE setA) public: NodeA(QObject* p=NULL) : Node(p){} void runImplementation() {} double a() const { return _a; } void setA(double a) { _a = a;} private: double _a; };
在功能方面來看,我想可以操縱的特性子對象。 如果我調用NodeA對象上的run,在run方法中,我無法使用this-> property(「_ a」)訪問_a屬性。
於是,我找到了解決辦法是: 申報Node
const QMetaObject * _metaObject;
並在每個子類 _metaObject = metaObject();
在這種的構造,在運行的方法,我可以訪問_a財產與_metaObject->cast(this)->property("_a");
。
但是,我不得不在每個子類的構造函數中做_metaObject = metaObject();
。
挑剔:QObject的應該接受一個'* QObject的P = 0'in傳遞給構造超級構造函數 – 2014-09-01 10:29:42
您是否嘗試在'run()'或'runImplementation()'中訪問它? – lazycoder 2014-09-01 10:42:02
我調用runImplementation的run方法。 – artoon 2014-09-01 10:48:38