236 const char *className()
const;
237 const QMetaObject *superClass()
const;
239 bool inherits(
const QMetaObject *metaObject)
const noexcept;
240 QObject *cast(QObject *obj)
const
241 {
return const_cast<QObject *>(cast(
const_cast<
const QObject *>(obj))); }
242 const QObject *cast(
const QObject *obj)
const;
244#if !defined(QT_NO_TRANSLATION) || defined(Q_QDOC)
245 QString tr(
const char *s,
const char *c,
int n = -1)
const;
248 QMetaType metaType()
const;
250 const char *metaObjectHash()
const;
252 int methodOffset()
const;
253 int enumeratorOffset()
const;
254 int propertyOffset()
const;
255 int classInfoOffset()
const;
257 int constructorCount()
const;
258 int methodCount()
const;
259 int enumeratorCount()
const;
260 int propertyCount()
const;
261 int classInfoCount()
const;
263 int indexOfConstructor(
const char *constructor)
const;
264 int indexOfMethod(
const char *method)
const;
265 int indexOfSignal(
const char *signal)
const;
266 int indexOfSlot(
const char *slot)
const;
267 int indexOfEnumerator(
const char *name)
const;
269 int indexOfProperty(
const char *name)
const;
270 int indexOfClassInfo(
const char *name)
const;
272 QMetaMethod constructor(
int index)
const;
273 QMetaMethod method(
int index)
const;
274 QMetaEnum enumerator(
int index)
const;
275 QMetaProperty property(
int index)
const;
276 QMetaClassInfo classInfo(
int index)
const;
277 QMetaProperty userProperty()
const;
279 static bool checkConnectArgs(
const char *signal,
const char *method);
280 static bool checkConnectArgs(
const QMetaMethod &signal,
281 const QMetaMethod &method);
282 static QByteArray normalizedSignature(
const char *method);
283 static QByteArray normalizedType(
const char *type);
286 static Connection connect(
const QObject *sender,
int signal_index,
287 const QObject *receiver,
int method_index,
288 int type = 0,
int *types =
nullptr);
290 static bool disconnect(
const QObject *sender,
int signal_index,
291 const QObject *receiver,
int method_index);
292 static bool disconnectOne(
const QObject *sender,
int signal_index,
293 const QObject *receiver,
int method_index);
295 static void connectSlotsByName(QObject *o);
298 template<
typename PointerToMemberFunction>
299 static QMetaObject::Connection connect(
const QObject *sender,
const QMetaMethod &signal,
const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection);
300 template<
typename Functor>
301 static QMetaObject::Connection connect(
const QObject *sender,
const QMetaMethod &signal,
const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection);
303 template <
typename Func>
304 static inline Connection
305 connect(
const QObject *sender,
const QMetaMethod &signal,
306 const typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *context, Func &&slot,
307 Qt::ConnectionType type = Qt::AutoConnection);
311 static void activate(QObject *sender,
int signal_index,
void **argv);
312 static void activate(QObject *sender,
const QMetaObject *,
int local_signal_index,
void **argv);
313 static void activate(QObject *sender,
int signal_offset,
int local_signal_index,
void **argv);
314 template <
typename Ret,
typename... Args>
static inline void
315 activate(QObject *sender,
const QMetaObject *mo,
int local_signal_index, Ret *ret,
const Args &... args)
318 const_cast<
void *>(
reinterpret_cast<
const volatile void *>(ret)),
319 const_cast<
void *>(
reinterpret_cast<
const volatile void *>(std::addressof(args)))...
321 activate(sender, mo, local_signal_index, _a);
324#if QT_VERSION <= QT_VERSION_CHECK(7
, 0
, 0
)
325 static bool invokeMethod(QObject *obj,
const char *member,
327 QGenericReturnArgument ret,
328 QGenericArgument val0 = QGenericArgument(
nullptr),
329 QGenericArgument val1 = QGenericArgument(),
330 QGenericArgument val2 = QGenericArgument(),
331 QGenericArgument val3 = QGenericArgument(),
332 QGenericArgument val4 = QGenericArgument(),
333 QGenericArgument val5 = QGenericArgument(),
334 QGenericArgument val6 = QGenericArgument(),
335 QGenericArgument val7 = QGenericArgument(),
336 QGenericArgument val8 = QGenericArgument(),
337 QGenericArgument val9 = QGenericArgument());
339 static inline bool invokeMethod(QObject *obj,
const char *member,
340 QGenericReturnArgument ret,
341 QGenericArgument val0 = QGenericArgument(
nullptr),
342 QGenericArgument val1 = QGenericArgument(),
343 QGenericArgument val2 = QGenericArgument(),
344 QGenericArgument val3 = QGenericArgument(),
345 QGenericArgument val4 = QGenericArgument(),
346 QGenericArgument val5 = QGenericArgument(),
347 QGenericArgument val6 = QGenericArgument(),
348 QGenericArgument val7 = QGenericArgument(),
349 QGenericArgument val8 = QGenericArgument(),
350 QGenericArgument val9 = QGenericArgument())
352 return invokeMethod(obj, member, Qt::AutoConnection, ret, val0, val1, val2, val3,
353 val4, val5, val6, val7, val8, val9);
356 static inline bool invokeMethod(QObject *obj,
const char *member,
357 Qt::ConnectionType type,
358 QGenericArgument val0,
359 QGenericArgument val1 = QGenericArgument(),
360 QGenericArgument val2 = QGenericArgument(),
361 QGenericArgument val3 = QGenericArgument(),
362 QGenericArgument val4 = QGenericArgument(),
363 QGenericArgument val5 = QGenericArgument(),
364 QGenericArgument val6 = QGenericArgument(),
365 QGenericArgument val7 = QGenericArgument(),
366 QGenericArgument val8 = QGenericArgument(),
367 QGenericArgument val9 = QGenericArgument())
369 return invokeMethod(obj, member, type, QGenericReturnArgument(), val0, val1, val2,
370 val3, val4, val5, val6, val7, val8, val9);
373 static inline bool invokeMethod(QObject *obj,
const char *member,
374 QGenericArgument val0,
375 QGenericArgument val1 = QGenericArgument(),
376 QGenericArgument val2 = QGenericArgument(),
377 QGenericArgument val3 = QGenericArgument(),
378 QGenericArgument val4 = QGenericArgument(),
379 QGenericArgument val5 = QGenericArgument(),
380 QGenericArgument val6 = QGenericArgument(),
381 QGenericArgument val7 = QGenericArgument(),
382 QGenericArgument val8 = QGenericArgument(),
383 QGenericArgument val9 = QGenericArgument())
385 return invokeMethod(obj, member, Qt::AutoConnection, QGenericReturnArgument(), val0,
386 val1, val2, val3, val4, val5, val6, val7, val8, val9);
390 template <
typename ReturnArg,
typename... Args>
static
394 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
396 invokeMethod(QObject *obj,
const char *member, Qt::ConnectionType c,
397 QTemplatedMetaMethodReturnArgument<ReturnArg> r, Args &&... arguments)
399 auto h = QtPrivate::invokeMethodHelper(r, std::forward<Args>(arguments)...);
400 return invokeMethodImpl(obj, member, c, h.parameterCount(), h.parameters.data(),
401 h.typeNames.data(), h.metaTypes.data());
404 template <
typename... Args>
static
408 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
410 invokeMethod(QObject *obj,
const char *member, Qt::ConnectionType c, Args &&... arguments)
412 QTemplatedMetaMethodReturnArgument<
void> r = {};
413 return invokeMethod(obj, member, c, r, std::forward<Args>(arguments)...);
416 template <
typename ReturnArg,
typename... Args>
static
420 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
422 invokeMethod(QObject *obj,
const char *member, QTemplatedMetaMethodReturnArgument<ReturnArg> r,
423 Args &&... arguments)
425 return invokeMethod(obj, member, Qt::AutoConnection, r, std::forward<Args>(arguments)...);
428 template <
typename... Args>
static
432 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
434 invokeMethod(QObject *obj,
const char *member, Args &&... arguments)
436 QTemplatedMetaMethodReturnArgument<
void> r = {};
437 return invokeMethod(obj, member, Qt::AutoConnection, r, std::forward<Args>(arguments)...);
441 template<
typename Functor,
typename FunctorReturnType>
442 static bool invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret =
nullptr);
443 template<
typename Functor,
typename FunctorReturnType>
444 static bool invokeMethod(QObject *context, Functor &&function, FunctorReturnType *ret);
446 template<
typename Functor,
typename FunctorReturnType,
typename... Args>
447 static bool invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&...arguments);
448 template<
typename Functor,
typename FunctorReturnType,
typename... Args>
449 static bool invokeMethod(QObject *context, Functor &&function, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&...arguments);
450 template<
typename Functor,
typename... Args>
451 static bool invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, Args &&...arguments);
452 template<
typename Functor,
typename... Args>
453 static bool invokeMethod(QObject *context, Functor &&function, Args &&...arguments);
455 template <
typename Func>
456 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
457 QtPrivate::Invoke::AreOldStyleArgs<Func>>,
459 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
460 Func &&function, Qt::ConnectionType type,
461 typename QtPrivate::Callable<Func>::ReturnType *ret)
463 using R =
typename QtPrivate::Callable<Func>::ReturnType;
464 const auto getReturnArg = [ret]() -> QTemplatedMetaMethodReturnArgument<R> {
465 if constexpr (std::is_void_v<R>)
468 return ret ? qReturnArg(*ret) : QTemplatedMetaMethodReturnArgument<R>{};
470 return invokeMethod(object, std::forward<Func>(function), type, getReturnArg());
472 template <
typename Func>
473 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
474 QtPrivate::Invoke::AreOldStyleArgs<Func>>,
476 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
477 Func &&function,
typename QtPrivate::Callable<Func>::ReturnType *ret)
479 return invokeMethod(object, std::forward<Func>(function), Qt::AutoConnection, ret);
482 template <
typename Func,
typename... Args>
483 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
484 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
486 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
487 Func &&function, Qt::ConnectionType type,
488 QTemplatedMetaMethodReturnArgument<
489 typename QtPrivate::Callable<Func, Args...>::ReturnType>
493 return invokeMethodCallableHelper(object, std::forward<Func>(function), type, ret,
494 std::forward<Args>(args)...);
497 template <
typename Func,
typename... Args>
498 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
499 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
501 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
502 Func &&function, Qt::ConnectionType type, Args &&...args)
504 using R =
typename QtPrivate::Callable<Func, Args...>::ReturnType;
505 QTemplatedMetaMethodReturnArgument<R> r{ QtPrivate::qMetaTypeInterfaceForType<R>(),
nullptr,
507 return invokeMethod(object, std::forward<Func>(function), type, r,
508 std::forward<Args>(args)...);
511 template <
typename Func,
typename... Args>
512 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
513 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
515 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
517 QTemplatedMetaMethodReturnArgument<
518 typename QtPrivate::Callable<Func, Args...>::ReturnType>
522 return invokeMethod(object, std::forward<Func>(function), Qt::AutoConnection, ret,
523 std::forward<Args>(args)...);
526 template <
typename Func,
typename... Args>
527 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
528 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
530 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
531 Func &&function, Args &&...args)
533 using R =
typename QtPrivate::Callable<Func, Args...>::ReturnType;
534 QTemplatedMetaMethodReturnArgument<R> r{ QtPrivate::qMetaTypeInterfaceForType<R>(),
nullptr,
536 return invokeMethod(object, std::forward<Func>(function), Qt::AutoConnection, r,
537 std::forward<Args>(args)...);
542#if QT_VERSION < QT_VERSION_CHECK(7
, 0
, 0
)
543 QObject *newInstance(QGenericArgument val0,
544 QGenericArgument val1 = QGenericArgument(),
545 QGenericArgument val2 = QGenericArgument(),
546 QGenericArgument val3 = QGenericArgument(),
547 QGenericArgument val4 = QGenericArgument(),
548 QGenericArgument val5 = QGenericArgument(),
549 QGenericArgument val6 = QGenericArgument(),
550 QGenericArgument val7 = QGenericArgument(),
551 QGenericArgument val8 = QGenericArgument(),
552 QGenericArgument val9 = QGenericArgument())
const;
555 template <
typename... Args>
559 QtPrivate::Invoke::IfNotOldStyleArgs<QObject *, Args...>
561 newInstance(Args &&... arguments)
const
563 auto h = QtPrivate::invokeMethodHelper(QMetaMethodReturnArgument{}, std::forward<Args>(arguments)...);
564 return newInstanceImpl(
this, h.parameterCount(), h.parameters.data(),
565 h.typeNames.data(), h.metaTypes.data());
575 RegisterPropertyMetaType,
576 RegisterMethodArgumentMetaType,
582 int static_metacall(Call,
int,
void **)
const;
583 static int metacall(QObject *, Call,
int,
void **);
585 template <
const QMetaObject &MO>
static constexpr const QMetaObject *staticMetaObject()
591 using Getter =
const QMetaObject *(*)();
592 const QMetaObject *direct;
593 SuperData() =
default;
594 constexpr SuperData(std::nullptr_t) : direct(
nullptr) {}
595 constexpr SuperData(
const QMetaObject *mo) : direct(mo) {}
597 constexpr const QMetaObject *operator->()
const {
return operator
const QMetaObject *(); }
599#ifdef QT_NO_DATA_RELOCATION
600 Getter indirect =
nullptr;
601 constexpr SuperData(Getter g) : direct(
nullptr), indirect(g) {}
602 constexpr operator
const QMetaObject *()
const
603 {
return indirect ? indirect() : direct; }
604 template <
const QMetaObject &MO>
static constexpr SuperData link()
605 {
return SuperData(QMetaObject::staticMetaObject<MO>); }
607 constexpr SuperData(Getter g) : direct(g()) {}
608 constexpr operator
const QMetaObject *()
const
610 template <
const QMetaObject &MO>
static constexpr SuperData link()
611 {
return SuperData(QMetaObject::staticMetaObject<MO>()); }
617 const uint *stringdata;
619 typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call,
int,
void **);
620 StaticMetacallFunction static_metacall;
621 const SuperData *relatedMetaObjects;
622 const QtPrivate::QMetaTypeInterface *
const *metaTypes;
629 template <
typename Func,
typename... Args>
631 invokeMethodCallableHelper(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
632 Func &&function, Qt::ConnectionType type,
const QMetaMethodReturnArgument &ret,
635 using Callable = QtPrivate::Callable<Func, Args...>;
636 using ExpectedArguments =
typename Callable::Arguments;
637 static_assert(
sizeof...(Args) <= ExpectedArguments::size,
"Too many arguments");
638 using ActualArguments = QtPrivate::List<Args...>;
639 static_assert(QtPrivate::CheckCompatibleArguments<ActualArguments,
640 ExpectedArguments>::value,
641 "Incompatible arguments");
643 auto h = QtPrivate::invokeMethodHelper(ret, std::forward<Args>(args)...);
646 auto callable =
new QtPrivate::QCallableObject<std::decay_t<Func>, ActualArguments,
647 typename Callable::ReturnType>(std::forward<Func>(function));
648 return invokeMethodImpl(object, callable, type, h.parameterCount(), h.parameters.data(),
649 h.typeNames.data(), h.metaTypes.data());
653 static bool invokeMethodImpl(QObject *object,
const char *member, Qt::ConnectionType type,
654 qsizetype parameterCount,
const void *
const *parameters,
const char *
const *names,
655 const QtPrivate::QMetaTypeInterface *
const *metaTypes);
656 static bool invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *slotObj,
657 Qt::ConnectionType type, qsizetype parameterCount,
658 const void *
const *params,
const char *
const *names,
659 const QtPrivate::QMetaTypeInterface *
const *metaTypes);
660#if QT_CORE_REMOVED_SINCE(6
, 7
)
661 static bool invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *slot, Qt::ConnectionType type,
void *ret);
663 static QObject *newInstanceImpl(
const QMetaObject *mobj, qsizetype parameterCount,
664 const void **parameters,
const char **typeNames,
665 const QtPrivate::QMetaTypeInterface **metaTypes);
667 static QMetaObject::Connection connectImpl(
const QObject *sender,
const QMetaMethod& signal,
668 const QObject *receiver,
void **slotPtr,
669 QtPrivate::QSlotObjectBase *slot, Qt::ConnectionType type);
672 friend class QChronoTimer;