Il 17/07/20 14:09, Ulf Hermann ha scritto:
QAction *action = ~~~; auto prop = action->text;This already gives you the string. You cannot retrieve the property itself. You can alternatively do action->text() or action->text.value(). They all do the same thing.
Uhm... sorry, no, this doesn't really compute for me. Ignore the copy semantics for a second (use const auto &, if necessary), what's decltype(prop)? If it's QString, then you can't write .value() after it.
The member to access in the private object is hardcoded in the generated implementation of value(). The public object to pick the private object from is retrieved by offset from the address of the property. moc generates code like this: qreal QQmlComponent::_qt_property_api_progress::value() const { const size_t propertyMemberOffset = reinterpret_cast<size_t>(&(static_cast<QQmlComponent *>(nullptr)->progress)); const auto *thisPtr = reinterpret_cast<const QQmlComponent *>(reinterpret_cast<const char *>(this) - propertyMemberOffset); return thisPtr->QQmlComponent::d_func()->progress.value(); } I see where you're coming from. If the address doesn't exist, this shouldn't be possible. However, no_unique_address does not mean that the object has no address. It just means that it can share the same address with other objects.
No, actually this makes perfect sense, but was contradicted before:
We are not casting these structs to or from anything though, do we?
So yes, you're casting them to perform pointer arithmetic and figure out the address of the object to get the property from.
Thanks, -- Giuseppe D'Angelo | giuseppe.dang...@kdab.com | Senior Software Engineer KDAB (France) S.A.S., a KDAB Group company Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com KDAB - The Qt, C++ and OpenGL Experts
smime.p7s
Description: Firma crittografica S/MIME
_______________________________________________ Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development