我有Node类
类节点: public QObject { Q_OBJECT public:节点(QObject* p):QObject(p){} void (){//访问属性runImplementtation();}虚拟Q_OBJECT runImplementation() = 0;};
我有NodeA类
类NodeA : public Node { Q_OBJECT Q_PROPERTY(double _a READ A READ) public: NodeA(QObject* p=NULL):节点(P) {} (){} double a() const {返回_a;} void ( double a) { _a = a;} private: double _a;};}
在函数运行中,我希望可以操作子对象的属性。如果我在NodeA对象上调用run,在run方法中,我不能使用这个->属性(“_a”)访问_a属性。
因此,我找到的解决方案是:在Node const QMetaObject * _metaObject;和每个子类_metaObject = metaObject();的构造函数中声明
这样,在run方法中,我可以使用_a访问_metaObject->cast(this)->property("_a");属性。
但是,我并不喜欢在每个子类的构造函数中执行_metaObject = metaObject();。
发布于 2014-09-01 10:40:55
我认为您可以通过使用虚拟函数来解决这个问题。例如:
class Node : public QObject
{
public:
[..]
virtual void run() {...}
[..]
};和
class NodeA : public Node
{
Q_OBJECT
Q_PROPERTY(double _a READ a WRITE setA)
public:
[..]
virtual void run()
{
// access the _a property with property("_a");
// The Node::run() also can be called here.
}
[..]
};以及如何使用这个:
Node *node = new NodeA(...);
node->run(); // will call NodeA::run()https://stackoverflow.com/questions/25603740
复制相似问题