22#include "private/qobject_p.h"
23#include "private/qmetaobject_p.h"
24#include "private/qthread_p.h"
27#include "private/qmetaobject_moc_p.h"
130 return reinterpret_cast<const char *
>(
mo->d.stringdata) +
offset;
138 const char *
string =
reinterpret_cast<const char *
>(
mo->d.stringdata) +
offset;
178 {
return static_cast<const QMetaMethodPrivate *
>(
q); }
182 inline int typesDataIndex()
const;
183 inline const char *rawReturnTypeName()
const;
186 inline int parametersDataIndex()
const;
187 inline uint parameterTypeInfo(
int index)
const;
196 inline int ownMethodIndex()
const;
197 inline int ownConstructorMethodIndex()
const;
201 QMetaMethodPrivate();
207#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
233 const char *typeNames[] = {
235 val0.name(), val1.name(), val2.name(), val3.name(), val4.name(),
236 val5.name(), val6.name(), val7.name(), val8.name(), val9.name()
238 const void *parameters[] = {
240 val0.data(), val1.data(), val2.data(), val3.data(), val4.data(),
241 val5.data(), val6.data(), val7.data(), val8.data(), val9.data()
246 int len = int(
qstrlen(typeNames[paramCount]));
251 return newInstanceImpl(
this, paramCount, parameters, typeNames,
nullptr);
271 const void **parameters,
const char **typeNames,
274 if (!mobj->
inherits(&QObject::staticMetaObject)) {
275 qWarning(
"QMetaObject::newInstance: type %s does not inherit QObject", mobj->
className());
285 QObject *returnValue =
nullptr;
286 QMetaType returnValueMetaType = QMetaType::fromType<decltype(returnValue)>();
287 parameters[0] = &returnValue;
288 typeNames[0] = returnValueMetaType.
name();
290 metaTypes[0] = returnValueMetaType.
iface();
297 QMetaMethod m = QMetaMethod::fromRelativeConstructorIndex(mobj,
i);
298 if (
m.parameterCount() != (paramCount - 1))
302 QMetaMethodPrivate::InvokeFailReason
r =
304 parameters, typeNames, metaTypes);
305 if (
r == QMetaMethodPrivate::InvokeFailReason::None)
331 if (
object->d_ptr->metaObject)
332 return object->d_ptr->metaObject->metaCall(
object, cl, idx, argv);
334 return object->qt_metacall(cl, idx, argv);
375 }
while ((
m =
m->d.superdata));
395 return (
obj &&
obj->metaObject()->inherits(
this)) ?
obj :
nullptr;
398#ifndef QT_NO_TRANSLATION
417 if (
d->revision < 10) {
434#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
440 :
d->propertyCount +
d->enumeratorCount;
445 auto iface = this->d.metaTypes[
offset];
446 if (iface && QtMetaTypePrivate::isInterfaceFor<void>(iface))
639 if (
priv->parameterCount() != argc)
646 int paramsIndex =
data.parameters() + 1;
647 for (
int i = 0;
i < argc; ++
i) {
648 uint typeInfo =
m->d.data[paramsIndex +
i];
671 for (
const QMetaObject *currentObject = baseObject; currentObject; currentObject = currentObject->
superClass()) {
675 auto candidate = QMetaMethod::fromRelativeMethodIndex(currentObject,
i);
676 if (
name == candidate.name())
689template<
int MethodType>
701 for (;
i >=
end; --
i) {
702 auto data = QMetaMethod::fromRelativeMethodIndex(
m,
i);
746 i = QMetaObjectPrivate::indexOfMethodRelative<0>(&
m,
name,
types.size(),
types.constData());
748 i +=
m->methodOffset();
759 if (!
types.isEmpty())
766 else if (*
str ==
'>')
771 argType.
replace(
"QVector<",
"QList<");
782 const char *lparens = strchr(signature,
'(');
785 const char *rparens = strrchr(lparens + 1,
')');
786 if (!rparens || *(rparens+1))
788 int nameLength = lparens - signature;
813 i +=
m->methodOffset();
827 int i = indexOfMethodRelative<MethodSignal>(baseObject,
name, argc,
types);
830 if (
i >= 0 &&
m &&
m->d.superdata) {
833 QMetaMethod conflictMethod =
m->d.superdata->method(conflict);
834 qWarning(
"QMetaObject::indexOfSignal: signal %s from %s redefined in %s",
860 i +=
m->methodOffset();
869 return indexOfMethodRelative<MethodSlot>(
m,
name, argc,
types);
877 i +=
m->methodOffset();
886 i +=
m->methodOffset();
893 int i = indexOfMethodRelative<0>(&
m,
name, argc,
types);
895 i +=
m->methodOffset();
936 for (
m =
m->d.superdata;
m;
m =
m->d.superdata)
954 return QMetaMethodPrivate::get(&
m)->ownMethodIndex() +
signalOffset(
m.mobj);
968 if (signal_index < 0)
972 int i = signal_index;
974 if (i < 0 && m->
d.superdata)
975 return signal(
m->d.superdata, signal_index);
979 return QMetaMethod::fromRelativeMethodIndex(
m,
i);
992 if (signalArgc < methodArgc)
994 for (
int i = 0;
i < methodArgc; ++
i) {
995 if (signalTypes[
i] != methodTypes[
i])
1008 const QMetaMethodPrivate *
method)
1012 if (
signal->parameterCount() <
method->parameterCount())
1016 for (
int i = 0;
i <
method->parameterCount(); ++
i) {
1017 uint sourceTypeInfo =
signal->parameterTypeInfo(
i);
1018 uint targetTypeInfo =
method->parameterTypeInfo(
i);
1023 if (sourceName != targetName)
1028 if (sourceType != targetType)
1040 if (self->d.relatedMetaObjects) {
1042 const auto *
e = self->d.relatedMetaObjects;
1051 self = self->d.superdata;
1067 for (
int i = 0;
i <
d->enumeratorCount; ++
i) {
1070 if (strcmp(
name, prop) == 0) {
1071 i +=
m->enumeratorOffset();
1081 for (
int i = 0;
i <
d->enumeratorCount; ++
i) {
1084 if (strcmp(
name, prop) == 0) {
1085 i +=
m->enumeratorOffset();
1105 for (
int i = 0;
i <
d->propertyCount; ++
i) {
1106 const QMetaProperty::Data
data = QMetaProperty::getMetaPropertyData(
m,
i);
1108 if (strcmp(
name, prop) == 0) {
1109 i +=
m->propertyOffset();
1136 while (
m &&
i < 0) {
1139 i +=
m->classInfoOffset();
1158 return QMetaMethod::fromRelativeConstructorIndex(
this,
i);
1175 return QMetaMethod::fromRelativeMethodIndex(
this,
i);
1269 while (*
s1++ !=
'(') { }
1270 while (*
s2++ !=
'(') { }
1275 if (s2len < s1len && strncmp(
s1,
s2,s2len-1)==0 &&
s1[s2len-1]==
',')
1291 QMetaMethodPrivate::get(&
signal),
1292 QMetaMethodPrivate::get(&
method));
1306 || ((*
s ==
':') && (last ==
'<')))) {
1316 while (*
d && (templdepth
1317 || (*
d !=
',' && *
d !=
')'))) {
1326 if (strncmp(
"void)",
t,
d -
t + 1) != 0)
1327 result += normalizeTypeInternal(
t,
d);
1370 char *
d = stackbuf.
data();
1378 if (argdepth == 1) {
1395 const char *
const *
names,
1403 candidateMessage +=
" " +
method.methodSignature() +
'\n';
1405 if (!candidateMessage.
isEmpty()) {
1406 candidateMessage.
prepend(
"\nCandidates are:\n");
1407 candidateMessage.
chop(1);
1418 if (paramCount != 1)
1421 qWarning(
"QMetaObject::invokeMethod: No such method %s::%.*s(%.*s)%.*s",
1424 int(candidateMessage.
size()), candidateMessage.
constData());
1560 const char *typeNames[] = {
ret.name(), val0.name(), val1.name(), val2.name(), val3.name(),
1561 val4.name(), val5.name(), val6.name(), val7.name(), val8.name(),
1563 const void *parameters[] = {
ret.data(), val0.data(), val1.data(), val2.data(), val3.data(),
1564 val4.data(), val5.data(), val6.data(), val7.data(), val8.data(),
1568 if (
qstrlen(typeNames[paramCount]) <= 0)
1571 return invokeMethodImpl(
obj, member,
type, paramCount, parameters, typeNames,
nullptr);
1575 qsizetype paramCount,
const void *
const *parameters,
1576 const char *
const *typeNames,
1595 QMetaMethod m = QMetaMethod::fromRelativeMethodIndex(meta,
i);
1596 if (
m.parameterCount() != (paramCount - 1))
1602 QMetaMethodPrivate::InvokeFailReason
r =
1603 QMetaMethodPrivate::invokeImpl(
m,
obj,
type, paramCount, parameters,
1604 typeNames, metaTypes);
1606 return r == QMetaMethodPrivate::InvokeFailReason::None;
1623 bool receiverInSameThread =
false;
1630 void *argv[] = {
ret };
1633 slot->
call(
object, argv);
1636 qWarning(
"QMetaObject::invokeMethod: Unable to invoke methods with return values in "
1637 "queued connections");
1643#if QT_CONFIG(thread)
1644 if (receiverInSameThread)
1645 qWarning(
"QMetaObject::invokeMethod: Dead lock detected");
1652 qWarning(
"QMetaObject::invokeMethod: Unknown connection type");
1861 for (
int i = 0;
i < argTypes.
size(); ++
i) {
1876int QMetaMethodPrivate::typesDataIndex()
const
1879 return data.parameters();
1882const char *QMetaMethodPrivate::rawReturnTypeName()
const
1885 uint typeInfo = mobj->
d.
data[typesDataIndex()];
1892int QMetaMethodPrivate::returnType()
const
1894 return parameterType(-1);
1897int QMetaMethodPrivate::parameterCount()
const
1907 uint typeInfo = parameterTypeInfo(
index);
1918#define ASSERT_NOT_PRIMITIVE_TYPE(TYPE, METATYPEID, NAME) \
1919 Q_ASSERT(typeInfo != QMetaType::TYPE);
1921#undef ASSERT_NOT_PRIMITIVE_TYPE
1922 Q_ASSERT(typeInfo != QMetaType::QObjectStar);
1926 Q_ASSERT(typeInfo != QMetaType::Void);
1927 Q_ASSERT(typeInfo != QMetaType::VoidStar);
1932int QMetaMethodPrivate::parametersDataIndex()
const
1935 return typesDataIndex() + 1;
1938uint QMetaMethodPrivate::parameterTypeInfo(
int index)
const
1941 return mobj->
d.
data[parametersDataIndex() +
index];
1951 checkMethodMetaTypeConsistency(iface, -1);
1961 for (
int i = 0;
i < parameterCount(); ++
i)
1962 checkMethodMetaTypeConsistency(ifaces[
i],
i);
1967int QMetaMethodPrivate::parameterType(
int index)
const
1973void QMetaMethodPrivate::getParameterTypes(
int *
types)
const
1976 int dataIndex = parametersDataIndex();
1977 int argc = parameterCount();
1978 for (
int i = 0;
i < argc; ++
i) {
1986 int paramsIndex = parametersDataIndex();
1993 int argc = parameterCount();
1996 int paramsIndex = parametersDataIndex();
1997 for (
int i = 0;
i < argc; ++
i)
2005 int argc = parameterCount();
2008 int namesIndex = parametersDataIndex() + argc;
2009 for (
int i = 0;
i < argc; ++
i)
2020int QMetaMethodPrivate::ownMethodIndex()
const
2026int QMetaMethodPrivate::ownConstructorMethodIndex()
const
2029 Q_ASSERT(methodType() == Constructor);
2045 return QMetaMethodPrivate::get(
this)->signature();
2059 return QMetaMethodPrivate::get(
this)->name();
2105 return QMetaMethodPrivate::get(
this)->parameterCount();
2137 auto priv = QMetaMethodPrivate::get(
this);
2162 QMetaMethodPrivate::get(
this)->getParameterTypes(
types);
2174 return QMetaMethodPrivate::get(
this)->parameterTypes();
2188 return QMetaMethodPrivate::get(
this)->parameterTypeName(
index);
2200 return QMetaMethodPrivate::get(
this)->parameterNames();
2213 return QMetaMethodPrivate::get(
this)->rawReturnTypeName();
2245 return QMetaMethodPrivate::get(
this)->tag().constData();
2256 return data.flags() >> 4;
2268 return QMetaMethodPrivate::get(
this)->ownMethodIndex() +
mobj->
methodOffset();
2280 return QMetaMethodPrivate::get(
this)->ownMethodIndex();
2296 + QMetaMethodPrivate::get(
this)->ownMethodIndex();
2375 return QMetaMethod::fromRelativeMethodIndex(
m,
i);
2505 if (!
object || !
mobj)
2509 const char *typeNames[] = {
2538 if (
qstrlen(typeNames[paramCount]) <= 0)
2541 return invokeImpl(*
this,
object, connectionType, paramCount,
param, typeNames,
nullptr);
2545 qsizetype paramCount,
const void *
const *parameters,
2546 const char *
const *typeNames,
2549 if (!
target || !self.mobj)
2551 QMetaMethodPrivate::InvokeFailReason
r =
2552 QMetaMethodPrivate::invokeImpl(self,
target, connectionType, paramCount, parameters,
2553 typeNames, metaTypes);
2554 if (
Q_LIKELY(
r == QMetaMethodPrivate::InvokeFailReason::None))
2557 if (
int(
r) >=
int(QMetaMethodPrivate::InvokeFailReason::FormalParameterMismatch)) {
2558 int n = int(
r) - int(QMetaMethodPrivate::InvokeFailReason::FormalParameterMismatch);
2559 qWarning(
"QMetaMethod::invoke: cannot convert formal parameter %d from %s in call to %s::%s",
2560 n, typeNames[
n + 1] ? typeNames[
n + 1] : metaTypes[
n + 1]->
name,
2563 if (
r == QMetaMethodPrivate::InvokeFailReason::TooFewArguments) {
2564 qWarning(
"QMetaMethod::invoke: too few arguments (%d) in call to %s::%s",
2572 qsizetype paramCount,
const void *
const *parameters,
2573 const char *
const *typeNames,
2577 auto priv = QMetaMethodPrivate::get(&self);
2579 auto methodMetaTypes =
priv->parameterMetaTypeInterfaces();
2580 auto param =
const_cast<void **
>(parameters);
2583 Q_ASSERT(self.methodType() == Constructor ||
object);
2585 priv->mobj->cast(
object));
2589 Q_ASSERT(MetaTypesAreOptional || metaTypes);
2592 return InvokeFailReason::TooFewArguments;
2595 auto checkTypesAreCompatible = [=](
int idx) {
2596 uint typeInfo =
priv->parameterTypeInfo(idx - 1);
2601 if (MetaTypesAreOptional && !metaTypes)
2603 return int(typeInfo) == metaTypes[idx]->
typeId;
2607 if ((MetaTypesAreOptional && !metaTypes) || !metaTypes[idx]) {
2609 if (methodTypeName == userTypeName)
2619 if (
QMetaType(methodMetaTypes[idx - 1]) == userType)
2624 if (methodMetaTypes[idx - 1])
2629 return resolved == userType;
2633 for (
qsizetype i = 0; metaTypes &&
i < paramCount; ++
i)
2638 if (!checkTypesAreCompatible(
i))
2639 return InvokeFailReason(
int(InvokeFailReason::FormalParameterMismatch) +
i - 1);
2643 if (self.methodType() == Constructor) {
2645 qWarning(
"QMetaMethod::invokeMethod: cannot call constructor %s on object %p",
2646 self.methodSignature().
constData(),
object);
2647 return InvokeFailReason::ConstructorCallOnObject;
2650 if (!parameters[0]) {
2651 qWarning(
"QMetaMethod::invokeMethod: constructor call to %s must assign a return type",
2653 return InvokeFailReason::ConstructorCallWithoutResult;
2656 if (!MetaTypesAreOptional || metaTypes) {
2657 if (metaTypes[0]->typeId != QMetaType::QObjectStar) {
2658 qWarning(
"QMetaMethod::invokeMethod: cannot convert QObject* to %s on constructor call %s",
2660 return InvokeFailReason::ReturnTypeMismatch;
2664 int idx =
priv->ownConstructorMethodIndex();
2666 return InvokeFailReason::ConstructorCallFailed;
2671 if (parameters[0]) {
2672 if (!checkTypesAreCompatible(0)) {
2673 const char *retType = typeNames[0] ? typeNames[0] : metaTypes[0]->
name;
2674 qWarning(
"QMetaMethod::invokeMethod: return type mismatch for method %s::%s:"
2675 " cannot convert from %s to %s during invocation",
2677 priv->rawReturnTypeName(), retType);
2678 return InvokeFailReason::ReturnTypeMismatch;
2683 QThread *objectThread =
nullptr;
2684 auto receiverInSameThread = [&]() {
2685 if (!currentThreadId) {
2687 objectThread =
object->
thread();
2700#if !QT_CONFIG(thread)
2707 int idx_relative =
priv->ownMethodIndex();
2708 int idx_offset =
priv->mobj->methodOffset();
2715 return InvokeFailReason::CallViaVirtualFailed;
2717 if (parameters[0]) {
2718 qWarning(
"QMetaMethod::invoke: Unable to invoke methods with return values in "
2719 "queued connections");
2720 return InvokeFailReason::CouldNotQueueParameter;
2723 auto event = std::make_unique<QMetaCallEvent>(idx_offset, idx_relative, callFunction,
nullptr, -1, paramCount);
2725 void **
args =
event->args();
2728 for (
int i = 1;
i < paramCount; ++
i) {
2730 if (!
types[
i].iface() && (!MetaTypesAreOptional || metaTypes))
2734 if (!
types[
i].iface() && typeNames[
i])
2737 qWarning(
"QMetaMethod::invoke: Unable to handle unregistered datatype '%s'",
2744 for (
int i = 1;
i < paramCount; ++
i)
2749#if QT_CONFIG(thread)
2750 if (receiverInSameThread()) {
2751 qWarning(
"QMetaMethod::invoke: Dead lock detected in BlockingQueuedConnection: "
2753 return InvokeFailReason::DeadLockDetected;
2758 nullptr, -1,
param, &semaphore));
2881 if (!gadget || !
mobj)
2885 if (returnValue.data()) {
2887 if (
qstrcmp(returnValue.name(), retType) != 0) {
2900 const char *typeNames[] = {
2915 if (
qstrlen(typeNames[paramCount]) <= 0)
2918 if (paramCount <= QMetaMethodPrivate::get(
this)->
parameterCount())
2935 int idx_relative = QMetaMethodPrivate::get(
this)->ownMethodIndex();
3062#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
3063 if (
p->revision < 12)
3079 return data.keyCount();
3171 const char *qualified_key =
key;
3173 while (
s >
key && *
s !=
':')
3175 if (
s >
key && *(
s - 1) ==
':') {
3179 for (
int i = 0;
i < int(
data.keyCount()); ++
i) {
3185 return mobj->
d.
data[
data.data() + 2 *
i + 1];
3203 for (
int i = 0;
i < int(
data.keyCount()); ++
i)
3212 std::optional<QLatin1StringView> scope;
3215 const auto scopePos = qualifiedKey.lastIndexOf(
"::"_L1);
3217 return R{std::nullopt, qualifiedKey};
3219 return R{qualifiedKey.first(scopePos), qualifiedKey.sliced(scopePos + 2)};
3240 for (
int i =
data.keyCount() - 1;
i >= 0; --
i) {
3244 return std::nullopt;
3250 const auto parsed =
parse_scope(untrimmed.trimmed());
3251 if (parsed.scope && *parsed.scope !=
className())
3253 if (
auto thisValue = lookup(parsed.key))
3254 value |= *thisValue;
3265template <
typename String,
typename Container,
typename Separator>
3266void join_reversed(String &
s,
const Container &
c, Separator
sep)
3275 for (
auto rit =
c.rbegin(), rend =
c.rend(); rit != rend; ++rit) {
3276 const auto &
e = *rit;
3280 s.append(
e.data(),
e.size());
3299 for (
int i =
data.keyCount() - 1;
i >= 0; --
i) {
3300 int k = mobj->
d.
data[
data.data() + 2 *
i + 1];
3301 if ((k != 0 && (
v & k) == k) || (k ==
value)) {
3306 join_reversed(
keys, parts,
'|');
3319int QMetaEnum::Data::index(
const QMetaObject *mobj)
const
3457int QMetaProperty::Data::index(
const QMetaObject *mobj)
const
3483 return data.index(mobj);
3544#if QT_DEPRECATED_SINCE(6, 4)
3553int QMetaProperty::registerPropertyType()
const
3571 const char *enum_name =
type;
3573 char *scope_buffer =
nullptr;
3575 const char *colon = strrchr(enum_name,
':');
3577 Q_ASSERT(colon <= enum_name || *(colon - 1) ==
':');
3578 if (colon > enum_name) {
3579 int len = colon - enum_name - 1;
3580 scope_buffer = (
char *)malloc(
len + 1);
3581 memcpy(scope_buffer, enum_name,
len);
3582 scope_buffer[
len] =
'\0';
3583 scope_name = scope_buffer;
3584 enum_name = colon + 1;
3588 if (
qstrcmp(scope_name,
"Qt") == 0)
3589 scope = &Qt::staticMetaObject;
3602QMetaProperty::Data QMetaProperty::getMetaPropertyData(
const QMetaObject *mobj,
int index)
3626 if (!
object || !mobj)
3636 void *argv[] = {
nullptr, &
value, &status };
3638 if (
t == QMetaType::fromType<QVariant>()) {
3642 argv[0] =
value.data();
3653 if (
t != QMetaType::fromType<QVariant>() && argv[0] !=
value.data())
3689 if (
t != QMetaType::fromType<QVariant>() &&
t !=
v.metaType()) {
3690 if (
isEnumType() && !
t.metaObject() &&
v.metaType().id() == QMetaType::QString) {
3699 }
else if (!
v.isValid()) {
3701 return reset(
object);
3703 }
else if (!
v.convert(
t)) {
3716 void *argv[] = {
nullptr, &
v, &status, &
flags };
3717 if (
t == QMetaType::fromType<QVariant>())
3741 void *argv[] = {
nullptr };
3776 return read(
reinterpret_cast<const QObject*
>(gadget));
3854 return data.notifyIndex() !=
uint(-1);
3884 if (!mobj ||
data.notifyIndex() == std::numeric_limits<uint>::max())
3886 uint methodIndex =
data.notifyIndex();
3888 methodIndex &= ~IsUnresolvedSignal;
3891 const int idx = QMetaObjectPrivate::indexOfMethodRelative<MethodSignal>(&
m, signalName, 0,
nullptr);
3893 return idx +
m->methodOffset();
3895 qWarning(
"QMetaProperty::notifySignal: cannot find the NOTIFY signal %s in class %s for property '%s'",
3914 return data.revision();
4198 while (QMetaMethod::fromRelativeMethodIndex(mobj, local_method_index).
data.flags() &
MethodCloned) {
4200 --local_method_index;
4202 return local_method_index;
4213 while (*signature && *signature !=
'(')
4215 while (*signature && *signature !=
')' && *++signature !=
')') {
4216 const char *
begin = signature;
4218 while (*signature && (
level > 0 || *signature !=
',') && *signature !=
')') {
4219 if (*signature ==
'<')
4221 else if (*signature ==
'>')
Type loadRelaxed() const noexcept
QByteArray & prepend(char c)
This is an overloaded member function, provided for convenience. It differs from the above function o...
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
void chop(qsizetype n)
Removes n bytes from the end of the byte array.
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
static QByteArray fromRawData(const char *data, qsizetype size)
Constructs a QByteArray that uses the first size bytes of the data array.
QByteArray & replace(qsizetype index, qsizetype len, const char *s, qsizetype alen)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
\threadsafe
static void postEvent(QObject *receiver, QEvent *event, int priority=Qt::NormalEventPriority)
\macro QMetaMethodArgument Q_ARG(Type, const Type &value)
constexpr const_iterator end() const noexcept
constexpr const_iterator begin() const noexcept
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
void reserve(qsizetype size)
void(* StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **)
QThread * thread() const
Returns the thread in which the object lives.
void acquire(int n=1)
Tries to acquire n resources guarded by the semaphore.
\macro QT_RESTRICTED_CAST_FROM_ASCII
const QChar * constData() const
Returns a pointer to the data stored in the QString.
QAtomicPointer< void > threadId
static QThreadData * get2(QThread *thread)
static Qt::HANDLE currentThreadId() noexcept Q_DECL_PURE_FUNCTION
constexpr size_type size() const noexcept
void resize(qsizetype sz)
const T * constData() const
void destroyIfLastRef() noexcept
void call(QObject *r, void **a)
Combined button and popup list for selecting options.
constexpr QBindableInterface iface
@ BlockingQueuedConnection
size_t qstrlen(const char *str)
Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2)
#define Q_DECL_COLD_FUNCTION
#define QT_WARNING_DISABLE_GCC(text)
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
static QDBusError::ErrorType get(const char *name)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLsizei const GLfloat * v
[13]
GLenum GLuint GLint level
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLsizei GLenum GLenum * types
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat s1
GLenum GLuint GLenum GLsizei length
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum const GLint * param
GLenum GLuint GLintptr offset
GLenum GLuint GLsizei propCount
GLdouble GLdouble GLdouble GLdouble q
GLint GLenum GLboolean normalized
GLsizei const GLchar *const * string
[0]
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
QScopeGuard< typename std::decay< F >::type > qScopeGuard(F &&f)
[qScopeGuard]
static constexpr QChar sep
constexpr auto qTokenize(Haystack &&h, Needle &&n, Flags...flags) noexcept(QtPrivate::Tok::is_nothrow_constructible_from< Haystack, Needle >::value) -> decltype(QtPrivate::Tok::TokenizerResult< Haystack, Needle >{std::forward< Haystack >(h), std::forward< Needle >(n), flags...})
#define QT_VERSION_CHECK(major, minor, patch)
const char className[16]
[1]
obj metaObject() -> className()