如何覆盖Q_Property?

Sil*_*r22 1 polymorphism qt overriding qproperty qt5.4

考虑这些类:

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; }

    ...
};
Run Code Online (Sandbox Code Playgroud)

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

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

这是最好的解决方案吗?

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

dte*_*ech 5

从Qt文档:

READ,WRITE和RESET函数可以继承.它们也可以是虚拟的.当它们在使用多继承的类中继承时,它们必须来自第一个继承的类.

只需将访问器设置为虚拟,它们将从vtable调用,因此您将为每个不同的子类型获得正确的功能.