我正在编写一些从QObject派生的Qt类,它看起来像:
class A : public QObject
{
Q_OBJECT
public: A() : QObject() {}
.....
}但在我看到的几个地方,QObject派生类都有一个父类,比如:
class A : public QObject
{
Q_OBJECT
public: A(QObject* parent = 0) : QObject(parent) {}
.....
}所以问题是:我是否需要父母?如果我有一个,如果我有一个默认的(0),或者我根本没有,有什么区别?
发布于 2013-05-28 14:13:13
因此,你不需要父母。
但是设置parent在垃圾收集方面有一些优势。
如果你设置了一个父对象,那么当父对象被删除时,它也会删除它的所有子对象。
以下摘自doc
QObjects在对象树中进行自我组织。当您使用另一个对象作为父对象创建子项时,该对象会自动将其自身添加到父对象的QObject ()列表中。父对象取得对象的所有权;即,它将在其析构函数中自动删除其子对象。您可以按名称查找对象,还可以使用findChild()或findChildren()选择类型。
发布于 2014-10-10 19:35:40
您应该允许设置父级
如果您希望允许将某些包含class A类型成员的对象移动到另一个线程。
(这是您无法真正阻止的。)
在这种情况下,成员A可能也需要移动。
从docs
ThreadChange QEvent::
事件在线程亲和性更改之前发送到此对象。您可以处理此事件以执行任何特殊处理。请注意,发布到此对象的任何新事件都将在targetThread中处理。
因此,如果您不允许传递父类,则包含您的类的对象的维护者将不得不覆盖event(),检查QEvent::ThreadChange并手动移动A。
从docs
ThreadChange QEvent::
事件在线程亲和性更改之前发送到此对象。您可以处理此事件以执行任何特殊处理。请注意,发布到此对象的任何新事件都将在targetThread中处理。
https://stackoverflow.com/questions/16784896
复制相似问题