【发布时间】:2019-03-23 09:06:27
【问题描述】:
我正在尝试为将保存在容器中的一些数据编写一个包装器。该数据将与 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,这是不可能的。有没有合适的解决方案?可能有更好的设计模式可以解决这个问题,但我现在不知所措。
【问题讨论】:
-
这是您要找的吗? (stackoverflow.com/questions/29683341/…)
-
另一个解决方案可能是QVariantMap
-
@Amfasis - 我看到了,但并没有真正做到我想要的。我想要一种通用的方法来从对象及其派生类中引用“值”。我想调用 Base.getValue() 并返回一个 bool、int 等。我意识到这对 Qt 来说有点复杂,因为我无法模板化 QObject 类。但是,我认为我选择了一种 QVariant 类型的解决方案来包装我的价值观。
-
但不允许有与 C++ 不同的返回值 (stackoverflow.com/questions/8967303/…)。但是,IIRC 您可以覆盖 Q_PROPERTY,您可以在其中指定不同的 READ 函数(例如,
BASE:READ valueInt和BaseBool:READ valueBool -
我看不到合适的用例。 C++ 是类型化的,在什么情况下你会在基类指针上使用
getValue函数,而返回类型取决于派生类?
标签: c++ qt inheritance signals-slots