diff options
Diffstat (limited to 'src/corelib/kernel/qobject.cpp')
-rw-r--r-- | src/corelib/kernel/qobject.cpp | 192 |
1 files changed, 90 insertions, 102 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index e2e133ac28..a51b794604 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -109,7 +109,7 @@ static int *queuedConnectionTypes(const QList<QByteArray> &typeNames) "(Make sure '%s' is registered using qRegisterMetaType().)", typeName.constData(), typeName.constData()); delete [] types; - return 0; + return nullptr; } } types[typeNames.count()] = 0; @@ -133,7 +133,7 @@ static int *queuedConnectionTypes(const QArgumentType *argumentTypes, int argc) qWarning("QObject::connect: Cannot queue arguments of type '%s'\n" "(Make sure '%s' is registered using qRegisterMetaType().)", type.name().constData(), type.name().constData()); - return 0; + return nullptr; } } types[argc] = 0; @@ -160,13 +160,13 @@ extern "C" Q_CORE_EXPORT void qt_removeObject(QObject *) {} #endif -void (*QAbstractDeclarativeData::destroyed)(QAbstractDeclarativeData *, QObject *) = 0; -void (*QAbstractDeclarativeData::destroyed_qml1)(QAbstractDeclarativeData *, QObject *) = 0; -void (*QAbstractDeclarativeData::parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *) = 0; -void (*QAbstractDeclarativeData::signalEmitted)(QAbstractDeclarativeData *, QObject *, int, void **) = 0; -int (*QAbstractDeclarativeData::receivers)(QAbstractDeclarativeData *, const QObject *, int) = 0; -bool (*QAbstractDeclarativeData::isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int) = 0; -void (*QAbstractDeclarativeData::setWidgetParent)(QObject *, QObject *) = 0; +void (*QAbstractDeclarativeData::destroyed)(QAbstractDeclarativeData *, QObject *) = nullptr; +void (*QAbstractDeclarativeData::destroyed_qml1)(QAbstractDeclarativeData *, QObject *) = nullptr; +void (*QAbstractDeclarativeData::parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *) = nullptr; +void (*QAbstractDeclarativeData::signalEmitted)(QAbstractDeclarativeData *, QObject *, int, void **) = nullptr; +int (*QAbstractDeclarativeData::receivers)(QAbstractDeclarativeData *, const QObject *, int) = nullptr; +bool (*QAbstractDeclarativeData::isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int) = nullptr; +void (*QAbstractDeclarativeData::setWidgetParent)(QObject *, QObject *) = nullptr; /*! \fn QObjectData::QObjectData() @@ -182,7 +182,7 @@ QMetaObject *QObjectData::dynamicMetaObject() const } QObjectPrivate::QObjectPrivate(int version) - : threadData(0), currentChildBeingDeleted(0) + : threadData(nullptr), currentChildBeingDeleted(nullptr) { #ifdef QT_BUILD_INTERNAL // Don't check the version parameter in internal builds. @@ -195,8 +195,8 @@ QObjectPrivate::QObjectPrivate(int version) #endif // QObjectData initialization - q_ptr = 0; - parent = 0; // no parent yet. It is set by setParent() + q_ptr = nullptr; + parent = nullptr; // no parent yet. It is set by setParent() isWidget = false; // assume not a widget object blockSig = false; // not blocking signals wasDeleted = false; // double-delete catcher @@ -204,19 +204,20 @@ QObjectPrivate::QObjectPrivate(int version) sendChildEvents = true; // if we should send ChildAdded and ChildRemoved events to parent receiveChildEvents = true; postedEvents = 0; - extraData = 0; - metaObject = 0; + extraData = nullptr; + metaObject = nullptr; isWindow = false; deleteLaterCalled = false; } QObjectPrivate::~QObjectPrivate() { + auto thisThreadData = threadData.loadRelaxed(); if (extraData && !extraData->runningTimers.isEmpty()) { - if (Q_LIKELY(threadData->thread.loadAcquire() == QThread::currentThread())) { + if (Q_LIKELY(thisThreadData->thread.loadAcquire() == QThread::currentThread())) { // unregister pending timers - if (threadData->hasEventDispatcher()) - threadData->eventDispatcher.loadRelaxed()->unregisterTimers(q_ptr); + if (thisThreadData->hasEventDispatcher()) + thisThreadData->eventDispatcher.loadRelaxed()->unregisterTimers(q_ptr); // release the timer ids back to the pool for (int i = 0; i < extraData->runningTimers.size(); ++i) @@ -229,7 +230,7 @@ QObjectPrivate::~QObjectPrivate() if (postedEvents) QCoreApplication::removePostedEvents(q_ptr, 0); - threadData->deref(); + thisThreadData->deref(); if (metaObject) metaObject->objectDestroyed(q_ptr); @@ -906,30 +907,8 @@ static bool check_parent_thread(QObject *parent, */ QObject::QObject(QObject *parent) - : d_ptr(new QObjectPrivate) + : QObject(*new QObjectPrivate, parent) { - 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); } /*! @@ -942,12 +921,13 @@ QObject::QObject(QObjectPrivate &dd, QObject *parent) Q_D(QObject); d_ptr->q_ptr = this; - d->threadData = (parent && !parent->thread()) ? parent->d_func()->threadData : QThreadData::current(); - d->threadData->ref(); + auto threadData = (parent && !parent->thread()) ? parent->d_func()->threadData.loadRelaxed() : QThreadData::current(); + threadData->ref(); + d->threadData.storeRelaxed(threadData); if (parent) { QT_TRY { - if (!check_parent_thread(parent, parent ? parent->d_func()->threadData : 0, d->threadData)) - parent = 0; + if (!check_parent_thread(parent, parent ? parent->d_func()->threadData.loadRelaxed() : nullptr, threadData)) + parent = nullptr; if (d->isWidget) { if (parent) { d->parent = parent; @@ -958,7 +938,7 @@ QObject::QObject(QObjectPrivate &dd, QObject *parent) setParent(parent); } } QT_CATCH(...) { - d->threadData->deref(); + threadData->deref(); QT_RETHROW; } } @@ -1115,7 +1095,7 @@ QObject::~QObject() Q_TRACE(QObject_dtor, this); if (d->parent) // remove it from parent object - d->setParent_helper(0); + d->setParent_helper(nullptr); } QObjectPrivate::Connection::~Connection() @@ -1342,7 +1322,7 @@ bool QObject::event(QEvent *e) case QEvent::ThreadChange: { Q_D(QObject); - QThreadData *threadData = d->threadData; + QThreadData *threadData = d->threadData.loadRelaxed(); QAbstractEventDispatcher *eventDispatcher = threadData->eventDispatcher.loadRelaxed(); if (eventDispatcher) { QList<QAbstractEventDispatcher::TimerInfo> timers = eventDispatcher->registeredTimers(this); @@ -1509,7 +1489,7 @@ bool QObject::blockSignals(bool block) noexcept */ QThread *QObject::thread() const { - return d_func()->threadData->thread.loadAcquire(); + return d_func()->threadData.loadRelaxed()->thread.loadAcquire(); } /*! @@ -1556,12 +1536,12 @@ void QObject::moveToThread(QThread *targetThread) { Q_D(QObject); - if (d->threadData->thread.loadAcquire() == targetThread) { + if (d->threadData.loadRelaxed()->thread.loadAcquire() == targetThread) { // object is already in this thread return; } - if (d->parent != 0) { + if (d->parent != nullptr) { qWarning("QObject::moveToThread: Cannot move objects with a parent"); return; } @@ -1572,13 +1552,14 @@ void QObject::moveToThread(QThread *targetThread) QThreadData *currentData = QThreadData::current(); QThreadData *targetData = targetThread ? QThreadData::get2(targetThread) : nullptr; - if (d->threadData->thread.loadAcquire() == 0 && currentData == targetData) { + QThreadData *thisThreadData = d->threadData.loadRelaxed(); + if (!thisThreadData->thread.loadAcquire() && currentData == targetData) { // one exception to the rule: we allow moving objects with no thread affinity to the current thread currentData = d->threadData; - } else if (d->threadData != currentData) { + } else if (thisThreadData != currentData) { qWarning("QObject::moveToThread: Current thread (%p) is not the object's thread (%p).\n" "Cannot move to target thread (%p)\n", - currentData->thread.loadRelaxed(), d->threadData->thread.loadRelaxed(), targetData ? targetData->thread.loadRelaxed() : nullptr); + currentData->thread.loadRelaxed(), thisThreadData->thread.loadRelaxed(), targetData ? targetData->thread.loadRelaxed() : nullptr); #ifdef Q_OS_MAC qWarning("You might be loading two sets of Qt binaries into the same process. " @@ -1637,7 +1618,7 @@ void QObjectPrivate::setThreadData_helper(QThreadData *currentData, QThreadData if (pe.receiver == q) { // move this post event to the targetList targetData->postEventList.addEvent(pe); - const_cast<QPostEvent &>(pe).event = 0; + const_cast<QPostEvent &>(pe).event = nullptr; ++eventsMoved; } } @@ -1675,8 +1656,10 @@ void QObjectPrivate::setThreadData_helper(QThreadData *currentData, QThreadData // set new thread data targetData->ref(); - threadData->deref(); - threadData = targetData; + threadData.loadRelaxed()->deref(); + + // synchronizes with loadAcquire e.g. in QCoreApplication::postEvent + threadData.storeRelease(targetData); for (int i = 0; i < children.size(); ++i) { QObject *child = children.at(i); @@ -1688,7 +1671,7 @@ void QObjectPrivate::_q_reregisterTimers(void *pointer) { Q_Q(QObject); QList<QAbstractEventDispatcher::TimerInfo> *timerList = reinterpret_cast<QList<QAbstractEventDispatcher::TimerInfo> *>(pointer); - QAbstractEventDispatcher *eventDispatcher = threadData->eventDispatcher.loadRelaxed(); + QAbstractEventDispatcher *eventDispatcher = threadData.loadRelaxed()->eventDispatcher.loadRelaxed(); for (int i = 0; i < timerList->size(); ++i) { const QAbstractEventDispatcher::TimerInfo &ti = timerList->at(i); eventDispatcher->registerTimer(ti.timerId, ti.interval, ti.timerType, q); @@ -1746,7 +1729,9 @@ int QObject::startTimer(int interval, Qt::TimerType timerType) qWarning("QObject::startTimer: Timers cannot have negative intervals"); return 0; } - if (Q_UNLIKELY(!d->threadData->hasEventDispatcher())) { + + auto thisThreadData = d->threadData.loadRelaxed(); + if (Q_UNLIKELY(!thisThreadData->hasEventDispatcher())) { qWarning("QObject::startTimer: Timers can only be used with threads started with QThread"); return 0; } @@ -1754,7 +1739,7 @@ int QObject::startTimer(int interval, Qt::TimerType timerType) qWarning("QObject::startTimer: Timers cannot be started from another thread"); return 0; } - int timerId = d->threadData->eventDispatcher.loadRelaxed()->registerTimer(interval, timerType, this); + int timerId = thisThreadData->eventDispatcher.loadRelaxed()->registerTimer(interval, timerType, this); if (!d->extraData) d->extraData = new QObjectPrivate::ExtraData; d->extraData->runningTimers.append(timerId); @@ -1828,8 +1813,9 @@ void QObject::killTimer(int id) return; } - if (d->threadData->hasEventDispatcher()) - d->threadData->eventDispatcher.loadRelaxed()->unregisterTimer(id); + auto thisThreadData = d->threadData.loadRelaxed(); + if (thisThreadData->hasEventDispatcher()) + thisThreadData->eventDispatcher.loadRelaxed()->unregisterTimer(id); d->extraData->runningTimers.remove(at); QAbstractEventDispatcherPrivate::releaseTimerId(id); @@ -2079,7 +2065,7 @@ void qt_qFindChildren_helper(const QObject *parent, const QRegularExpression &re QObject *qt_qFindChild_helper(const QObject *parent, const QString &name, const QMetaObject &mo, Qt::FindChildOptions options) { if (!parent) - return 0; + return nullptr; const QObjectList &children = parent->children(); QObject *obj; int i; @@ -2095,7 +2081,7 @@ QObject *qt_qFindChild_helper(const QObject *parent, const QString &name, const return obj; } } - return 0; + return nullptr; } /*! @@ -2123,7 +2109,7 @@ void QObjectPrivate::deleteChildren() delete currentChildBeingDeleted; } children.clear(); - currentChildBeingDeleted = 0; + currentChildBeingDeleted = nullptr; isDeletingChildren = false; } @@ -2157,7 +2143,9 @@ void QObjectPrivate::setParent_helper(QObject *o) // cleared our entry in parentD->children. } else { const int index = parentD->children.indexOf(q); - if (parentD->isDeletingChildren) { + if (index < 0) { + // we're probably recursing into setParent() from a ChildRemoved event, don't do anything + } else if (parentD->isDeletingChildren) { parentD->children[index] = 0; } else { parentD->children.removeAt(index); @@ -2173,7 +2161,7 @@ void QObjectPrivate::setParent_helper(QObject *o) // object hierarchies are constrained to a single thread if (threadData != parent->d_func()->threadData) { qWarning("QObject::setParent: Cannot set parent, new parent is in a different thread"); - parent = 0; + parent = nullptr; return; } parent->d_func()->children.append(q); @@ -2244,7 +2232,7 @@ void QObject::installEventFilter(QObject *obj) d->extraData = new QObjectPrivate::ExtraData; // clean up unused items in the list - d->extraData->eventFilters.removeAll((QObject*)0); + d->extraData->eventFilters.removeAll((QObject*)nullptr); d->extraData->eventFilters.removeAll(obj); d->extraData->eventFilters.prepend(obj); } @@ -2268,7 +2256,7 @@ void QObject::removeEventFilter(QObject *obj) if (d->extraData) { for (int i = 0; i < d->extraData->eventFilters.count(); ++i) { if (d->extraData->eventFilters.at(i) == obj) - d->extraData->eventFilters[i] = 0; + d->extraData->eventFilters[i] = nullptr; } } } @@ -2391,7 +2379,7 @@ void QObject::deleteLater() const char *qFlagLocation(const char *method) { QThreadData *currentThreadData = QThreadData::current(false); - if (currentThreadData != 0) + if (currentThreadData != nullptr) currentThreadData->flaggedSignatures.store(method); return method; } @@ -2410,7 +2398,7 @@ static const char * extract_location(const char *member) if (*location != '\0') return location; } - return 0; + return nullptr; } static bool check_signal_macro(const QObject *sender, const char *signal, @@ -2449,7 +2437,7 @@ static void err_method_notfound(const QObject *object, case QSIGNAL_CODE: type = "signal"; break; } const char *loc = extract_location(method); - if (strchr(method,')') == 0) // common typing mistake + if (strchr(method,')') == nullptr) // common typing mistake qWarning("QObject::%s: Parentheses expected, %s %s::%s%s%s", func, type, object->metaObject()->className(), method+1, loc ? " in ": "", loc ? loc : ""); @@ -2509,7 +2497,7 @@ QObject *QObject::sender() const return cd->currentSender->sender; } - return 0; + return nullptr; } /*! @@ -2688,7 +2676,7 @@ void QMetaObjectPrivate::memberIndexes(const QObject *obj, return; const QMetaObject *m = obj->metaObject(); // Check that member is member of obj class - while (m != 0 && m != member.mobj) + while (m != nullptr && m != member.mobj) m = m->d.superdata; if (!m) return; @@ -2805,12 +2793,12 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign (signal && *signal) ? signal+1 : "(nullptr)", receiver ? receiver->metaObject()->className() : "(nullptr)", (method && *method) ? method+1 : "(nullptr)"); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } QByteArray tmp_signal_name; if (!check_signal_macro(sender, signal, "connect", "bind")) - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); const QMetaObject *smeta = sender->metaObject(); const char *signal_arg = signal; ++signal; //skip code @@ -2833,7 +2821,7 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign if (signal_index < 0) { err_method_notfound(sender, signal_arg, "connect"); err_info_about_objects("connect", sender, receiver); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } signal_index = QMetaObjectPrivate::originalClone(smeta, signal_index); signal_index += QMetaObjectPrivate::signalOffset(smeta); @@ -2842,7 +2830,7 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign int membcode = extract_code(method); if (!check_method_code(membcode, receiver, method, "connect")) - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); const char *method_arg = method; ++method; // skip code @@ -2885,7 +2873,7 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign if (method_index_relative < 0) { err_method_notfound(receiver, method_arg, "connect"); err_info_about_objects("connect", sender, receiver); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } if (!QMetaObjectPrivate::checkConnectArgs(signalTypes.size(), signalTypes.constData(), @@ -2894,13 +2882,13 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign "\n %s::%s --> %s::%s", sender->metaObject()->className(), signal, receiver->metaObject()->className(), method); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } - int *types = 0; + int *types = nullptr; if ((type == Qt::QueuedConnection) && !(types = queuedConnectionTypes(signalTypes.constData(), signalTypes.size()))) { - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } #ifndef QT_NO_DEBUG @@ -2946,7 +2934,7 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMetho signal.methodSignature().constData(), receiver ? receiver->metaObject()->className() : "(nullptr)", method.methodSignature().constData() ); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } int signal_index; @@ -2962,12 +2950,12 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMetho if (signal_index == -1) { qWarning("QObject::connect: Can't find signal %s on instance of class %s", signal.methodSignature().constData(), smeta->className()); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } if (method_index == -1) { qWarning("QObject::connect: Can't find method %s on instance of class %s", method.methodSignature().constData(), rmeta->className()); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } if (!QMetaObject::checkConnectArgs(signal.methodSignature().constData(), method.methodSignature().constData())) { @@ -2975,19 +2963,19 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMetho "\n %s::%s --> %s::%s", smeta->className(), signal.methodSignature().constData(), rmeta->className(), method.methodSignature().constData()); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } - int *types = 0; + int *types = nullptr; if ((type == Qt::QueuedConnection) && !(types = queuedConnectionTypes(signal.parameterTypes()))) - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); #ifndef QT_NO_DEBUG check_and_warn_compat(smeta, signal, rmeta, method); #endif QMetaObject::Connection handle = QMetaObject::Connection(QMetaObjectPrivate::connect( - sender, signal_index, signal.enclosingMetaObject(), receiver, method_index, 0, type, types)); + sender, signal_index, signal.enclosingMetaObject(), receiver, method_index, nullptr, type, types)); return handle; } @@ -3142,7 +3130,7 @@ bool QObject::disconnect(const QObject *sender, const char *signal, } if (!method) { - res |= QMetaObjectPrivate::disconnect(sender, signal_index, smeta, receiver, -1, 0); + res |= QMetaObjectPrivate::disconnect(sender, signal_index, smeta, receiver, -1, nullptr); } else { const QMetaObject *rmeta = receiver->metaObject(); do { @@ -3153,7 +3141,7 @@ bool QObject::disconnect(const QObject *sender, const char *signal, rmeta = rmeta->superClass(); if (method_index < 0) break; - res |= QMetaObjectPrivate::disconnect(sender, signal_index, smeta, receiver, method_index, 0); + res |= QMetaObjectPrivate::disconnect(sender, signal_index, smeta, receiver, method_index, nullptr); method_found = true; } while ((rmeta = rmeta->superClass())); } @@ -3254,7 +3242,7 @@ bool QObject::disconnect(const QObject *sender, const QMetaMethod &signal, return false; } - if (!QMetaObjectPrivate::disconnect(sender, signal_index, signal.mobj, receiver, method_index, 0)) + if (!QMetaObjectPrivate::disconnect(sender, signal_index, signal.mobj, receiver, method_index, nullptr)) return false; if (!signal.isValid()) { @@ -3393,7 +3381,7 @@ QMetaObject::Connection QMetaObject::connect(const QObject *sender, int signal_i signal_index = methodIndexToSignalIndex(&smeta, signal_index); return Connection(QMetaObjectPrivate::connect(sender, signal_index, smeta, receiver, method_index, - 0, //FIXME, we could speed this connection up by computing the relative index + nullptr, //FIXME, we could speed this connection up by computing the relative index type, types)); } @@ -3469,7 +3457,7 @@ bool QMetaObject::disconnect(const QObject *sender, int signal_index, const QMetaObject *smeta = sender->metaObject(); signal_index = methodIndexToSignalIndex(&smeta, signal_index); return QMetaObjectPrivate::disconnect(sender, signal_index, smeta, - receiver, method_index, 0); + receiver, method_index, nullptr); } /*! @@ -3485,7 +3473,7 @@ bool QMetaObject::disconnectOne(const QObject *sender, int signal_index, const QMetaObject *smeta = sender->metaObject(); signal_index = methodIndexToSignalIndex(&smeta, signal_index); return QMetaObjectPrivate::disconnect(sender, signal_index, smeta, - receiver, method_index, 0, + receiver, method_index, nullptr, QMetaObjectPrivate::DisconnectOne); } @@ -3694,7 +3682,7 @@ static void queued_activate(QObject *sender, int signal, QObjectPrivate::Connect argumentTypes = queuedConnectionTypes(m.parameterTypes()); if (!argumentTypes) // cannot queue arguments argumentTypes = &DIRECT_CONNECTION_ONLY; - if (!c->argumentTypes.testAndSetOrdered(0, argumentTypes)) { + if (!c->argumentTypes.testAndSetOrdered(nullptr, argumentTypes)) { if (argumentTypes != &DIRECT_CONNECTION_ONLY) delete [] argumentTypes; argumentTypes = c->argumentTypes.loadRelaxed(); @@ -3794,7 +3782,7 @@ void doActivate(QObject *sender, int signal_index, void **argv) list = &signalVector->at(-1); Qt::HANDLE currentThreadId = QThread::currentThreadId(); - bool inSenderThread = currentThreadId == QObjectPrivate::get(sender)->threadData->threadId.loadRelaxed(); + bool inSenderThread = currentThreadId == QObjectPrivate::get(sender)->threadData.loadRelaxed()->threadId.loadRelaxed(); // We need to check against the highest connection id to ensure that signals added // during the signal emission are not emitted in this emission. @@ -4305,10 +4293,10 @@ QObjectUserData* QObject::userData(uint id) const { Q_D(const QObject); if (!d->extraData) - return 0; + return nullptr; if ((int)id < d->extraData->userData.size()) return d->extraData->userData.at(id); - return 0; + return nullptr; } #endif // QT_NO_USERDATA @@ -4964,7 +4952,7 @@ QMetaObject::Connection QObject::connectImpl(const QObject *sender, void **signa if (!senderMetaObject) { qWarning("QObject::connect: signal not found in %s", sender->metaObject()->className()); slotObj->destroyIfLastRef(); - return QMetaObject::Connection(0); + return QMetaObject::Connection(nullptr); } signal_index += QMetaObjectPrivate::signalOffset(senderMetaObject); return QObjectPrivate::connectImpl(sender, signal_index, receiver, slot, slotObj, type, types, senderMetaObject); @@ -5190,7 +5178,7 @@ QMetaObject::Connection QObjectPrivate::connect(const QObject *sender, int signa const QMetaObject *senderMetaObject = sender->metaObject(); signal_index = methodIndexToSignalIndex(&senderMetaObject, signal_index); - return QObjectPrivate::connectImpl(sender, signal_index, sender, /*slot*/0, slotObj, type, /*types*/0, senderMetaObject); + return QObjectPrivate::connectImpl(sender, signal_index, sender, /*slot*/nullptr, slotObj, type, /*types*/nullptr, senderMetaObject); } /*! @@ -5247,7 +5235,7 @@ QMetaObject::Connection& QMetaObject::Connection::operator=(const QMetaObject::C Creates a Connection instance. */ -QMetaObject::Connection::Connection() : d_ptr(0) {} +QMetaObject::Connection::Connection() : d_ptr(nullptr) {} /*! Destructor for QMetaObject::Connection. |