19#include <QtCore/private/qglobal_p.h>
20#include "QtCore/qcoreevent.h"
21#include <QtCore/qfunctionaltools_impl.h>
22#include "QtCore/qlist.h"
23#include "QtCore/qobject.h"
24#include "QtCore/qpointer.h"
25#include "QtCore/qvariant.h"
26#include "QtCore/qproperty.h"
27#include <QtCore/qshareddata.h>
28#include "QtCore/private/qproperty_p.h"
35#define QT_ANONYMOUS_PROPERTY(text) QT_ANONYMOUS_PROPERTY(text)
36#define QT_ANONYMOUS_PRIVATE_PROPERTY(d, text) QT_ANONYMOUS_PRIVATE_PROPERTY(d, text)
37#elif !defined QT_NO_META_MACROS
38#define QT_ANONYMOUS_PROPERTY(...) QT_ANNOTATE_CLASS(qt_anonymous_property, __VA_ARGS__)
39#define QT_ANONYMOUS_PRIVATE_PROPERTY(d, text) QT_ANNOTATE_CLASS2(qt_anonymous_private_property, d, text)
44class QObjectConnectionListVector;
84 parent->q_func()->setObjectName(
name);
89 Q_EMIT parent->q_func()->objectNameChanged(
name, QObject::QPrivateSignal());
134 void deleteChildren();
136 void clearBindingStorage();
138 inline void checkForIncompatibleLibraryVersion(
int version)
const;
140 void setParent_helper(
QObject *);
141 void moveToThread_helper();
146 inline void ensureConnectionData();
148 static inline bool removeConnection(
Connection *
c);
154 bool isSignalConnected(
uint signalIdx,
bool checkDeclarative =
true)
const;
156 inline bool isDeclarativeSignalConnected(
uint signalIdx)
const;
163 void reinitBindingStorageAfterThreadMove();
165 template <
typename Func1,
typename Func2>
170 template <
typename Func1,
typename Func2>
175 const QObject *receiver,
void **slot,
187 virtual std::string flagsForDumping()
const;
189#ifndef QT_NO_DEBUG_STREAM
190 virtual void writeToDebugStream(
QDebug &)
const;
227#if defined(QT_BUILD_INTERNAL)
233 qFatal(
"Cannot mix incompatible Qt library (%d.%d.%d) with this library (%d.%d.%d)",
234 (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff,
259template <
typename Func>
264 using Obj = std::remove_pointer_t<decltype(std::declval<ObjPrivate *>()->q_func())>;
265 assertObjectType<Obj>(
d->q_ptr);
268template<
typename Func,
typename Args,
typename R>
272#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
284 FuncType::template call<Args, R>(that->object(),
288 *
ret = *
reinterpret_cast<Func *
>(
a) == that->object();
298template <
typename Func1,
typename Func2>
306 "No Q_OBJECT in the class with the signal");
309 static_assert(int(SignalType::ArgumentCount) >= int(SlotType::ArgumentCount),
310 "The slot requires more arguments than the signal provides.");
312 "Signal and slot arguments are not compatible.");
314 "Return type of the slot is not compatible with the return type of the signal.");
316 const int *
types =
nullptr;
320 return QObject::connectImpl(sender,
reinterpret_cast<void **
>(&
signal),
323 typename SignalType::ReturnType>(slot),
324 type,
types, &SignalType::Object::staticMetaObject);
327template <
typename Func1,
typename Func2>
334 "No Q_OBJECT in the class with the signal");
337 "Signal and slot arguments are not compatible.");
338 return QObject::disconnectImpl(sender,
reinterpret_cast<void **
>(&
signal),
339 receiverPrivate->q_ptr,
reinterpret_cast<void **
>(&slot),
340 &SignalType::Object::staticMetaObject);
348 :
QEvent(MetaCall), signalId_(signalId), sender_(sender)
350 , semaphore_(semaphore)
374 const QObject *sender,
int signalId,
377 const QObject *sender,
int signalId,
380 const QObject *sender,
int signalId,
386 const QObject *sender,
int signalId,
389 const QObject *sender,
int signalId,
392 const QObject *sender,
int signalId,
397 template<
typename ...Args>
399 int signal_index,
const Args &...argv)
401 const void*
const argp[] = {
nullptr, std::addressof(argv)... };
402 const QMetaType metaTypes[] = { QMetaType::fromType<void>(), QMetaType::fromType<Args>()... };
403 constexpr auto argc =
sizeof...(Args) + 1;
404 return create_impl(slotObj, sender, signal_index, argc, argp, metaTypes);
406 template<
typename ...Args>
408 int signal_index,
const Args &...argv)
410 const void*
const argp[] = {
nullptr, std::addressof(argv)... };
411 const QMetaType metaTypes[] = { QMetaType::fromType<void>(), QMetaType::fromType<Args>()... };
412 constexpr auto argc =
sizeof...(Args) + 1;
413 return create_impl(std::move(slotObj), sender, signal_index, argc, argp, metaTypes);
416 inline int id()
const {
return d.method_offset_ +
d.method_relative_; }
417 inline const void *
const*
args()
const {
return d.args_; }
418 inline void **
args() {
return d.args_; }
422 virtual void placeMetaCall(
QObject *
object)
override;
426 int signal_index,
size_t argc,
const void *
const argp[],
432 signal_index, argc, argp, metaTypes);
435 int signal_index,
size_t argc,
const void *
const argp[],
437 inline void allocArgs();
448 alignas(
void *)
char prealloc_[3 *
sizeof(
void *) + 3 *
sizeof(
QMetaType)];
482 {
return metaCall(
c, _id,
a); }
488 return &
o->bindingStorage;
492 return &
o->bindingStorage;
496 return &ed->parent->bindingStorage;
500 return &ed->parent->bindingStorage;
static bool(* isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int)
Q_NODISCARD_CTOR QBoolBlocker(bool &b, bool value=true)
void checkForIncompatibleLibraryVersion(int version) const
QAtomicPointer< ConnectionData > connections
static QObjectPrivate * get(QObject *o)
static const QObjectPrivate * get(const QObject *o)
static QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot, Qt::ConnectionType type=Qt::AutoConnection)
void connectNotify(const QMetaMethod &signal)
void(* StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **)
QAtomicPointer< QtSharedPointer::ExternalRefCountData > sharedRefcount
QObject * currentChildBeingDeleted
static bool disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot)
void disconnectNotify(const QMetaMethod &signal)
QExplicitlySharedDataPointer< ConnectionData > ConnectionDataPointer
QAbstractDeclarativeData * declarativeData
QAtomicPointer< QThreadData > threadData
bool isDeclarativeSignalConnected(uint signalIdx) const
virtual void connectNotify(const QMetaMethod &signal)
virtual void disconnectNotify(const QMetaMethod &signal)
\macro QT_RESTRICTED_CAST_FROM_ASCII
QPrivateSlotObject(Func f)
Combined button and popup list for selecting options.
typename std::conditional_t< std::conjunction_v< std::is_empty< Object >, std::negation< std::is_final< Object > > >, detail::StorageEmptyBaseClassOptimization< Object, Tag >, detail::StorageByValue< Object, Tag > > CompactStorage
void assertObjectType(QObjectPrivate *d)
QtPrivate::CompactStorage< Func > FunctionStorage
const QObject * getQObject(const QObjectPrivate *d)
std::unique_ptr< QSlotObjectBase, QSlotObjectBase::Deleter > SlotObjUniquePtr
@ BlockingQueuedConnection
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
static ControlElement< T > * ptr(QWidget *widget)
Q_CORE_EXPORT QBasicAtomicPointer< QSignalSpyCallbackSet > qt_signal_spy_callback_set
void Q_CORE_EXPORT qt_register_signal_spy_callbacks(QSignalSpyCallbackSet *callback_set)
const QBindingStorage * qGetBindingStorage(const QObjectPrivate *o)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLsizei GLenum GLenum * types
#define QT_CONFIG(feature)
if(qFloatDistance(a, b)<(1<< 7))
[0]
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)
myObject disconnect()
[26]
void(* BeginCallback)(QObject *caller, int signal_or_method_index, void **argv)
BeginCallback slot_begin_callback
EndCallback slot_end_callback
EndCallback signal_end_callback
BeginCallback signal_begin_callback
void(* EndCallback)(QObject *caller, int signal_or_method_index)
static const int * types()
List_Append< List< typenameL::Car >, typenameList_Left< typenameL::Cdr, N-1 >::Value >::Value Value