Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qobject_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// Copyright (C) 2013 Olivier Goffart <ogoffart@woboq.com>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#ifndef QOBJECT_P_H
6#define QOBJECT_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists for the convenience
13// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header
14// file may change from version to version without notice, or even be removed.
15//
16// We mean it.
17//
18
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"
29
30#include <string>
31
33
34#ifdef Q_MOC_RUN
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)
40#endif
41
42class QVariant;
43class QThreadData;
44class QObjectConnectionListVector;
46
47/* for Qt Test */
49{
50 typedef void (*BeginCallback)(QObject *caller, int signal_or_method_index, void **argv);
51 typedef void (*EndCallback)(QObject *caller, int signal_or_method_index);
56};
57void Q_CORE_EXPORT qt_register_signal_spy_callbacks(QSignalSpyCallbackSet *callback_set);
58
60
62
63class Q_CORE_EXPORT QAbstractDeclarativeData
64{
65public:
66 static void (*destroyed)(QAbstractDeclarativeData *, QObject *);
67 static void (*signalEmitted)(QAbstractDeclarativeData *, QObject *, int, void **);
68 static int (*receivers)(QAbstractDeclarativeData *, const QObject *, int);
69 static bool (*isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int);
70 static void (*setWidgetParent)(QObject *, QObject *); // Used by the QML engine to specify parents for widgets. Set by QtWidgets.
71};
72
73class Q_CORE_EXPORT QObjectPrivate : public QObjectData
74{
75public:
76 Q_DECLARE_PUBLIC(QObject)
77
78 struct ExtraData
79 {
81
83 {
84 parent->q_func()->setObjectName(name);
85 }
86
87 inline void nameChangedForwarder(const QString &name)
88 {
89 Q_EMIT parent->q_func()->objectNameChanged(name, QObject::QPrivateSignal());
90 }
91
100 };
101
103 {
104 if (!extraData)
105 extraData = new ExtraData(this);
106 }
107
108 typedef void (*StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **);
109 struct Connection;
110 struct ConnectionData;
111 struct ConnectionList;
113 struct SignalVector;
114 struct Sender;
115 struct TaggedSignalVector;
116
117 /*
118 This contains the all connections from and to an object.
119
120 The signalVector contains the lists of connections for a given signal. The index in the vector correspond
121 to the signal index. The signal index is the one returned by QObjectPrivate::signalIndex (not
122 QMetaObject::indexOfSignal). allsignals contains a list of special connections that will get invoked on
123 any signal emission. This is done by connecting to signal index -1.
124
125 This vector is protected by the object mutex (signalSlotLock())
126
127 Each Connection is also part of a 'senders' linked list. This one contains all connections connected
128 to a slot in this object. The mutex of the receiver must be locked when touching the pointers of this
129 linked list.
130 */
131
133 virtual ~QObjectPrivate();
134 void deleteChildren();
135 // used to clear binding storage early in ~QObject
136 void clearBindingStorage();
137
138 inline void checkForIncompatibleLibraryVersion(int version) const;
139
140 void setParent_helper(QObject *);
141 void moveToThread_helper();
142 void setThreadData_helper(QThreadData *currentData, QThreadData *targetData, QBindingStatus *status);
143 void _q_reregisterTimers(void *pointer);
144
145 bool isSender(const QObject *receiver, const char *signal) const;
146 QObjectList receiverList(const char *signal) const;
147 QObjectList senderList() const;
148
149 inline void ensureConnectionData();
150 inline void addConnection(int signal, Connection *c);
151 static inline bool removeConnection(Connection *c);
152
153 static QObjectPrivate *get(QObject *o) { return o->d_func(); }
154 static const QObjectPrivate *get(const QObject *o) { return o->d_func(); }
155
156 int signalIndex(const char *signalName, const QMetaObject **meta = nullptr) const;
157 bool isSignalConnected(uint signalIdx, bool checkDeclarative = true) const;
158 bool maybeSignalConnected(uint signalIndex) const;
159 inline bool isDeclarativeSignalConnected(uint signalIdx) const;
160
161 // To allow abitrary objects to call connectNotify()/disconnectNotify() without making
162 // the API public in QObject. This is used by QQmlNotifierEndpoint.
163 inline void connectNotify(const QMetaMethod &signal);
164 inline void disconnectNotify(const QMetaMethod &signal);
165
166 void reinitBindingStorageAfterThreadMove();
167
168 template <typename Func1, typename Func2>
169 static inline QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
170 const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot,
172
173 template <typename Func1, typename Func2>
174 static inline bool disconnect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
175 const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot);
176
177 static QMetaObject::Connection connectImpl(const QObject *sender, int signal_index,
178 const QObject *receiver, void **slot,
179 QtPrivate::QSlotObjectBase *slotObj, int type,
180 const int *types, const QMetaObject *senderMetaObject);
181 static QMetaObject::Connection connect(const QObject *sender, int signal_index, QtPrivate::QSlotObjectBase *slotObj, Qt::ConnectionType type);
182 static QMetaObject::Connection connect(const QObject *sender, int signal_index,
183 const QObject *receiver,
186 static bool disconnect(const QObject *sender, int signal_index, void **slot);
187 static bool disconnect(const QObject *sender, int signal_index, const QObject *receiver,
188 void **slot);
189
190 virtual std::string flagsForDumping() const;
191
193 getPropertyAdaptorSlotObject(const QMetaProperty &property);
194
195public:
196 mutable ExtraData *extraData; // extra data set by the user
197 // This atomic requires acquire/release semantics in a few places,
198 // e.g. QObject::moveToThread must synchronize with QCoreApplication::postEvent,
199 // because postEvent is thread-safe.
200 // However, most of the code paths involving QObject are only reentrant and
201 // not thread-safe, so synchronization should not be necessary there.
202 QAtomicPointer<QThreadData> threadData; // id of the thread that owns the object
203
206
207 union {
208 QObject *currentChildBeingDeleted; // should only be used when QObjectData::isDeletingChildren is set
209 QAbstractDeclarativeData *declarativeData; //extra data used by the declarative module
210 };
211
212 // these objects are all used to indicate that a QObject was deleted
213 // plus QPointer, which keeps a separate list
215};
216
217/*
218 Catch mixing of incompatible library versions.
219
220 Should be called from the constructor of every non-final subclass
221 of QObjectPrivate, to ensure we catch incompatibilities between
222 the intermediate base and subclasses thereof.
223*/
225{
226#if defined(QT_BUILD_INTERNAL)
227 // Don't check the version parameter in internal builds.
228 // This allows incompatible versions to be loaded, possibly for testing.
229 Q_UNUSED(version);
230#else
231 if (Q_UNLIKELY(version != QObjectPrivateVersion)) {
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,
234 (QObjectPrivateVersion >> 16) & 0xff, (QObjectPrivateVersion >> 8) & 0xff, QObjectPrivateVersion & 0xff);
235 }
236#endif
237}
238
240{
243}
244
246{
248}
249
251{
253}
254
255namespace QtPrivate {
256inline const QObject *getQObject(const QObjectPrivate *d) { return d->q_func(); }
257
258template <typename Func>
260
261template <typename ObjPrivate> inline void assertObjectType(QObjectPrivate *d)
262{
263 using Obj = std::remove_pointer_t<decltype(std::declval<ObjPrivate *>()->q_func())>;
264 assertObjectType<Obj>(d->q_ptr);
265}
266
267template<typename Func, typename Args, typename R>
269{
271#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
272 static void impl(int which, QSlotObjectBase *this_, QObject *r, void **a, bool *ret)
273#else
274 static void impl(QSlotObjectBase *this_, QObject *r, void **a, int which, bool *ret)
275#endif
276 {
277 const auto that = static_cast<QPrivateSlotObject*>(this_);
278 switch (which) {
279 case Destroy:
280 delete that;
281 break;
282 case Call:
283 FuncType::template call<Args, R>(that->object(),
284 static_cast<typename FuncType::Object *>(QObjectPrivate::get(r)), a);
285 break;
286 case Compare:
287 *ret = *reinterpret_cast<Func *>(a) == that->object();
288 break;
289 case NumOperations: ;
290 }
291 }
292public:
293 explicit QPrivateSlotObject(Func f) : QSlotObjectBase(&impl), FunctionStorage<Func>{std::move(f)} {}
294};
295} //namespace QtPrivate
296
297template <typename Func1, typename Func2>
299 const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot,
301{
302 typedef QtPrivate::FunctionPointer<Func1> SignalType;
303 typedef QtPrivate::FunctionPointer<Func2> SlotType;
305 "No Q_OBJECT in the class with the signal");
306
307 //compilation error if the arguments does not match.
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.");
314
315 const int *types = nullptr;
318
319 return QObject::connectImpl(sender, reinterpret_cast<void **>(&signal),
320 QtPrivate::getQObject(receiverPrivate), reinterpret_cast<void **>(&slot),
322 typename SignalType::ReturnType>(slot),
323 type, types, &SignalType::Object::staticMetaObject);
324}
325
326template <typename Func1, typename Func2>
328 const typename QtPrivate::FunctionPointer< Func2 >::Object* receiverPrivate, Func2 slot)
329{
330 typedef QtPrivate::FunctionPointer<Func1> SignalType;
331 typedef QtPrivate::FunctionPointer<Func2> SlotType;
333 "No Q_OBJECT in the class with the signal");
334 //compilation error if the arguments does not match.
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);
340}
341
342class QSemaphore;
343class Q_CORE_EXPORT QAbstractMetaCallEvent : public QEvent
344{
345public:
346 QAbstractMetaCallEvent(const QObject *sender, int signalId, QSemaphore *semaphore = nullptr)
347 : QEvent(MetaCall), signalId_(signalId), sender_(sender)
348#if QT_CONFIG(thread)
349 , semaphore_(semaphore)
350#endif
351 { Q_UNUSED(semaphore); }
353
354 virtual void placeMetaCall(QObject *object) = 0;
355
356 inline const QObject *sender() const { return sender_; }
357 inline int signalId() const { return signalId_; }
358
359private:
360 int signalId_;
361 const QObject *sender_;
362#if QT_CONFIG(thread)
363 QSemaphore *semaphore_;
364#endif
365};
366
367class Q_CORE_EXPORT QMetaCallEvent : public QAbstractMetaCallEvent
368{
369public:
370 // blocking queued with semaphore - args always owned by caller
371 QMetaCallEvent(ushort method_offset, ushort method_relative,
373 const QObject *sender, int signalId,
374 void **args, QSemaphore *semaphore);
376 const QObject *sender, int signalId,
377 void **args, QSemaphore *semaphore);
378
379 // queued - args allocated by event, copied by caller
380 QMetaCallEvent(ushort method_offset, ushort method_relative,
382 const QObject *sender, int signalId,
383 int nargs);
385 const QObject *sender, int signalId,
386 int nargs);
387
388 ~QMetaCallEvent() override;
389
390 template<typename ...Args>
392 int signal_index, const Args &...argv)
393 {
394 auto metaCallEvent = std::make_unique<QMetaCallEvent>(slotObj, sender,
395 signal_index, int(1 + sizeof...(Args)));
396
397 void **args = metaCallEvent->args();
398 QMetaType *types = metaCallEvent->types();
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) {
402 types[i] = metaTypes[i];
403 args[i] = types[i].create(argp[i]);
404 Q_CHECK_PTR(!i || args[i]);
405 }
406
407 return metaCallEvent.release();
408 }
409
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_; }
413 inline const QMetaType *types() const { return reinterpret_cast<QMetaType *>(d.args_ + d.nargs_); }
414 inline QMetaType *types() { return reinterpret_cast<QMetaType *>(d.args_ + d.nargs_); }
415
416 virtual void placeMetaCall(QObject *object) override;
417
418private:
419 inline void allocArgs();
420
421 struct Data {
423 void **args_;
425 int nargs_;
426 ushort method_offset_;
427 ushort method_relative_;
428 } d;
429 // preallocate enough space for three arguments
430 alignas(void *) char prealloc_[3 * sizeof(void *) + 3 * sizeof(QMetaType)];
431};
432
434{
435 Q_DISABLE_COPY_MOVE(QBoolBlocker)
436public:
437 Q_NODISCARD_CTOR explicit QBoolBlocker(bool &b, bool value = true)
438 : block(b), reset(b)
439 { block = value; }
440 inline ~QBoolBlocker() { block = reset; }
441
442private:
443 bool &block;
444 bool reset;
445};
446
447void Q_CORE_EXPORT qDeleteInEventHandler(QObject *o);
448
450struct Q_CORE_EXPORT QDynamicMetaObjectData
451{
452 virtual ~QDynamicMetaObjectData();
453 virtual void objectDestroyed(QObject *) { delete this; }
454
456 virtual int metaCall(QObject *, QMetaObject::Call, int _id, void **) = 0;
457};
458
460{
462
463 QMetaObject *toDynamicMetaObject(QObject *) override { return this; }
464 virtual int createProperty(const char *, const char *) { return -1; }
465 int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) override
466 { return metaCall(c, _id, a); }
467 virtual int metaCall(QMetaObject::Call, int _id, void **) { return _id; } // Compat overload
468};
469
471{
472 return &o->bindingStorage;
473}
475{
476 return &o->bindingStorage;
477}
479{
480 return &ed->parent->bindingStorage;
481}
483{
484 return &ed->parent->bindingStorage;
485}
486
488
489#endif // QOBJECT_P_H
static bool(* isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int)
Definition qobject_p.h:69
virtual void placeMetaCall(QObject *object)=0
const QObject * sender() const
Definition qobject_p.h:356
QAbstractMetaCallEvent(const QObject *sender, int signalId, QSemaphore *semaphore=nullptr)
Definition qobject_p.h:346
\macro Q_ATOMIC_INTnn_IS_SUPPORTED
Definition qatomic.h:123
Q_NODISCARD_CTOR QBoolBlocker(bool &b, bool value=true)
Definition qobject_p.h:437
\inmodule QtCore
Definition qcoreevent.h:45
Definition qlist.h:74
int id() const
Definition qobject_p.h:410
const void *const * args() const
Definition qobject_p.h:411
QMetaType * types()
Definition qobject_p.h:414
void ** args()
Definition qobject_p.h:412
static QMetaCallEvent * create(QtPrivate::QSlotObjectBase *slotObj, const QObject *sender, int signal_index, const Args &...argv)
Definition qobject_p.h:391
const QMetaType * types() const
Definition qobject_p.h:413
\inmodule QtCore
Definition qmetaobject.h:18
\inmodule QtCore Represents a handle to a signal-slot (or signal-functor) connection.
\inmodule QtCore
\inmodule QtCore
Definition qmetatype.h:320
uint isDeletingChildren
Definition qobject.h:67
QObject * q_ptr
Definition qobject.h:60
ExtraData * extraData
Definition qobject_p.h:196
void checkForIncompatibleLibraryVersion(int version) const
Definition qobject_p.h:224
QAtomicPointer< ConnectionData > connections
Definition qobject_p.h:205
static QObjectPrivate * get(QObject *o)
Definition qobject_p.h:153
static const QObjectPrivate * get(const QObject *o)
Definition qobject_p.h:154
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)
Definition qobject_p.h:298
void connectNotify(const QMetaMethod &signal)
Definition qobject_p.h:245
void(* StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **)
Definition qobject_p.h:108
QAtomicPointer< QtSharedPointer::ExternalRefCountData > sharedRefcount
Definition qobject_p.h:214
QObject * currentChildBeingDeleted
Definition qobject_p.h:208
void ensureExtraData()
Definition qobject_p.h:102
static bool disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot)
Definition qobject_p.h:327
void disconnectNotify(const QMetaMethod &signal)
Definition qobject_p.h:250
QAbstractDeclarativeData * declarativeData
Definition qobject_p.h:209
QAtomicPointer< QThreadData > threadData
Definition qobject_p.h:202
bool isDeclarativeSignalConnected(uint signalIdx) const
Definition qobject_p.h:239
\inmodule QtCore
Definition qobject.h:90
virtual void connectNotify(const QMetaMethod &signal)
Definition qobject.cpp:3347
virtual void disconnectNotify(const QMetaMethod &signal)
Definition qobject.cpp:3382
\inmodule QtCore
Definition qsemaphore.h:16
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
\inmodule QtCore
Definition qvariant.h:64
auto signalIndex
auto signal
Combined button and popup list for selecting options.
\macro QT_NAMESPACE
void assertObjectType(QObjectPrivate *d)
Definition qobject_p.h:261
QtPrivate::CompactStorage< Func > FunctionStorage
Definition qobject_p.h:259
const QObject * getQObject(const QObjectPrivate *d)
Definition qobject_p.h:256
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
ConnectionType
@ AutoConnection
@ BlockingQueuedConnection
@ QueuedConnection
#define Q_NODISCARD_CTOR
#define Q_UNLIKELY(x)
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]
#define qFatal
Definition qlogging.h:164
return ret
static ControlElement< T > * ptr(QWidget *widget)
@ QObjectPrivateVersion
Definition qobject_p.h:61
Q_CORE_EXPORT QBasicAtomicPointer< QSignalSpyCallbackSet > qt_signal_spy_callback_set
Definition qobject.cpp:62
void Q_CORE_EXPORT qDeleteInEventHandler(QObject *o)
Definition qobject.cpp:4876
void Q_CORE_EXPORT qt_register_signal_spy_callbacks(QSignalSpyCallbackSet *callback_set)
Definition qobject.cpp:64
const QBindingStorage * qGetBindingStorage(const QObjectPrivate *o)
Definition qobject_p.h:470
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLboolean r
[2]
GLsizei GLenum GLenum * types
GLfloat GLfloat f
GLenum type
GLuint name
GLboolean reset
const GLubyte * c
GLsizei const void * pointer
Definition qopenglext.h:384
#define QT_CONFIG(feature)
#define Q_EMIT
#define Q_UNUSED(x)
#define QT_VERSION
unsigned int uint
Definition qtypes.h:29
unsigned short ushort
Definition qtypes.h:28
const char property[13]
Definition qwizard.cpp:101
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]
QJSValueList args
virtual int createProperty(const char *, const char *)
Definition qobject_p.h:464
int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) override
Definition qobject_p.h:465
virtual int metaCall(QMetaObject::Call, int _id, void **)
Definition qobject_p.h:467
QMetaObject * toDynamicMetaObject(QObject *) override
Definition qobject_p.h:463
virtual QMetaObject * toDynamicMetaObject(QObject *)=0
virtual void objectDestroyed(QObject *)
Definition qobject_p.h:453
virtual int metaCall(QObject *, QMetaObject::Call, int _id, void **)=0
\inmodule QtCore
Q_OBJECT_COMPAT_PROPERTY(QObjectPrivate::ExtraData, QString, objectName, &QObjectPrivate::ExtraData::setObjectNameForwarder, &QObjectPrivate::ExtraData::nameChangedForwarder) QObjectPrivate *parent
void nameChangedForwarder(const QString &name)
Definition qobject_p.h:87
QList< int > runningTimers
Definition qobject_p.h:94
QList< QVariant > propertyValues
Definition qobject_p.h:93
void setObjectNameForwarder(const QString &name)
Definition qobject_p.h:82
QList< QPointer< QObject > > eventFilters
Definition qobject_p.h:95
ExtraData(QObjectPrivate *ptr)
Definition qobject_p.h:80
QList< QByteArray > propertyNames
Definition qobject_p.h:92
void(* BeginCallback)(QObject *caller, int signal_or_method_index, void **argv)
Definition qobject_p.h:50
BeginCallback slot_begin_callback
Definition qobject_p.h:53
EndCallback slot_end_callback
Definition qobject_p.h:55
EndCallback signal_end_callback
Definition qobject_p.h:54
BeginCallback signal_begin_callback
Definition qobject_p.h:52
void(* EndCallback)(QObject *caller, int signal_or_method_index)
Definition qobject_p.h:51
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