访问从另一个 QObject 类继承的 QObject 类
Posted
技术标签:
【中文标题】访问从另一个 QObject 类继承的 QObject 类【英文标题】:Access QObject inherited class from another QObject class 【发布时间】:2016-02-17 16:34:28 【问题描述】:我有以下课程,在应用程序开头设置为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
才能用数据填充它,但我无法将其返回到我的QML
文件中。
【问题讨论】:
【参考方案1】:您从getModel
返回MyClassModel
。这意味着复制对象。复制MyClassModel
涉及调用隐式生成的复制构造函数,该构造函数又调用基类的复制构造函数(QObject
)。但是QObject
的复制构造函数是private
,这就是你得到错误的原因。 Qt 的设计者很久以前就决定QObject
应该是不可复制的。
解决方法是返回一个指针:
Q_INVOKABLE MyClassModel* getModel() const return &m_myClassModel;
【讨论】:
以上是关于访问从另一个 QObject 类继承的 QObject 类的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个 QT 应用程序访问 Qt UI 的 QObject?
QObject::~QObject: 定时器不能从另一个线程停止