gpt4 book ai didi

qt - 如何覆盖 Q_Property?

转载 作者:行者123 更新时间:2023-12-01 22:30:45 26 4
gpt4 key购买 nike

考虑这些类:

Class A : public QObject {
...
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)

virtual int value() { return m_value; }
void setValue(int v) { m_value = v; Q_EMIT valueChanged();}
...

};

Class B : public A {
...

int value() { return m_value * 2; }

...
};

当访问属性值时,直接调用 A 类方法而不是 B 类方法。

到目前为止,为了解决这个明显的限制,我已经复制了属性代码并连接了每个类的信号。

这是最好的解决方案吗?

有没有人看到潜在的问题(由于属性具有相同的名称)?

最佳答案

来自 Qt 文档:

The READ, WRITE, and RESET functions can be inherited. They can also be virtual. When they are inherited in classes where multiple inheritance is used, they must come from the first inherited class.

只需将访问器设为虚拟,它们就会从 vtable 中调用,因此您将获得适合每个不同子类型的正确函数。

关于qt - 如何覆盖 Q_Property?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683341/

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