我正在尝试为将保存在容器中的某些数据编写包装器。该数据将与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来说这是不可能的。有什么合适的解决方案吗?也许有更好的设计模式可以解决这个问题,但是我现在很茫然。
答案 0 :(得分:0)
Qt的所有元数据都可以在运行时生成,或使用C ++编译器生成,而不是moc。这些属性可以在运行中或在编译过程中进行综合,对于模板化的类而言这不是问题。您正在寻找的是Verdigris。只要您有一个足够现代的编译器,那么就需要Verdigris:
[您]需要一个可以执行C ++ 14宽松constexpr的编译器,例如GCC 5.1或Clang 3.5或MSVC 2017