访问从另一个 QObject class 继承 class 的 QObject
Access QObject inherited class from another QObject class
我有以下 class,在应用程序开始时设置在 ContextProperty
中:
class MyClass : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE MyClassModel getModel() const { return m_myClassModel; }
private:
MyClassModel m_myClassModel;
}
在其中一种方法中,MyClass
用数据(来自服务器)填充 m_myClassModel
。
MyClassModel
也继承了QObject
(因为Q_PROPERTY
宏):
class MyClassModel : public QObject
{
Q_OBJECT
// Lots of Q_PROPERTY macros
Q_PROPERTY(int stuff READ stuff WRITE setStuff NOTIFY stuffChanged)
public:
...
signals:
void stuffChanged();
...
}
然后,在QML文件中,MyClassModel
用于触发信号和更新图形元素:
Item
{
anchors.fill: parent
CustomLabel
{
Connections
{
target: myClass.myClassModel()
onStuffChanged: { console.log("signal triggered!") }
}
}
}
由于 Q_INVOKABLE MyClassModel getModel() const { return m_myClassModel; }
,我收到此错误:
error: C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'
我想我明白这个错误的原因,但我不确定我应该做什么来防止它。我需要从 MyClass
访问 MyClassModel
以便用数据填充它,但我不能 return 它进入我的 QML
文件。
您正在 return 从 getModel
发送 MyClassModel
。这意味着复制对象。复制 MyClassModel
涉及调用隐式生成的复制构造函数,后者又调用基础 class (QObject
) 的复制构造函数。但是 QObject
的复制构造函数是 private
,这就是你得到错误的原因。 Qt 的设计者很久以前就决定 QObject
应该是不可复制的。
解决方法是return一个指针:
Q_INVOKABLE MyClassModel* getModel() const { return &m_myClassModel; }
我有以下 class,在应用程序开始时设置在 ContextProperty
中:
class MyClass : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE MyClassModel getModel() const { return m_myClassModel; }
private:
MyClassModel m_myClassModel;
}
在其中一种方法中,MyClass
用数据(来自服务器)填充 m_myClassModel
。
MyClassModel
也继承了QObject
(因为Q_PROPERTY
宏):
class MyClassModel : public QObject
{
Q_OBJECT
// Lots of Q_PROPERTY macros
Q_PROPERTY(int stuff READ stuff WRITE setStuff NOTIFY stuffChanged)
public:
...
signals:
void stuffChanged();
...
}
然后,在QML文件中,MyClassModel
用于触发信号和更新图形元素:
Item
{
anchors.fill: parent
CustomLabel
{
Connections
{
target: myClass.myClassModel()
onStuffChanged: { console.log("signal triggered!") }
}
}
}
由于 Q_INVOKABLE MyClassModel getModel() const { return m_myClassModel; }
,我收到此错误:
error: C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'
我想我明白这个错误的原因,但我不确定我应该做什么来防止它。我需要从 MyClass
访问 MyClassModel
以便用数据填充它,但我不能 return 它进入我的 QML
文件。
您正在 return 从 getModel
发送 MyClassModel
。这意味着复制对象。复制 MyClassModel
涉及调用隐式生成的复制构造函数,后者又调用基础 class (QObject
) 的复制构造函数。但是 QObject
的复制构造函数是 private
,这就是你得到错误的原因。 Qt 的设计者很久以前就决定 QObject
应该是不可复制的。
解决方法是return一个指针:
Q_INVOKABLE MyClassModel* getModel() const { return &m_myClassModel; }