可以将Q_PROPERTY泛化为多个基类吗?

时间:2018-10-18 14:11:55

标签: c++ qt inheritance signals-slots

我正在尝试为将保存在容器中的某些数据编写包装器。该数据将与QML接口,并且此后将具有Q_PROPERTIES。但是,我希望此数据从特定的基类派生,因此我可以调用重写的方法而不必进行强制转换。这是一个例子。

class Base : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)

public:
    /*implementation is irrelevant, just boilerplate code*/
}

class BaseBool : public Base {
    Q_PROPERTY(bool value READ value WRITE setValue NOTIFY valueChanged)

public:
        /*I want to override the functions here so I can just call them
        like I would for a base class, but I want them to be different types.
        I want to extend this for other types too.*/
}

希望这是有道理的。显然,将类模板化并具有Q类型的T_PROPERTY是理想的,但是对于当前的Qt来说这是不可能的。有什么合适的解决方案吗?也许有更好的设计模式可以解决这个问题,但是我现在很茫然。

1 个答案:

答案 0 :(得分:0)

Qt的所有元数据都可以在运行时生成,或使用C ++编译器生成,而不是moc。这些属性可以在运行中或在编译过程中进行综合,对于模板化的类而言这不是问题。您正在寻找的是Verdigris。只要您有一个足够现代的编译器,那么就需要Verdigris:

  

[您]需要一个可以执行C ++ 14宽松constexpr的编译器,例如GCC 5.1或Clang 3.5或MSVC 2017