Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qobject.cpp File Reference

(99f78eb7085b19c78153bdfbff9d24a2098a2a57)

#include "qobject.h"
#include "qobject_p.h"
#include "qobject_p_p.h"
#include "qmetaobject_p.h"
#include "qabstracteventdispatcher.h"
#include "qabstracteventdispatcher_p.h"
#include "qcoreapplication.h"
#include "qcoreapplication_p.h"
#include "qcoreevent_p.h"
#include "qloggingcategory.h"
#include "qvariant.h"
#include "qmetaobject.h"
#include <qthread.h>
#include <private/qthread_p.h>
#include <qdebug.h>
#include <qvarlengtharray.h>
#include <qscopeguard.h>
#include <qset.h>
#include <private/qorderedmutexlocker_p.h>
#include <private/qhooks_p.h>
#include <qtcore_tracepoints_p.h>
#include <new>
#include <mutex>
#include <memory>
#include <ctype.h>
#include <limits.h>
#include "moc_qobject.cpp"
+ Include dependency graph for qobject.cpp:

Go to the source code of this file.

Classes

struct  SlotObjectGuard
 

Functions

QT_BEGIN_NAMESPACE Q_TRACE_POINT (qtcore, QObject_ctor, QObject *object)
 
 Q_TRACE_POINT (qtcore, QObject_dtor, QObject *object)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_entry, QObject *sender, int signalIndex)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_exit)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_slot_entry, QObject *receiver, int slotIndex)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_slot_exit)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_slot_functor_entry, void *slotObject)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_slot_functor_exit)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_declarative_signal_entry, QObject *sender, int signalIndex)
 
 Q_TRACE_POINT (qtcore, QMetaObject_activate_declarative_signal_exit)
 
void qt_register_signal_spy_callbacks (QSignalSpyCallbackSet *callback_set)
 
static int * queuedConnectionTypes (const QMetaMethod &method)
 
static int * queuedConnectionTypes (const QArgumentType *argumentTypes, int argc)
 
static QBasicMutexsignalSlotLock (const QObject *o)
 
static void computeOffsets (const QMetaObject *metaobject, int *signalOffset, int *methodOffset)
 
static bool check_parent_thread (QObject *parent, QThreadData *parentThreadData, QThreadData *currentThreadData)
 
static bool matches_objectName_non_null (QObject *obj, QAnyStringView name)
 
void qt_qFindChildren_helper (const QObject *parent, QAnyStringView name, const QMetaObject &mo, QList< void * > *list, Qt::FindChildOptions options)
 
QObjectqt_qFindChild_helper (const QObject *parent, QAnyStringView name, const QMetaObject &mo, Qt::FindChildOptions options)
 
const char * qFlagLocation (const char *method)
 
static int extract_code (const char *member)
 
static const char * extract_location (const char *member)
 
static bool check_signal_macro (const QObject *sender, const char *signal, const char *func, const char *op)
 
static bool check_method_code (int code, const QObject *object, const char *method, const char *func)
 
static Q_DECL_COLD_FUNCTION void err_method_notfound (const QObject *object, const char *method, const char *func)
 
static Q_DECL_COLD_FUNCTION void err_info_about_objects (const char *func, const QObject *sender, const QObject *receiver)
 
static void check_and_warn_compat (const QMetaObject *sender, const QMetaMethod &signal, const QMetaObject *receiver, const QMetaMethod &method)
 
static int methodIndexToSignalIndex (const QMetaObject **base, int signal_index)
 
static QByteArray formatConnectionSignature (const char *className, const QMetaMethod &method)
 
static QByteArray msgConnect (const QMetaObject *senderMo, const QByteArray &senderName, const QMetaMethod &signal, const QObject *receiver, int receiverIndex)
 
static void queued_activate (QObject *sender, int signal, QObjectPrivate::Connection *c, void **argv)
 
template<bool callbacks_enabled>
void doActivate (QObject *sender, int signal_index, void **argv)
 
static void dumpRecursive (int level, const QObject *object)
 
QDebug operator<< (QDebug dbg, const QObject *o)
 
static void connectWarning (const QObject *sender, const QMetaObject *senderMetaObject, const QObject *receiver, const char *message)
 

Variables

static int DIRECT_CONNECTION_ONLY = 0
 
Q_CORE_EXPORT QBasicAtomicPointer< QSignalSpyCallbackSetqt_signal_spy_callback_set = Q_BASIC_ATOMIC_INITIALIZER(nullptr)
 
static Q_CONSTINIT QBasicMutex _q_ObjectMutexPool [131]
 

Function Documentation

◆ check_and_warn_compat()

static void check_and_warn_compat ( const QMetaObject * sender,
const QMetaMethod & signal,
const QMetaObject * receiver,
const QMetaMethod & method )
inlinestatic

Definition at line 2873 of file qobject.cpp.

References QMetaObject::className(), QMetaMethod::Compatibility, method, qCWarning, QMetaMethod::Signal, and signal.

Referenced by QObject::connect(), and QObject::connect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ check_method_code()

static bool check_method_code ( int code,
const QObject * object,
const char * method,
const char * func )
static

Definition at line 2595 of file qobject.cpp.

References method, qCWarning, QSIGNAL_CODE, and QSLOT_CODE.

Referenced by QObject::connect(), and QObject::disconnect().

+ Here is the caller graph for this function:

◆ check_parent_thread()

static bool check_parent_thread ( QObject * parent,
QThreadData * parentThreadData,
QThreadData * currentThreadData )
static

Definition at line 901 of file qobject.cpp.

References qWarning, and QObject::thread().

Referenced by QObject::QObject().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ check_signal_macro()

static bool check_signal_macro ( const QObject * sender,
const char * signal,
const char * func,
const char * op )
static

Definition at line 2579 of file qobject.cpp.

References extract_code(), qCWarning, QSIGNAL_CODE, QSLOT_CODE, and signal.

Referenced by QObject::connect(), QObject::disconnect(), and QObject::receivers().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ computeOffsets()

static void computeOffsets ( const QMetaObject * metaobject,
int * signalOffset,
int * methodOffset )
static

For a given metaobject, compute the signal offset, and the method offset (including signals)

Definition at line 216 of file qobject.cpp.

References d, QMetaObject::d, QMetaObjectPrivate::get(), and Q_ASSERT.

Referenced by QMetaObjectPrivate::memberIndexes(), and methodIndexToSignalIndex().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ connectWarning()

static void connectWarning ( const QObject * sender,
const QMetaObject * senderMetaObject,
const QObject * receiver,
const char * message )
static

Definition at line 5221 of file qobject.cpp.

References qCWarning.

Referenced by QObjectPrivate::connectImpl().

+ Here is the caller graph for this function:

◆ doActivate()

◆ dumpRecursive()

static void dumpRecursive ( int level,
const QObject * object )
static

Definition at line 4369 of file qobject.cpp.

References child, dumpRecursive(), QObjectPrivate::get(), qDebug, and qUtf16Printable.

Referenced by QObject::dumpObjectTree(), and dumpRecursive().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ err_info_about_objects()

static Q_DECL_COLD_FUNCTION void err_info_about_objects ( const char * func,
const QObject * sender,
const QObject * receiver )
static

Definition at line 2626 of file qobject.cpp.

References QObject::objectName, and qCWarning.

Referenced by QObject::connect(), and QObject::disconnect().

+ Here is the caller graph for this function:

◆ err_method_notfound()

static Q_DECL_COLD_FUNCTION void err_method_notfound ( const QObject * object,
const char * method,
const char * func )
static

Definition at line 2608 of file qobject.cpp.

References extract_code(), extract_location(), method, qCWarning, QSIGNAL_CODE, and QSLOT_CODE.

Referenced by QObject::connect(), QObject::disconnect(), and QObject::receivers().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ extract_code()

static int extract_code ( const char * member)
static

Definition at line 2562 of file qobject.cpp.

Referenced by check_signal_macro(), QObject::connect(), QObject::disconnect(), and err_method_notfound().

+ Here is the caller graph for this function:

◆ extract_location()

static const char * extract_location ( const char * member)
static

Definition at line 2568 of file qobject.cpp.

References qstrlen().

Referenced by err_method_notfound().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ formatConnectionSignature()

static QByteArray formatConnectionSignature ( const char * className,
const QMetaMethod & method )
static

Definition at line 3758 of file qobject.cpp.

References className, method, Q_ASSERT, and QByteArrayLiteral.

Referenced by msgConnect().

+ Here is the caller graph for this function:

◆ matches_objectName_non_null()

static bool matches_objectName_non_null ( QObject * obj,
QAnyStringView name )
static

Definition at line 2127 of file qobject.cpp.

References QObjectPrivate::extraData, and QObjectPrivate::get().

Referenced by qt_qFindChild_helper(), and qt_qFindChildren_helper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ methodIndexToSignalIndex()

static int methodIndexToSignalIndex ( const QMetaObject ** base,
int signal_index )
static

Definition at line 3528 of file qobject.cpp.

References base, computeOffsets(), QObjectData::metaObject, and QMetaObjectPrivate::originalClone().

Referenced by QMetaObject::connect(), QObjectPrivate::connect(), QMetaObject::disconnect(), QObjectPrivate::disconnect(), QMetaObject::disconnectOne(), and QObjectPrivate::getPropertyAdaptorSlotObject().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ msgConnect()

static QByteArray msgConnect ( const QMetaObject * senderMo,
const QByteArray & senderName,
const QMetaMethod & signal,
const QObject * receiver,
int receiverIndex )
static

Definition at line 3776 of file qobject.cpp.

References formatConnectionSignature(), QObject::objectName, QByteArrayLiteral, signal, and QString::toLatin1().

Referenced by QMetaObject::connectSlotsByName().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator<<()

QDebug operator<< ( QDebug dbg,
const QObject * o )

Definition at line 4481 of file qobject.cpp.

References d, QObjectPrivate::get(), and o.

+ Here is the call graph for this function:

◆ Q_TRACE_POINT() [1/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_declarative_signal_entry ,
QObject * sender,
int signalIndex )

◆ Q_TRACE_POINT() [2/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_declarative_signal_exit  )

◆ Q_TRACE_POINT() [3/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_entry ,
QObject * sender,
int signalIndex )

◆ Q_TRACE_POINT() [4/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_exit  )

◆ Q_TRACE_POINT() [5/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_slot_entry ,
QObject * receiver,
int slotIndex )

◆ Q_TRACE_POINT() [6/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_slot_exit  )

◆ Q_TRACE_POINT() [7/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_slot_functor_entry ,
void * slotObject )

◆ Q_TRACE_POINT() [8/10]

Q_TRACE_POINT ( qtcore ,
QMetaObject_activate_slot_functor_exit  )

◆ Q_TRACE_POINT() [9/10]

QT_BEGIN_NAMESPACE Q_TRACE_POINT ( qtcore ,
QObject_ctor ,
QObject * object )

◆ Q_TRACE_POINT() [10/10]

Q_TRACE_POINT ( qtcore ,
QObject_dtor ,
QObject * object )

◆ qFlagLocation()

const char * qFlagLocation ( const char * method)

Definition at line 2556 of file qobject.cpp.

References method.

◆ qt_qFindChild_helper()

QObject * qt_qFindChild_helper ( const QObject * parent,
QAnyStringView name,
const QMetaObject & mo,
Qt::FindChildOptions options )

Definition at line 2174 of file qobject.cpp.

References child, QObject::children(), Qt::FindChildrenRecursively, matches_objectName_non_null(), mo, QObjectData::parent, Q_ASSERT, and qt_qFindChild_helper().

Referenced by QObject::findChild(), and qt_qFindChild_helper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qt_qFindChildren_helper()

void qt_qFindChildren_helper ( const QObject * parent,
QAnyStringView name,
const QMetaObject & mo,
QList< void * > * list,
Qt::FindChildOptions options )

Definition at line 2137 of file qobject.cpp.

References QList< T >::append(), QObject::children(), Qt::FindChildrenRecursively, list, matches_objectName_non_null(), mo, QObjectData::parent, Q_ASSERT, and qt_qFindChildren_helper().

Referenced by QObject::findChildren(), and qt_qFindChildren_helper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qt_register_signal_spy_callbacks()

void qt_register_signal_spy_callbacks ( QSignalSpyCallbackSet * callback_set)

Definition at line 63 of file qobject.cpp.

References qt_signal_spy_callback_set.

Referenced by QSignalDumper::endDump(), and QSignalDumper::startDump().

+ Here is the caller graph for this function:

◆ queued_activate()

static void queued_activate ( QObject * sender,
int signal,
QObjectPrivate::Connection * c,
void ** argv )
static

signal must be in the signal index range (see QObjectPrivate::signalIndex()).

Definition at line 3926 of file qobject.cpp.

References args, create(), DIRECT_CONNECTION_ONLY, QCoreApplication::postEvent(), queuedConnectionTypes(), QMutexLocker< Mutex >::relock(), QObjectPrivate::removeConnection(), QMetaObjectPrivate::signal(), signal, signalSlotLock(), and QMutexLocker< Mutex >::unlock().

Referenced by doActivate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ queuedConnectionTypes() [1/2]

static int * queuedConnectionTypes ( const QArgumentType * argumentTypes,
int argc )
static

Definition at line 104 of file qobject.cpp.

References i, and QArgumentType::type().

+ Here is the call graph for this function:

◆ queuedConnectionTypes() [2/2]

static int * queuedConnectionTypes ( const QMetaMethod & method)
static

Definition at line 76 of file qobject.cpp.

References QMetaType::flags(), i, QMetaType::id(), QMetaType::IsPointer, method, Q_CHECK_PTR(), qCWarning, and typeName.

Referenced by QObject::connect(), QObject::connect(), and queued_activate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ signalSlotLock()

static QBasicMutex * signalSlotLock ( const QObject * o)
inlinestatic

mutex to be locked when accessing the connection lists or the senders list

Definition at line 135 of file qobject.cpp.

References _q_ObjectMutexPool, and o.

Referenced by QObject::~QObject(), QObjectPrivate::ConnectionData::cleanOrphanedConnectionsImpl(), QMetaObjectPrivate::connect(), QObjectPrivate::connectImpl(), QMetaObjectPrivate::disconnect(), QMetaObjectPrivate::disconnectHelper(), doActivate(), QObject::dumpObjectInfo(), QObject::event(), QObject::isSignalConnected(), QObject::moveToThread(), queued_activate(), QObject::receivers(), QObjectPrivate::removeConnection(), QObject::sender(), and QObject::senderSignalIndex().

+ Here is the caller graph for this function:

Variable Documentation

◆ _q_ObjectMutexPool

Q_CONSTINIT QBasicMutex _q_ObjectMutexPool[131]
static

Definition at line 129 of file qobject.cpp.

Referenced by signalSlotLock().

◆ DIRECT_CONNECTION_ONLY

int DIRECT_CONNECTION_ONLY = 0
static

Definition at line 56 of file qobject.cpp.

Referenced by QObjectPrivate::Connection::~Connection(), and queued_activate().

◆ qt_signal_spy_callback_set