8#if defined(__OBJC__) && !defined(__cplusplus)
9# warning "File built in Objective-C mode (.m), but using Qt requires Objective-C++ (.mm)"
12#include <QtCore/qnamespace.h>
13#include <QtCore/qobjectdefs_impl.h>
14#include <QtCore/qtcoreexports.h>
15#include <QtCore/qtmetamacros.h>
24#ifndef QT_NO_META_MACROS
39#ifndef QT_NO_META_MACROS
40# define QMETHOD_CODE 0
42# define QSIGNAL_CODE 2
43# define QT_PREFIX_CODE(code, a) QT_STRINGIFY(code) #a
44# define QT_STRINGIFY_METHOD(a) QT_PREFIX_CODE(QMETHOD_CODE, a)
45# define QT_STRINGIFY_SLOT(a) QT_PREFIX_CODE(QSLOT_CODE, a)
46# define QT_STRINGIFY_SIGNAL(a) QT_PREFIX_CODE(QSIGNAL_CODE, a)
48# define QLOCATION "\0" __FILE__ ":" QT_STRINGIFY(__LINE__)
49# ifndef QT_NO_KEYWORDS
50# define METHOD(a) qFlagLocation(QT_STRINGIFY_METHOD(a) QLOCATION)
52# define SLOT(a) qFlagLocation(QT_STRINGIFY_SLOT(a) QLOCATION)
53# define SIGNAL(a) qFlagLocation(QT_STRINGIFY_SIGNAL(a) QLOCATION)
55# ifndef QT_NO_KEYWORDS
56# define METHOD(a) QT_STRINGIFY_METHOD(a)
58# define SLOT(a) QT_STRINGIFY_SLOT(a)
59# define SIGNAL(a) QT_STRINGIFY_SIGNAL(a)
63#define Q_ARG(Type, data) QtPrivate::Invoke::argument<Type>(QT_STRINGIFY(Type), data)
64#define Q_RETURN_ARG(Type, data) QtPrivate::Invoke::returnArgument<Type>(QT_STRINGIFY(Type), data)
73class QMetaTypeInterface;
82#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
86 inline QGenericArgument(
const char *aName =
nullptr,
const void *aData =
nullptr)
87 : _data(aData), _name(aName) {}
88 inline void *
data()
const {
return const_cast<void *
>(_data); }
89 inline const char *
name()
const {
return _name; }
108 inline QArgument(
const char *aName,
const T &aData)
116 inline QArgument(
const char *aName, T &aData)
126 inline QReturnArgument(
const char *aName, T &aData)
154#if QT_VERSION <= QT_VERSION_CHECK(7, 0, 0)
155template <
typename... Args>
166 if constexpr ((std::is_lvalue_reference_v<T> && std::is_const_v<std::remove_reference_t<T>>) ||
167 !std::is_reference_v<T>) {
168 return { qMetaTypeInterfaceForType<T>(),
name, std::addressof(
t) };
170 return {
nullptr,
name, std::addressof(
t) };
177 return { qMetaTypeInterfaceForType<T>(),
name, std::addressof(
t) };
186 return std::addressof(
t);
190 return qMetaTypeInterfaceForType<T>();
198{
return a.metaType; }
201template <
typename T>
inline const void *
dataHelper(
const char *) =
delete;
204template <
typename T>
inline const void *
dataHelper(
const char16_t *) =
delete;
218 decltype(
params) parameters;
219 decltype(
names) typeNames;
220 decltype(
types) metaTypes;
228template <
typename T>
inline QTemplatedMetaMethodReturnArgument<T>
qReturnArg(T &
data)
244#if !defined(QT_NO_TRANSLATION) || defined(Q_QDOC)
245 QString tr(
const char *
s,
const char *
c,
int n = -1)
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;
277 static bool checkConnectArgs(
const char *
signal,
const char *
method);
285 const QObject *receiver,
int method_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 static void activate(
QObject *sender,
int signal_index,
void **argv);
297 static void activate(
QObject *sender,
const QMetaObject *,
int local_signal_index,
void **argv);
298 static void activate(
QObject *sender,
int signal_offset,
int local_signal_index,
void **argv);
300#if QT_VERSION <= QT_VERSION_CHECK(7, 0, 0)
301 static bool invokeMethod(
QObject *
obj,
const char *member,
329 val4, val5, val6, val7, val8, val9);
346 val3, val4, val5, val6, val7, val8, val9);
362 val1, val2, val3, val4, val5, val6, val7, val8, val9);
366 template <
typename ReturnArg,
typename... Args>
static
373 QTemplatedMetaMethodReturnArgument<ReturnArg>
r, Args &&...
arguments)
376 return invokeMethodImpl(
obj, member,
c,
h.parameterCount(),
h.parameters.data(),
377 h.typeNames.data(),
h.metaTypes.data());
380 template <
typename... Args>
static
388 QTemplatedMetaMethodReturnArgument<void>
r = {};
389 return invokeMethod(
obj, member,
c,
r, std::forward<Args>(
arguments)...);
392 template <
typename ReturnArg,
typename... Args>
static
404 template <
typename... Args>
static
412 QTemplatedMetaMethodReturnArgument<void>
r = {};
417 template<
typename Functor,
typename FunctorReturnType>
419 template<
typename Functor,
typename FunctorReturnType>
422 template<
typename Functor,
typename FunctorReturnType,
typename... Args>
424 template<
typename Functor,
typename FunctorReturnType,
typename... Args>
426 template<
typename Functor,
typename... Args>
428 template<
typename Functor,
typename... Args>
431 template <
typename Func>
432 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func, const char *>,
440 const auto getReturnArg = [
ret]() -> QTemplatedMetaMethodReturnArgument<R> {
441 if constexpr (std::is_void_v<R>)
446 return invokeMethod(
object, std::forward<Func>(function),
type, getReturnArg());
448 template <
typename Func>
449 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func, const char *>,
458 template <
typename Func,
typename... Args>
459 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func, const char *>,
469 return invokeMethodCallableHelper(
object, std::forward<Func>(function),
type,
ret,
470 std::forward<Args>(
args)...);
473 template <
typename Func,
typename... Args>
474 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func, const char *>,
481 QTemplatedMetaMethodReturnArgument<R>
r{ QtPrivate::qMetaTypeInterfaceForType<R>(),
nullptr,
483 return invokeMethod(
object, std::forward<Func>(function),
type,
r,
484 std::forward<Args>(
args)...);
487 template <
typename Func,
typename... Args>
488 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func, const char *>,
499 std::forward<Args>(
args)...);
502 template <
typename Func,
typename... Args>
503 static std::enable_if_t<!std::disjunction_v<std::is_convertible<Func, const char *>,
507 Func &&function, Args &&...
args)
510 QTemplatedMetaMethodReturnArgument<R>
r{ QtPrivate::qMetaTypeInterfaceForType<R>(),
nullptr,
513 std::forward<Args>(
args)...);
518#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
531 template <
typename... Args>
540 return newInstanceImpl(
this,
h.parameterCount(),
h.parameters.data(),
541 h.typeNames.data(),
h.metaTypes.data());
558 int static_metacall(Call,
int,
void **)
const;
559 static int metacall(
QObject *, Call,
int,
void **);
575#ifdef QT_NO_DATA_RELOCATION
580 template <const QMetaObject &MO>
static constexpr SuperData link()
581 {
return SuperData(QMetaObject::staticMetaObject<MO>); }
587 {
return SuperData(QMetaObject::staticMetaObject<MO>()); }
605 template <
typename Func,
typename... Args>
612 using ExpectedArguments =
typename Callable::Arguments;
613 static_assert(
sizeof...(Args) <= ExpectedArguments::size,
"Too many arguments");
617 "Incompatible arguments");
623 typename Callable::ReturnType>(std::forward<Func>(function));
624 return invokeMethodImpl(
object, callable,
type,
h.parameterCount(),
h.parameters.data(),
625 h.typeNames.data(),
h.metaTypes.data());
629 qsizetype parameterCount,
const void *
const *parameters,
const char *
const *
names,
633 const void *
const *
params,
const char *
const *
names,
635#if QT_CORE_REMOVED_SINCE(6, 7)
639 const void **parameters,
const char **typeNames,
651 bool isConnected_helper()
const;
658 operator bool()
const;
663 operator RestrictedBool()
const {
return d_ptr && isConnected_helper() ? &Connection::d_ptr :
nullptr; }
667 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(
Connection)
677{
return d.superdata; }
682 template <
typename T>
685 enum {
Value =
sizeof(
test(&Object::qt_metacall)) ==
sizeof(
int) };
\macro QMetaMethodArgument Q_ARG(Type, const Type &value)
\macro QT_RESTRICTED_CAST_FROM_ASCII
QList< QVariant > arguments
Combined button and popup list for selecting options.
QTemplatedMetaMethodReturnArgument< T > returnArgument(const char *name, T &t)
const QMetaTypeInterface * metaTypeHelper(const T &)
const char * typenameHelper(const T &)
std::disjunction< std::is_base_of< QGenericArgument, Args >... > AreOldStyleArgs
std::enable_if_t<!AreOldStyleArgs< Args... >::value, T > IfNotOldStyleArgs
const void * dataHelper(const T &t)
auto invokeMethodHelper(QMetaMethodReturnArgument r, const Args &... arguments)
constexpr const QMetaTypeInterface * qMetaTypeInterfaceForType()
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
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 * method
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
void swap(QMetaObject::Connection &lhs, QMetaObject::Connection &rhs) noexcept
void qReturnArg(const T &&)=delete
Q_CORE_EXPORT const char * qFlagLocation(const char *method)
GLboolean GLboolean GLboolean GLboolean a
[7]
GLsizei GLenum GLenum * types
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLfloat GLfloat GLfloat GLfloat h
constexpr void qt_ptr_swap(T *&lhs, T *&rhs) noexcept
const char className[16]
[1]
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)
obj metaObject() -> className()
myObject disconnect()
[26]
static char test(int(T::*)(QMetaObject::Call, int, void **))
static int test(int(Object::*)(QMetaObject::Call, int, void **))