c++ - 如何在自定义类中使用 Qt 属性?

标签 c++ qt

所以我开始掌握使用 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/

相关文章:

c++ - 从 QGraphicsScene 上的 QGraphicsLinearLayout 中删除 QGraphics 项目

c++ - 如何从 cpp 文件修改 VS_VERSION_INFO

c++ - 我的 vsprops(属性表)文件中可以包含特定于平台的部分吗?

c++ - QT中 "Colliding Mice"中的变量step是怎么变的?

qt - wkhtmltopdf OpenLayers V3 失败

android - 没有适用于 Android 的 Qt 控件样式吗?

c++ - QTableView如何找到拖动开始的行

C++ 创建解析器

c++ - BMP文件行填充问题

c++ - "usr/include/dbus-1.0"在 Maliit 框架中交叉编译不安全