C++继承与 Qml 支持

C++ inheritance with Qml support

本文关键字:支持 Qml 继承 C++      更新时间:2023-10-16

我有一组类ClassAClassBClassC

class ClassA : public QObject
{
Q_PROPERTY(int propertyA READ propertyA WRITE setPropertyA NOTIFY propertyAChanged)
}
class ClassB : public QObject
{
Q_PROPERTY(int propertyB READ propertyB WRITE setPropertyB NOTIFY propertyBChanged)
}
class ClassC : public ClassA, public ClassB //problem: both classes are derived from QObject
{   
Q_PROPERTY(int propertyC READ propertyC WRITE setPropertyC NOTIFY propertyCChanged)
}

每个类都有必须在 Qml 中可访问的属性,这意味着每个类都必须实现QObject类。实现这一点的最佳方法是什么?

问候

创建一个访问这些属性的系统,方法是创建前面带有Q_INVOKABLE的方法,而不是简单地在 ClassC 中创建 ClassA 和 ClassB 的实例来使用 Q_PROPERTY,然后重新实现属性以访问这些实例

class ClassC : public QObject //problem: both classes are derived from 
{   
Q_PROPERTY(int propertyA READ propertyA WRITE setPropertyA NOTIFY propertyCChanged)
Q_PROPERTY(int propertyB READ propertyB WRITE setPropertyB NOTIFY propertyCChanged)
Q_OBJECT
public:
ClassB bObject;  
Q_INVOKABLE int propertyB() { 
return bObject.property("propertyB"); 
}
}