6#include <private/qqmlengine_p.h>
7#include <private/qqmlbinding_p.h>
8#include <private/qqmlvmemetaobject_p.h>
10#include <private/qmetaobject_p.h>
11#include <private/qmetaobjectbuilder_p.h>
12#include <private/qqmlpropertycachemethodarguments_p.h>
13#include <private/qqmlsignalnames_p.h>
15#include <private/qv4value_p.h>
17#include <QtCore/qdebug.h>
18#include <QtCore/QCryptographicHash>
19#include <QtCore/private/qtools_p.h>
26# pragma warning( disable : 4200 )
31#define Q_INT16_MAX 32767
47 flags.setIsWritable(
p.isWritable());
48 flags.setIsResettable(
p.isResettable());
49 flags.setIsFinal(
p.isFinal());
50 flags.setIsRequired(
p.isRequired());
51 flags.setIsBindable(
p.isBindable());
57 flags.setType(QQmlPropertyData::Flags::EnumType);
59 flags.setType(QQmlPropertyData::Flags::QObjectDerivedType);
61 flags.setType(QQmlPropertyData::Flags::QVariantType);
63 flags.setType(QQmlPropertyData::Flags::QListType);
71 Q_ASSERT(
p.revision() <= std::numeric_limits<quint16>::max());
83 m_flags.
setType(Flags::FunctionType);
89 switch (
m.methodType()) {
109 const int paramCount =
m.parameterCount();
114 m.parameterMetaType(0) == QMetaType::fromType<QQmlV4FunctionPtr>());
122 Q_ASSERT(
m.revision() <= std::numeric_limits<quint16>::max());
139 super, metaObjectRevision)->copyAndAppend(
metaObject, metaObjectRevision);
151 for (
int metaObjectOffset = 0; metaObjectOffset <
result->allowedRevisionCache.size();
152 ++metaObjectOffset) {
153 result->allowedRevisionCache[metaObjectOffset] = metaObjectRevision;
179 cache->_parent.reset(
this);
180 cache->propertyIndexCacheStart = propertyIndexCache.size() + propertyIndexCacheStart;
181 cache->methodIndexCacheStart = methodIndexCache.size() + methodIndexCacheStart;
182 cache->signalHandlerIndexCacheStart = signalHandlerIndexCache.size() + signalHandlerIndexCacheStart;
183 cache->stringCache.linkAndReserve(stringCache,
reserve);
184 cache->allowedRevisionCache = allowedRevisionCache;
185 cache->_defaultPropertyName = _defaultPropertyName;
186 cache->_listPropertyAssignBehavior = _listPropertyAssignBehavior;
193 return copy(_metaObject, 0);
197 int propertyCount,
int methodCount,
int signalCount,
int enumCount)
const
204 rv->enumCache.reserve(enumCount);
219 data.setCoreIndex(coreIndex);
220 data.setNotifyIndex(notifyIndex);
222 data.setTypeVersion(version);
224 const OverrideResult overrideResult = handleOverride(
name, &
data);
225 if (overrideResult == InvalidOverride)
228 int index = propertyIndexCache.size();
229 propertyIndexCache.append(
data);
236 const QList<QByteArray> &
names)
240 data.setCoreIndex(coreIndex);
242 data.setArguments(
nullptr);
248 const auto argumentCount =
names.size();
255 const OverrideResult overrideResult = handleOverride(
name, &
data);
256 if (overrideResult == InvalidOverride)
259 int methodIndex = methodIndexCache.size();
260 methodIndexCache.append(
data);
262 int signalHandlerIndex = signalHandlerIndexCache.size();
263 signalHandlerIndexCache.append(handler);
267 setNamedProperty(
name, methodIndex +
methodOffset(), methodIndexCache.data() + methodIndex);
268 setNamedProperty(handlerName, signalHandlerIndex +
signalOffset(),
269 signalHandlerIndexCache.data() + signalHandlerIndex);
274 const QList<QByteArray> &
names,
275 const QVector<QMetaType> ¶meterTypes)
277 int argumentCount =
names.size();
281 data.setCoreIndex(coreIndex);
283 const OverrideResult overrideResult = handleOverride(
name, &
data);
284 if (overrideResult == InvalidOverride)
289 for (
int ii = 0; ii < argumentCount; ++ii)
293 int methodIndex = methodIndexCache.size();
294 methodIndexCache.append(
data);
296 setNamedProperty(
name, methodIndex +
methodOffset(), methodIndexCache.data() + methodIndex);
304 enumCache.append(
data);
310 if (_metaObject.
isNull()) {
326 if (
index < propertyIndexCacheStart)
327 return _parent->maybeUnresolvedProperty(
index);
340 if (_parent != newParent)
341 _parent = std::move(newParent);
362 rv->append(
metaObject, typeVersion, propertyFlags, methodFlags, signalFlags);
392 if (classInfoCount) {
394 for (
int ii = 0; ii < classInfoCount; ++ii) {
395 int idx = ii + classInfoOffset;
400 }
else if (0 ==
qstrcmp(
name,
"qt_QmlJSWrapperFactoryMethod")) {
401 const char *
const factoryMethod = mci.value();
403 if (_jsFactoryMethodIndex != -1)
405 }
else if (0 ==
qstrcmp(
name,
"QML.ListPropertyAssignBehavior")) {
406 _listPropertyAssignBehavior = mci.value();
412 static const int destroyedIdx1 = QObject::staticMetaObject.indexOfSignal(
"destroyed(QObject*)");
413 static const int destroyedIdx2 = QObject::staticMetaObject.indexOfSignal(
"destroyed()");
414 static const int deleteLaterIdx = QObject::staticMetaObject.indexOfSlot(
"deleteLater()");
418 const bool preventDestruction = (
metaObject == &QObject::staticMetaObject);
425 methodIndexCache.resize(
methodCount - methodIndexCacheStart);
426 signalHandlerIndexCache.resize(
signalCount - signalHandlerIndexCacheStart);
429 if (preventDestruction && (ii == destroyedIdx1 || ii == destroyedIdx2 || ii == deleteLaterIdx))
438 const char *rawName =
m.name().constData();
439 const char *cptr = rawName;
442 utf8 |= *cptr & 0x80;
452 data->setFlags(methodFlags);
457 data->setMetaObjectOffset(allowedRevisionCache.size() - 1);
459 if (
data->isSignal()) {
460 sigdata = &signalHandlerIndexCache[signalHandlerIndex - signalHandlerIndexCacheStart];
462 sigdata->m_flags.setIsSignalHandler(
true);
467 const auto doSetNamedProperty = [&](
const auto &
methodName) {
469 if (handleOverride(
methodName,
data, (old =
it->second)) == InvalidOverride)
475 if (
data->isSignal()) {
479 data->m_flags.setIsOverridableSignal(
true);
482 ++signalHandlerIndex;
497 propertyIndexCache.resize(
propCount - propertyIndexCacheStart);
498 for (
int ii = propOffset; ii <
propCount; ++ii) {
500 if (!
p.isScriptable())
503 const char *
str =
p.name();
505 const char *cptr =
str;
507 utf8 |= *cptr & 0x80;
513 data->setFlags(propertyFlags);
515 data->setTypeVersion(typeVersion);
518 data->setMetaObjectOffset(allowedRevisionCache.size() - 1);
525 if (handleOverride(propName,
data, (old =
it->second)) == InvalidOverride)
528 setNamedProperty(propName, ii,
data);
532 if (handleOverride(propName,
data, (old =
it->second)) == InvalidOverride)
535 setNamedProperty(propName, ii,
data);
538 bool isGadget =
true;
540 if (
it == &QObject::staticMetaObject)
546 data->trySetStaticMetaCallFunction(
metaObject->
d.static_metacall, ii - propOffset);
561 propertyIndexCache.reserve(pc - propertyIndexCacheStart);
562 methodIndexCache.reserve(mc - methodIndexCacheStart);
563 signalHandlerIndexCache.reserve(sc - signalHandlerIndexCacheStart);
567 stringCache.reserve(pc + mc + sc);
579 propertyIndexCache.clear();
580 methodIndexCache.clear();
581 signalHandlerIndexCache.clear();
583 argumentsCache =
nullptr;
591 propertyIndexCacheStart =
parent()->propertyIndexCache.size() +
parent()->propertyIndexCacheStart;
592 methodIndexCacheStart =
parent()->methodIndexCache.size() +
parent()->methodIndexCacheStart;
593 signalHandlerIndexCacheStart =
parent()->signalHandlerIndexCache.size() +
parent()->signalHandlerIndexCacheStart;
597 propertyIndexCacheStart = 0;
598 methodIndexCacheStart = 0;
599 signalHandlerIndexCacheStart = 0;
605 StringCache::ConstIterator
it,
QObject *
object,
606 const QQmlRefPointer<QQmlContextData> &
context)
const
610 if (
data &&
data->hasVMEMetaObject) {
619inline bool contextHasNoExtensions(
const QQmlRefPointer<QQmlContextData> &
context)
623 const QQmlRefPointer<QQmlContextData> parent =
context->parent();
624 return (!parent || !parent->imports());
627inline int maximumIndexForProperty(
const QQmlPropertyData *prop,
const int methodCount,
const int signalCount,
const int propertyCount)
638 const QQmlRefPointer<QQmlContextData> &
context)
const
652 if (vmemo->ctxt.contextData().data() ==
context.data())
655 vmemo = vmemo->parentVMEMetaObject();
660 const int methodCount = vmemo->cache->methodCount();
661 const int signalCount = vmemo->cache->signalCount();
716 if (predecessor->isFinal())
721 predecessor->m_flags.setIsOverridden(
true);
722 Q_ASSERT(predecessor->isOverridden());
727 int argc,
const QList<QByteArray> &
names)
732 args->next = argumentsCache;
733 argumentsCache =
args;
739 bool unnamedParameter =
false;
740 const QSet<QString> &illegalNames =
engine->illegalNames();
744 if (
count > std::numeric_limits<quint16>::max())
751 if (
param.isEmpty()) {
752 unnamedParameter =
true;
753 }
else if (unnamedParameter) {
804 static const int destroyedIdx1 = QObject::staticMetaObject.indexOfSignal(
"destroyed(QObject*)");
805 static const int destroyedIdx2 = QObject::staticMetaObject.indexOfSignal(
"destroyed()");
806 static const int deleteLaterIdx = QObject::staticMetaObject.indexOfSlot(
"deleteLater()");
808 const bool preventDestruction =
metaObject->superClass() ||
metaObject == &QObject::staticMetaObject;
811 for (
int ii = methodCount - 1; ii >= 0; --ii) {
812 if (preventDestruction && (ii == destroyedIdx1 || ii == destroyedIdx2 || ii == deleteLaterIdx))
818 if (
m.name() == propertyName) {
830 if (
p.isScriptable()) {
834 bool changed =
false;
835 while (cmo && cmo->propertyOffset() >= idx) {
836 cmo = cmo->superClass();
841 if (!changed) cmo =
nullptr;
853 return string.data();
858 return string.toUtf8();
863 return string->toQString().toUtf8();
875 if (ddata && ddata->propertyCache) {
876 cache = ddata->propertyCache.data();
878 cache = newCache.data();
880 ddata->propertyCache = std::move(newCache);
900 return qQmlPropertyCacheProperty<const QV4::String *>(
obj,
name,
context, local);
907 return qQmlPropertyCacheProperty<const QStringView &>(
obj,
name,
context, local);
914 return qQmlPropertyCacheProperty<const QLatin1String &>(
obj,
name,
context, local);
922 const char *
string =
reinterpret_cast<const char *
>(
mo->d.stringdata) +
offset;
929 return mo->className();
936 struct Sort {
static bool lt(
const QPair<QString, const QQmlPropertyData *> &lhs,
937 const QPair<QString, const QQmlPropertyData *> &rhs) {
938 return lhs.second->coreIndex() < rhs.second->coreIndex();
943 QList<QPair<QString, const QQmlPropertyData *> > &
methods,
945 if (
data->isSignalHandler())
948 if (
data->isFunction()) {
949 if (
data->coreIndex() < This->methodIndexCacheStart)
959 if (
data->coreIndex() < This->propertyIndexCacheStart)
974 QList<QPair<QString, const QQmlPropertyData *> >
properties;
975 QList<QPair<QString, const QQmlPropertyData *> >
methods;
986 for (
int ii = 0; ii <
properties.size(); ++ii) {
990 if (
data->notifyIndex() != -1)
991 notifierId =
data->notifyIndex() - signalHandlerIndexCacheStart;
994 data->propType().name(),
999 property.setWritable(
data->isWritable());
1000 property.setResettable(
data->isResettable());
1001 property.setBindable(
data->isBindable());
1002 property.setAlias(
data->isAlias());
1005 for (
int ii = 0; ii <
methods.size(); ++ii) {
1009 if (
data->propType().isValid())
1010 returnType =
data->propType().name();
1014 signature +=
methods.at(ii).first.toUtf8() +
'(';
1017 if (
data->hasArguments()) {
1022 signature.append(
',');
1023 signature.append(
arguments->types[1 + ii].name());
1027 signature.append(
')');
1030 if (
data->isSignal()) {
1041 method.setReturnType(returnType);
1044 for (
int ii = 0; ii < enumCache.size(); ++ii) {
1048 for (
int jj = 0; jj < enumData.values.size(); ++jj) {
1054 if (!_defaultPropertyName.
isEmpty()) {
1056 if (dp && dp->coreIndex() >= propertyIndexCacheStart) {
1062 if (!_listPropertyAssignBehavior.
isEmpty())
1063 builder.
addClassInfo(
"QML.ListPropertyAssignBehavior", _listPropertyAssignBehavior);
1067template <
typename StringVisitor,
typename TypeInfoVisitor>
1068int visitMethods(
const QMetaObject &
mo,
int methodOffset,
int methodCount,
1069 StringVisitor visitString, TypeInfoVisitor visitTypeInfo)
1071 int fieldsForParameterData = 0;
1073 bool hasRevisionedMethods =
false;
1075 for (
int i = 0;
i < methodCount; ++
i) {
1080 hasRevisionedMethods =
true;
1082 visitString(
mo.d.data[
handle + 0]);
1083 visitString(
mo.d.data[
handle + 3]);
1085 const int argc =
mo.d.data[
handle + 1];
1086 const int paramIndex =
mo.d.data[
handle + 2];
1088 fieldsForParameterData += argc * 2;
1089 fieldsForParameterData += 1;
1092 for (
int i = 0;
i < 1 + argc; ++
i) {
1094 visitTypeInfo(
mo.d.data[paramIndex +
i]);
1098 visitString(
mo.d.data[paramIndex + argc +
i]);
1102 int fieldsForRevisions = 0;
1103 if (hasRevisionedMethods)
1104 fieldsForRevisions = methodCount;
1107 + fieldsForRevisions + fieldsForParameterData;
1110template <
typename StringVisitor,
typename TypeInfoVisitor>
1111int visitProperties(
const QMetaObject &
mo, StringVisitor visitString, TypeInfoVisitor visitTypeInfo)
1115 for (
int i = 0;
i <
priv->propertyCount; ++
i) {
1119 visitTypeInfo(
mo.d.data[
handle + 1]);
1125template <
typename StringVisitor>
1126int visitClassInfo(
const QMetaObject &
mo, StringVisitor visitString)
1129 const int intsPerClassInfo = 2;
1131 for (
int i = 0;
i <
priv->classInfoCount; ++
i) {
1132 const int handle =
priv->classInfoData +
i * intsPerClassInfo;
1135 visitString(
mo.d.data[
handle + 1]);
1138 return priv->classInfoCount * intsPerClassInfo;
1141template <
typename StringVisitor>
1142int visitEnumerations(
const QMetaObject &
mo, StringVisitor visitString)
1148 for (
int i = 0;
i <
priv->enumeratorCount; ++
i) {
1151 const uint keyCount = enumeratorData[3];
1152 fieldCount += keyCount * 2;
1154 visitString(enumeratorData[0]);
1155 visitString(enumeratorData[1]);
1157 const uint keyOffset = enumeratorData[4];
1159 for (
uint j = 0;
j < keyCount; ++
j) {
1160 visitString(
mo.d.data[keyOffset + 2 *
j]);
1167template <
typename StringVisitor>
1168int countMetaObjectFields(
const QMetaObject &
mo, StringVisitor stringVisitor)
1172 const auto typeInfoVisitor = [&stringVisitor](
uint typeInfo) {
1179 fieldCount += visitMethods(
mo,
priv->methodData,
priv->methodCount, stringVisitor,
1181 fieldCount += visitMethods(
mo,
priv->constructorData,
priv->constructorCount, stringVisitor,
1184 fieldCount += visitProperties(
mo, stringVisitor, typeInfoVisitor);
1185 fieldCount += visitClassInfo(
mo, stringVisitor);
1186 fieldCount += visitEnumerations(
mo, stringVisitor);
1202 uint highestStringIndex = 0;
1203 const auto stringIndexVisitor = [&highestStringIndex](
uint index) {
1204 highestStringIndex =
qMax(highestStringIndex,
index);
1207 *fieldCount = countMetaObjectFields(
mo, stringIndexVisitor);
1208 *stringCount = highestStringIndex + 1;
1216 int stringCount = 0;
1221 hash.addData({
reinterpret_cast<const char *
>(
mo.d.data),
qsizetype(fieldCount *
sizeof(
uint))});
1222 for (
int i = 0;
i < stringCount; ++
i) {
1246 hash.addData(_parent->checksum(checksums,
ok));
1273 if (signalData && signalData->hasArguments()) {
1276 return *
args->names;
1278 return method.parameterNames();
1280 return QList<QByteArray>();
static JNINativeMethod methods[]
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
char at(qsizetype i) const
Returns the byte at index position i in 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.
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
\threadsafe
ConstIterator end() const
typename QStringHash< T >::template Iterator< ConstIteratorData, const T > ConstIterator
ConstIterator begin() const
T * value(const ConstIterator &iter)
void linkAndReserve(const QLinkedStringHash< T > &other, int additionalReserve)
ConstIterator findNext(const ConstIterator &iter) const
typename QLinkedStringHash< QPair< int, QQmlPropertyData * > >::ConstIterator ConstIterator
qsizetype size() const noexcept
QDynamicMetaObjectData * metaObject
static QObjectPrivate * get(QObject *o)
static QQmlData * get(QObjectPrivate *priv, bool create)
QByteArray checksum(QHash< quintptr, QByteArray > *checksums, bool *ok) const
static bool addToHash(QCryptographicHash &hash, const QMetaObject &mo)
void invalidate(const QMetaObject *)
QQmlPropertyCache::Ptr copyAndAppend(const QMetaObject *, QTypeRevision typeVersion, QQmlPropertyData::Flags propertyFlags=QQmlPropertyData::Flags(), QQmlPropertyData::Flags methodFlags=QQmlPropertyData::Flags(), QQmlPropertyData::Flags signalFlags=QQmlPropertyData::Flags()) const
QQmlPropertyCache()=default
const QQmlPropertyData * maybeUnresolvedProperty(int) const
void appendSignal(const QString &, QQmlPropertyData::Flags, int coreIndex, const QMetaType *types=nullptr, const QList< QByteArray > &names=QList< QByteArray >())
QQmlRefPointer< QQmlPropertyCache > Ptr
void appendEnum(const QString &, const QVector< QQmlEnumValue > &)
QList< QByteArray > signalParameterNames(int index) const
static QString signalParameterStringForJS(QV4::ExecutionEngine *engine, const QList< QByteArray > ¶meterNameList, QString *errorString=nullptr)
const QQmlPropertyData * property(const K &key, QObject *object, const QQmlRefPointer< QQmlContextData > &context) const
const QQmlPropertyData * overrideData(const QQmlPropertyData *) const
const QQmlPropertyData * defaultProperty() const
QQmlPropertyCache::Ptr copy() const
const QMetaObject * metaObject() const
static bool determineMetaObjectSizes(const QMetaObject &mo, int *fieldCount, int *stringCount)
void setParent(QQmlPropertyCache::ConstPtr newParent)
int propertyOffset() const
int propertyCount() const
QQmlPropertyCache::Ptr copyAndReserve(int propertyCount, int methodCount, int signalCount, int enumCount) const
void update(const QMetaObject *)
void toMetaObjectBuilder(QMetaObjectBuilder &) const
const QQmlPropertyCache::ConstPtr & parent() const
const QMetaObject * firstCppMetaObject() const
void appendMethod(const QString &, QQmlPropertyData::Flags flags, int coreIndex, QMetaType returnType, const QList< QByteArray > &names, const QVector< QMetaType > ¶meterTypes)
void appendProperty(const QString &, QQmlPropertyData::Flags flags, int coreIndex, QMetaType propType, QTypeRevision revision, int notifyIndex)
const char * className() const
QString defaultPropertyName() const
static Ptr createStandalone(const QMetaObject *, QTypeRevision metaObjectRevision=QTypeRevision::zero())
Creates a standalone QQmlPropertyCache of metaObject.
const QMetaObject * createMetaObject() const
int originalClone(int index) const
void setRevision(QTypeRevision revision)
void setNotifyIndex(int idx)
QMetaType propType() const
void setOverrideIndexIsProperty(bool onoff)
void setCoreIndex(int idx)
void setPropType(QMetaType pt)
bool markAsOverrideOf(QQmlPropertyData *predecessor)
void setOverrideIndex(int idx)
static Flags flagsForProperty(const QMetaProperty &)
void load(const QMetaProperty &)
bool isSignalHandler() const
QString name(QObject *) const
const QMetaObject * metaObject() const
static QString signalNameToHandlerName(QAnyStringView signal)
const_iterator constEnd() const noexcept
const_iterator constFind(const T &value) const
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
qsizetype size() const noexcept
Returns the number of characters in this string.
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QByteArray toUtf8() const &
static constexpr QTypeRevision zero()
Produces a QTypeRevision with major and minor version {0}.
constexpr bool isValid() const
Returns true if the major version or the minor version is known, otherwise false.
static constexpr QTypeRevision fromEncodedVersion(Integer value)
Produces a QTypeRevision from the given value.
QHash< int, QWidget * > hash
[35multi]
QCache< int, Employee > cache
[0]
QSet< QString >::iterator it
QList< QVariant > arguments
Combined button and popup list for selecting options.
Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2)
static const QCssKnownValue properties[NumProperties - 1]
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 * iter
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 QString methodName(const QDBusIntrospection::Method &method)
typedef QByteArray(EGLAPIENTRYP PFNQGSGETDISPLAYSPROC)()
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
constexpr const T & qMax(const T &a, const T &b)
GLenum GLsizei GLsizei GLint * values
[15]
GLuint64 GLenum void * handle
GLsizei GLenum GLenum * types
GLenum GLuint GLenum GLsizei length
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum const GLint * param
GLenum GLuint GLintptr offset
GLenum GLuint GLsizei propCount
QT_BEGIN_NAMESPACE constexpr decltype(auto) qMakePair(T1 &&value1, T2 &&value2) noexcept(noexcept(std::make_pair(std::forward< T1 >(value1), std::forward< T2 >(value2))))
const QQmlPropertyData * qQmlPropertyCacheProperty(QObject *obj, T name, const QQmlRefPointer< QQmlContextData > &context, QQmlPropertyData *local)
static const QByteArray stringData(const QMetaObject *mo, int index)
static QQmlPropertyData qQmlPropertyCacheCreate(const QMetaObject *metaObject, const T &propertyName)
static const char * qQmlPropertyCacheToString(QLatin1String string)
static QHashedString signalNameToHandlerName(const QHashedString &methodName)
static int metaObjectSignalCount(const QMetaObject *metaObject)
obj metaObject() -> className()
\inmodule QtCore \reentrant
void setIsConstant(bool b)
void setHasArguments(bool b)
void setIsV4Function(bool b)
void setIsConstructor(bool b)
void setIsSignalHandler(bool b)
void setType(Type newType)