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;
134 void deleteChildren();
136 void clearBindingStorage();
138 inline void checkForIncompatibleLibraryVersion(
int version)
const;
140 void setParent_helper(
QObject *);
141 void moveToThread_helper();
143 void _q_reregisterTimers(
void *
pointer);
145 bool isSender(
const QObject *receiver,
const char *
signal)
const;
149 inline void ensureConnectionData();
151 static inline bool removeConnection(
Connection *
c);
157 bool isSignalConnected(
uint signalIdx,
bool checkDeclarative =
true)
const;
159 inline bool isDeclarativeSignalConnected(
uint signalIdx)
const;
166 void reinitBindingStorageAfterThreadMove();
168 template <
typename Func1,
typename Func2>
173 template <
typename Func1,
typename Func2>
178 const QObject *receiver,
void **slot,
190 virtual std::string flagsForDumping()
const;
226#if defined(QT_BUILD_INTERNAL)
232 qFatal(
"Cannot mix incompatible Qt library (%d.%d.%d) with this library (%d.%d.%d)",
233 (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff,
258template <
typename Func>
263 using Obj = std::remove_pointer_t<decltype(std::declval<ObjPrivate *>()->q_func())>;
264 assertObjectType<Obj>(
d->q_ptr);
267template<
typename Func,
typename Args,
typename R>
271#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
283 FuncType::template call<Args, R>(that->object(),
287 *
ret = *
reinterpret_cast<Func *
>(
a) == that->object();
297template <
typename Func1,
typename Func2>
305 "No Q_OBJECT in the class with the signal");
308 static_assert(int(SignalType::ArgumentCount) >= int(SlotType::ArgumentCount),
309 "The slot requires more arguments than the signal provides.");
311 "Signal and slot arguments are not compatible.");
313 "Return type of the slot is not compatible with the return type of the signal.");
315 const int *
types =
nullptr;
319 return QObject::connectImpl(sender,
reinterpret_cast<void **
>(&
signal),
322 typename SignalType::ReturnType>(slot),
323 type,
types, &SignalType::Object::staticMetaObject);
326template <
typename Func1,
typename Func2>
333 "No Q_OBJECT in the class with the signal");
336 "Signal and slot arguments are not compatible.");
337 return QObject::disconnectImpl(sender,
reinterpret_cast<void **
>(&
signal),
338 receiverPrivate->q_ptr,
reinterpret_cast<void **
>(&slot),
339 &SignalType::Object::staticMetaObject);
347 :
QEvent(MetaCall), signalId_(signalId), sender_(sender)
349 , semaphore_(semaphore)
373 const QObject *sender,
int signalId,
376 const QObject *sender,
int signalId,
382 const QObject *sender,
int signalId,
385 const QObject *sender,
int signalId,
390 template<
typename ...Args>
392 int signal_index,
const Args &...argv)
394 auto metaCallEvent = std::make_unique<QMetaCallEvent>(slotObj, sender,
395 signal_index,
int(1 +
sizeof...(Args)));
397 void **
args = metaCallEvent->args();
399 const std::array<
const void *,
sizeof...(Args) + 1> argp{
nullptr, std::addressof(argv)... };
400 const std::array metaTypes{ QMetaType::fromType<void>(), QMetaType::fromType<Args>()... };
401 for (
size_t i = 0;
i <
sizeof...(Args) + 1; ++
i) {
407 return metaCallEvent.release();
410 inline int id()
const {
return d.method_offset_ +
d.method_relative_; }
411 inline const void *
const*
args()
const {
return d.args_; }
412 inline void **
args() {
return d.args_; }
416 virtual void placeMetaCall(
QObject *
object)
override;
419 inline void allocArgs();
430 alignas(
void *)
char prealloc_[3 *
sizeof(
void *) + 3 *
sizeof(
QMetaType)];
466 {
return metaCall(
c, _id,
a); }
472 return &
o->bindingStorage;
476 return &
o->bindingStorage;
480 return &ed->parent->bindingStorage;
484 return &ed->parent->bindingStorage;
static bool(* isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int)
\macro Q_ATOMIC_INTnn_IS_SUPPORTED
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)
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.
void assertObjectType(QObjectPrivate *d)
QtPrivate::CompactStorage< Func > FunctionStorage
const QObject * getQObject(const QObjectPrivate *d)
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
@ 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 qDeleteInEventHandler(QObject *o)
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
GLsizei const void * pointer
#define QT_CONFIG(feature)
Q_CHECK_PTR(a=new int[80])
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
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent