gpt4 book ai didi

c++ - Qt 继承

转载 作者:行者123 更新时间:2023-11-28 02:42:06 27 4
gpt4 key购买 nike

我有类 Node

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 对象上调用运行,在运行方法中,我无法使用 this->property("_a") 访问 _a 属性。

所以我找到的解决方案是:在 Node 中声明const QMetaObject * _metaObject;在每个子类的构造函数中_metaObject = metaObject();

这样,在 run 方法中,我可以使用 _metaObject->cast(this)->property("_a"); 访问 _a 属性。

但是,我不喜欢在每个子类的构造函数中执行 _metaObject = metaObject();

最佳答案

我认为您可以使用虚函数来解决这个问题。例如:

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

关于c++ - Qt 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25603740/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com