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 int methodOffset()
const;
251 int enumeratorOffset()
const;
252 int propertyOffset()
const;
253 int classInfoOffset()
const;
255 int constructorCount()
const;
256 int methodCount()
const;
257 int enumeratorCount()
const;
258 int propertyCount()
const;
259 int classInfoCount()
const;
261 int indexOfConstructor(
const char *constructor)
const;
262 int indexOfMethod(
const char *method)
const;
263 int indexOfSignal(
const char *signal)
const;
264 int indexOfSlot(
const char *slot)
const;
265 int indexOfEnumerator(
const char *name)
const;
267 int indexOfProperty(
const char *name)
const;
268 int indexOfClassInfo(
const char *name)
const;
270 QMetaMethod constructor(
int index)
const;
271 QMetaMethod method(
int index)
const;
272 QMetaEnum enumerator(
int index)
const;
273 QMetaProperty property(
int index)
const;
274 QMetaClassInfo classInfo(
int index)
const;
275 QMetaProperty userProperty()
const;
277 static bool checkConnectArgs(
const char *signal,
const char *method);
278 static bool checkConnectArgs(
const QMetaMethod &signal,
279 const QMetaMethod &method);
280 static QByteArray normalizedSignature(
const char *method);
281 static QByteArray normalizedType(
const char *type);
284 static Connection connect(
const QObject *sender,
int signal_index,
285 const QObject *receiver,
int method_index,
286 int type = 0,
int *types =
nullptr);
288 static bool disconnect(
const QObject *sender,
int signal_index,
289 const QObject *receiver,
int method_index);
290 static bool disconnectOne(
const QObject *sender,
int signal_index,
291 const QObject *receiver,
int method_index);
293 static void connectSlotsByName(QObject *o);
296 template<
typename PointerToMemberFunction>
297 static QMetaObject::Connection connect(
const QObject *sender, PointerToMemberFunction signal,
const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection);
298 template<
typename PointerToMemberFunction,
typename Functor>
299 static QMetaObject::Connection connect(
const QObject *sender, PointerToMemberFunction signal,
const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection);
301 template <
typename Func>
302 static inline Connection
303 connect(
const QObject *sender,
const QMetaMethod &signal,
304 const typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *context, Func &&slot,
305 Qt::ConnectionType type = Qt::AutoConnection);
309 static void activate(QObject *sender,
int signal_index,
void **argv);
310 static void activate(QObject *sender,
const QMetaObject *,
int local_signal_index,
void **argv);
311 static void activate(QObject *sender,
int signal_offset,
int local_signal_index,
void **argv);
312 template <
typename Ret,
typename... Args>
static inline void
313 activate(QObject *sender,
const QMetaObject *mo,
int local_signal_index, Ret *ret,
const Args &... args)
316 const_cast<
void *>(
reinterpret_cast<
const volatile void *>(ret)),
317 const_cast<
void *>(
reinterpret_cast<
const volatile void *>(std::addressof(args)))...
319 activate(sender, mo, local_signal_index, _a);
322#if QT_VERSION <= QT_VERSION_CHECK(7
, 0
, 0
)
323 static bool invokeMethod(QObject *obj,
const char *member,
325 QGenericReturnArgument ret,
326 QGenericArgument val0 = QGenericArgument(
nullptr),
327 QGenericArgument val1 = QGenericArgument(),
328 QGenericArgument val2 = QGenericArgument(),
329 QGenericArgument val3 = QGenericArgument(),
330 QGenericArgument val4 = QGenericArgument(),
331 QGenericArgument val5 = QGenericArgument(),
332 QGenericArgument val6 = QGenericArgument(),
333 QGenericArgument val7 = QGenericArgument(),
334 QGenericArgument val8 = QGenericArgument(),
335 QGenericArgument val9 = QGenericArgument());
337 static inline bool invokeMethod(QObject *obj,
const char *member,
338 QGenericReturnArgument ret,
339 QGenericArgument val0 = QGenericArgument(
nullptr),
340 QGenericArgument val1 = QGenericArgument(),
341 QGenericArgument val2 = QGenericArgument(),
342 QGenericArgument val3 = QGenericArgument(),
343 QGenericArgument val4 = QGenericArgument(),
344 QGenericArgument val5 = QGenericArgument(),
345 QGenericArgument val6 = QGenericArgument(),
346 QGenericArgument val7 = QGenericArgument(),
347 QGenericArgument val8 = QGenericArgument(),
348 QGenericArgument val9 = QGenericArgument())
350 return invokeMethod(obj, member, Qt::AutoConnection, ret, val0, val1, val2, val3,
351 val4, val5, val6, val7, val8, val9);
354 static inline bool invokeMethod(QObject *obj,
const char *member,
355 Qt::ConnectionType type,
356 QGenericArgument val0,
357 QGenericArgument val1 = QGenericArgument(),
358 QGenericArgument val2 = QGenericArgument(),
359 QGenericArgument val3 = QGenericArgument(),
360 QGenericArgument val4 = QGenericArgument(),
361 QGenericArgument val5 = QGenericArgument(),
362 QGenericArgument val6 = QGenericArgument(),
363 QGenericArgument val7 = QGenericArgument(),
364 QGenericArgument val8 = QGenericArgument(),
365 QGenericArgument val9 = QGenericArgument())
367 return invokeMethod(obj, member, type, QGenericReturnArgument(), val0, val1, val2,
368 val3, val4, val5, val6, val7, val8, val9);
371 static inline bool invokeMethod(QObject *obj,
const char *member,
372 QGenericArgument val0,
373 QGenericArgument val1 = QGenericArgument(),
374 QGenericArgument val2 = QGenericArgument(),
375 QGenericArgument val3 = QGenericArgument(),
376 QGenericArgument val4 = QGenericArgument(),
377 QGenericArgument val5 = QGenericArgument(),
378 QGenericArgument val6 = QGenericArgument(),
379 QGenericArgument val7 = QGenericArgument(),
380 QGenericArgument val8 = QGenericArgument(),
381 QGenericArgument val9 = QGenericArgument())
383 return invokeMethod(obj, member, Qt::AutoConnection, QGenericReturnArgument(), val0,
384 val1, val2, val3, val4, val5, val6, val7, val8, val9);
388 template <
typename ReturnArg,
typename... Args>
static
392 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
394 invokeMethod(QObject *obj,
const char *member, Qt::ConnectionType c,
395 QTemplatedMetaMethodReturnArgument<ReturnArg> r, Args &&... arguments)
397 auto h = QtPrivate::invokeMethodHelper(r, std::forward<Args>(arguments)...);
398 return invokeMethodImpl(obj, member, c, h.parameterCount(), h.parameters.data(),
399 h.typeNames.data(), h.metaTypes.data());
402 template <
typename... Args>
static
406 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
408 invokeMethod(QObject *obj,
const char *member, Qt::ConnectionType c, Args &&... arguments)
410 QTemplatedMetaMethodReturnArgument<
void> r = {};
411 return invokeMethod(obj, member, c, r, std::forward<Args>(arguments)...);
414 template <
typename ReturnArg,
typename... Args>
static
418 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
420 invokeMethod(QObject *obj,
const char *member, QTemplatedMetaMethodReturnArgument<ReturnArg> r,
421 Args &&... arguments)
423 return invokeMethod(obj, member, Qt::AutoConnection, r, std::forward<Args>(arguments)...);
426 template <
typename... Args>
static
430 QtPrivate::Invoke::IfNotOldStyleArgs<
bool, Args...>
432 invokeMethod(QObject *obj,
const char *member, Args &&... arguments)
434 QTemplatedMetaMethodReturnArgument<
void> r = {};
435 return invokeMethod(obj, member, Qt::AutoConnection, r, std::forward<Args>(arguments)...);
439 template<
typename Functor,
typename FunctorReturnType>
440 static bool invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret =
nullptr);
441 template<
typename Functor,
typename FunctorReturnType>
442 static bool invokeMethod(QObject *context, Functor &&function, FunctorReturnType *ret);
444 template<
typename Functor,
typename FunctorReturnType,
typename... Args>
445 static bool invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&...arguments);
446 template<
typename Functor,
typename FunctorReturnType,
typename... Args>
447 static bool invokeMethod(QObject *context, Functor &&function, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&...arguments);
448 template<
typename Functor,
typename... Args>
449 static bool invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, Args &&...arguments);
450 template<
typename Functor,
typename... Args>
451 static bool invokeMethod(QObject *context, Functor &&function, Args &&...arguments);
453 template <
typename Func>
454 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
455 QtPrivate::Invoke::AreOldStyleArgs<Func>>,
457 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
458 Func &&function, Qt::ConnectionType type,
459 typename QtPrivate::Callable<Func>::ReturnType *ret)
461 using R =
typename QtPrivate::Callable<Func>::ReturnType;
462 const auto getReturnArg = [ret]() -> QTemplatedMetaMethodReturnArgument<R> {
463 if constexpr (std::is_void_v<R>)
466 return ret ? qReturnArg(*ret) : QTemplatedMetaMethodReturnArgument<R>{};
468 return invokeMethod(object, std::forward<Func>(function), type, getReturnArg());
470 template <
typename Func>
471 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
472 QtPrivate::Invoke::AreOldStyleArgs<Func>>,
474 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
475 Func &&function,
typename QtPrivate::Callable<Func>::ReturnType *ret)
477 return invokeMethod(object, std::forward<Func>(function), Qt::AutoConnection, ret);
480 template <
typename Func,
typename... Args>
481 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
482 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
484 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
485 Func &&function, Qt::ConnectionType type,
486 QTemplatedMetaMethodReturnArgument<
487 typename QtPrivate::Callable<Func, Args...>::ReturnType>
491 return invokeMethodCallableHelper(object, std::forward<Func>(function), type, ret,
492 std::forward<Args>(args)...);
495 template <
typename Func,
typename... Args>
496 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
497 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
499 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
500 Func &&function, Qt::ConnectionType type, Args &&...args)
502 using R =
typename QtPrivate::Callable<Func, Args...>::ReturnType;
503 QTemplatedMetaMethodReturnArgument<R> r{ QtPrivate::qMetaTypeInterfaceForType<R>(),
nullptr,
505 return invokeMethod(object, std::forward<Func>(function), type, r,
506 std::forward<Args>(args)...);
509 template <
typename Func,
typename... Args>
510 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
511 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
513 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
515 QTemplatedMetaMethodReturnArgument<
516 typename QtPrivate::Callable<Func, Args...>::ReturnType>
520 return invokeMethod(object, std::forward<Func>(function), Qt::AutoConnection, ret,
521 std::forward<Args>(args)...);
524 template <
typename Func,
typename... Args>
525 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func,
const char *>,
526 QtPrivate::Invoke::AreOldStyleArgs<Args...>>,
528 invokeMethod(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
529 Func &&function, Args &&...args)
531 using R =
typename QtPrivate::Callable<Func, Args...>::ReturnType;
532 QTemplatedMetaMethodReturnArgument<R> r{ QtPrivate::qMetaTypeInterfaceForType<R>(),
nullptr,
534 return invokeMethod(object, std::forward<Func>(function), Qt::AutoConnection, r,
535 std::forward<Args>(args)...);
540#if QT_VERSION < QT_VERSION_CHECK(7
, 0
, 0
)
541 QObject *newInstance(QGenericArgument val0,
542 QGenericArgument val1 = QGenericArgument(),
543 QGenericArgument val2 = QGenericArgument(),
544 QGenericArgument val3 = QGenericArgument(),
545 QGenericArgument val4 = QGenericArgument(),
546 QGenericArgument val5 = QGenericArgument(),
547 QGenericArgument val6 = QGenericArgument(),
548 QGenericArgument val7 = QGenericArgument(),
549 QGenericArgument val8 = QGenericArgument(),
550 QGenericArgument val9 = QGenericArgument())
const;
553 template <
typename... Args>
557 QtPrivate::Invoke::IfNotOldStyleArgs<QObject *, Args...>
559 newInstance(Args &&... arguments)
const
561 auto h = QtPrivate::invokeMethodHelper(QMetaMethodReturnArgument{}, std::forward<Args>(arguments)...);
562 return newInstanceImpl(
this, h.parameterCount(), h.parameters.data(),
563 h.typeNames.data(), h.metaTypes.data());
573 RegisterPropertyMetaType,
574 RegisterMethodArgumentMetaType,
580 int static_metacall(Call,
int,
void **)
const;
581 static int metacall(QObject *, Call,
int,
void **);
583 template <
const QMetaObject &MO>
static constexpr const QMetaObject *staticMetaObject()
589 using Getter =
const QMetaObject *(*)();
590 const QMetaObject *direct;
591 SuperData() =
default;
592 constexpr SuperData(std::nullptr_t) : direct(
nullptr) {}
593 constexpr SuperData(
const QMetaObject *mo) : direct(mo) {}
595 constexpr const QMetaObject *operator->()
const {
return operator
const QMetaObject *(); }
597#ifdef QT_NO_DATA_RELOCATION
598 Getter indirect =
nullptr;
599 constexpr SuperData(Getter g) : direct(
nullptr), indirect(g) {}
600 constexpr operator
const QMetaObject *()
const
601 {
return indirect ? indirect() : direct; }
602 template <
const QMetaObject &MO>
static constexpr SuperData link()
603 {
return SuperData(QMetaObject::staticMetaObject<MO>); }
605 constexpr SuperData(Getter g) : direct(g()) {}
606 constexpr operator
const QMetaObject *()
const
608 template <
const QMetaObject &MO>
static constexpr SuperData link()
609 {
return SuperData(QMetaObject::staticMetaObject<MO>()); }
615 const uint *stringdata;
617 typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call,
int,
void **);
618 StaticMetacallFunction static_metacall;
619 const SuperData *relatedMetaObjects;
620 const QtPrivate::QMetaTypeInterface *
const *metaTypes;
627 template <
typename Func,
typename... Args>
629 invokeMethodCallableHelper(
typename QtPrivate::ContextTypeForFunctor<Func>::ContextType *object,
630 Func &&function, Qt::ConnectionType type,
const QMetaMethodReturnArgument &ret,
633 using Callable = QtPrivate::Callable<Func, Args...>;
634 using ExpectedArguments =
typename Callable::Arguments;
635 static_assert(
sizeof...(Args) <= ExpectedArguments::size,
"Too many arguments");
636 using ActualArguments = QtPrivate::List<Args...>;
637 static_assert(QtPrivate::CheckCompatibleArguments<ActualArguments,
638 ExpectedArguments>::value,
639 "Incompatible arguments");
641 auto h = QtPrivate::invokeMethodHelper(ret, std::forward<Args>(args)...);
644 auto callable =
new QtPrivate::QCallableObject<std::decay_t<Func>, ActualArguments,
645 typename Callable::ReturnType>(std::forward<Func>(function));
646 return invokeMethodImpl(object, callable, type, h.parameterCount(), h.parameters.data(),
647 h.typeNames.data(), h.metaTypes.data());
650 static bool invokeMethodImpl(QObject *object,
const char *member, Qt::ConnectionType type,
651 qsizetype parameterCount,
const void *
const *parameters,
const char *
const *names,
652 const QtPrivate::QMetaTypeInterface *
const *metaTypes);
653 static bool invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *slotObj,
654 Qt::ConnectionType type, qsizetype parameterCount,
655 const void *
const *params,
const char *
const *names,
656 const QtPrivate::QMetaTypeInterface *
const *metaTypes);
657#if QT_CORE_REMOVED_SINCE(6
, 7
)
658 static bool invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *slot, Qt::ConnectionType type,
void *ret);
660 static QObject *newInstanceImpl(
const QMetaObject *mobj, qsizetype parameterCount,
661 const void **parameters,
const char **typeNames,
662 const QtPrivate::QMetaTypeInterface **metaTypes);
664 static QMetaObject::Connection connectImpl(
const QObject *sender,
const QMetaMethod& signal,
665 const QObject *receiver,
void **slotPtr,
666 QtPrivate::QSlotObjectBase *slot, Qt::ConnectionType type);
669 friend class QChronoTimer;