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

Can a Q_PROPERTY be generalized for multiple base classes?

本文关键字:基类 泛化 PROPERTY 一个      更新时间:2023-10-16

我正在尝试为将保存在容器中的一些数据编写包装器。这些数据将与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.*/
}

希望这是有道理的。显然,模板类并具有T类型的Q_PROPERTY将是理想的,但是对于当前的Qt来说,这是不可能的。对此有什么像样的解决方案吗?可能有更好的设计模式来解决这个问题,但我现在不知所措。

Qt的所有元数据都可以在运行时生成,也可以使用C++编译器而不是moc。这些属性可以在动态或编译期间合成,对于模板化类来说不会有问题。你要找的是Verdigris。只要你有一个足够现代的编译器,那么Verdigris就是你所需要的:

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