1.Q_INVOKABLE explicit QObject(QObject *parent=nullptr);
QObject::QObject(QObject *parent)
: d_ptr(new QObjectPrivate)
{
Q_ASSERT_X(this != parent, Q_FUNC_INFO, "Cannot parent a QObject to itself");
Q_D(QObject);
d_ptr->q_ptr = this;
d->threadData = (parent && !parent->thread()) ? parent->d_func()->threadData : QThreadData::current();
d->threadData->ref();
if (parent) {
QT_TRY {
if (!check_parent_thread(parent, parent ? parent->d_func()->threadData : 0, d->threadData))
parent = 0;
setParent(parent);
} QT_CATCH(...) {
d->threadData->deref();
QT_RETHROW;
}
}
#if QT_VERSION < 0x60000
qt_addObject(this);
#endif
if (Q_UNLIKELY(qtHookData[QHooks::AddQObject]))
reinterpret_cast<QHooks::AddQObjectCallback>(qtHookData[QHooks::AddQObject])(this);
Q_TRACE(QObject_ctor, this);
}
如果parent不为空,则设置

解析QObject的构造函数,探讨其如何处理parent关系及线程数据,并重点剖析析构函数中删除connection的过程。了解QObject对象的创建、销毁及其在多线程环境中的行为。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



