168 int metaCall(QObject *o, QMetaObject::Call call,
int id,
void **arguments)
override
173 static const int objectPropertyOffset = QObject::staticMetaObject.propertyCount();
174 if (id >= m_type->propertyOffset
175 && (call == QMetaObject::ReadProperty
176 || call == QMetaObject::WriteProperty
177 || call == QMetaObject::ResetProperty)) {
179 QMetaObject::metacall(m_data->object, call, id - m_type->propertyOffset + objectPropertyOffset, arguments);
181 }
else if (id >= m_type->signalOffset && call == QMetaObject::InvokeMetaMethod) {
182 QMetaObject::activate(m_data,
this, id - m_type->signalOffset,
nullptr);
185 return m_data->qt_metacall(call, id, arguments);
193 const QMetaObject *metaObject =
m_data->object->metaObject();
194 static const int objectPropertyOffset = QObject::staticMetaObject.propertyCount();
196 const int previousPropertyCount = propertyCount() - propertyOffset();
197 int propertyIndex = metaObject->indexOfProperty(name);
198 if (propertyIndex == -1)
200 if (previousPropertyCount + objectPropertyOffset == metaObject->propertyCount())
204 VDMObjectDelegateDataType *type =
m_type;
209 const int previousMethodCount = methodCount();
210 int notifierId = previousMethodCount - methodOffset();
211 for (
int propertyId = previousPropertyCount; propertyId < metaObject->propertyCount() - objectPropertyOffset; ++propertyId) {
212 QMetaProperty property = metaObject->property(propertyId + objectPropertyOffset);
213 QMetaPropertyBuilder propertyBuilder;
214 if (property.hasNotifySignal()) {
215 m_type->builder.addSignal(
"__" + QByteArray::number(propertyId) +
"()");
216 propertyBuilder =
m_type->builder.addProperty(property.name(), property.typeName(), notifierId);
219 propertyBuilder =
m_type->builder.addProperty(property.name(), property.typeName());
221 const bool modelWritable = m_type->model->delegateModelAccess != QQmlDelegateModel::ReadOnly;
222 propertyBuilder.setWritable(modelWritable && property.isWritable());
223 propertyBuilder.setResettable(modelWritable && property.isResettable());
224 propertyBuilder.setConstant(property.isConstant());
227 m_type->metaObject.reset(
m_type->builder.toMetaObject());
228 *
static_cast<QMetaObject *>(
this) = *
m_type->metaObject;
230 notifierId = previousMethodCount;
231 for (
int i = previousPropertyCount; i < metaObject->propertyCount() - objectPropertyOffset; ++i) {
232 QMetaProperty property = metaObject->property(i + objectPropertyOffset);
233 if (property.hasNotifySignal()) {
234 QQmlPropertyPrivate::connect(
235 m_data->object, property.notifySignalIndex(), m_data, notifierId);