所以我开始掌握使用 C++ 编写的 Qt MOC 系统的窍门,并且一直在使用 Q_PROPERTY 宏和相关功能来对 Qt 内置类型进行自省(introspection)。但是,我似乎找不到为自定义类型定义属性的方法。
例如,在下面的代码中,我可以通过使用Q_PROPERTY和两个对应的函数,使用metaObjects对TestParent的成员变量A进行识别、读写。但是尝试注册任何自定义类型 Child 都会给我错误
QObject::QObject(const QObject&) is private within this context
我知道这是因为Child继承自QObject,但我也想在Child类中使用Qt的属性系统,这需要继承自QObject。有没有正确的实现方法?
class Child : public QObject
{
Q_OBJECT //Q_OBJECT macro required here for the MOC to use introspection
public:
explicit Child(QObject *parent = 0);
~Child();
};
class TestParent : public QObject
{
Q_OBJECT
Q_PROPERTY(int A READ A WRITE setA) //this works
Q_PROPERTY(Child child READ child WRITE setChild) //this doesn't
public:
explicit TestParent(QObject *parent = 0);
~TestParent();
void setA(int A) {_A = A;}
int A() const {return _A;}
void setChild(Child c) {_child = c;}
Child child() const {return _child;}
private:
int _A;
Child _child;
};
TestParent和Child的构造函数和析构函数都是在.cpp文件中实现的空白方法
谢谢。
最佳答案
啊,明白了。感谢退休忍者。
对于寻找这个的其他人来说,它最终是
class TestParent : public QObject
{
Q_OBJECT
Q_PROPERTY(Child * child READ child WRITE setChild)
public:
explicit TestParent(QObject *parent = 0);
~TestParent();
void setChild(Child *c) {_child = c;}
Child * child() const {return _child;}
private:
Child * _child;
};
但不要忘记初始化该指针!
关于c++ - 如何在自定义类中使用 Qt 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554449/