Ok, follow-up, I'm still trying to understand setting properties in the
QObject::setProperty() meta-object system versus exposing a data member as a
property (and how these options relate to attached properties).

Reading the QML docs:

<http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html>

QUOTING DOCS:  >>>>>>>>>>>>

You should always use
QObject::setProperty<http://doc.qt.nokia.com/4.7-snapshot/qobject.html#setProperty>(),
QDeclarativeProperty<http://doc.qt.nokia.com/4.7-snapshot/qdeclarativeproperty.html>or
QMetaProperty::write<http://doc.qt.nokia.com/4.7-snapshot/qmetaproperty.html#write>()
to change a QML property value, to ensure the QML engine is made aware of
the property change. For example, say you have a custom element
PushButtonwith a
buttonText property that internally reflects the value of a
m_buttonTextmember variable. Modifying the member variable directly
like this is not a
good idea:

 // BAD!
 QDeclarativeComponent component(engine, "MyButton.qml");
 PushButton *button = qobject_cast<PushButton*>(component.create())
 button->m_buttonText = "Click me";

Since the value is changed directly, this bypasses Qt's meta-object
system<http://doc.qt.nokia.com/4.7-snapshot/metaobjects.html>and the
QML engine is not made aware of the property change. This means
property bindings to buttonText would not be updated, and any
onButtonTextChanged handlers would not be called.

<<<<<<<<<<<<< QUOTING DOCS

Ahhh..... there it is ... it's better to rely upon your state *within* the
QObject::setProperty() system (to ensure modification notifications).

Seems reasonable.

However, since I'm maintaining application-specific state in
application-specific types, and exposing that state to QML (from C++), I'll
have to manage a "synchronization" between the "real"
application-specific-state-in-application-specific-types with those values
that I explicitly set/update in the QObject::setProperty() (meta-object)
world.

Interesting problem.

Back to the original thread on attached properties, I'd *like* to implement
a single QObject "wrapper" of an application-specific type with (deep)
state, and make that available to QML (as attached properties on some other
C++ QML-exposed class).  Since the state is "deep", the "a.b.c.d" syntax
would be great for access.

Is this one kind of intended use for "attached properties" (centralized
wrapper-exposure of application-specific state, uncoupled from a given
application-specific type)?

Another option would be to merely expose a QObject-derived class explicitly
at each level for "a.b.c.d", and not use attached properties at all.

Hmmm....

--charley
_______________________________________________
Qt-qml mailing list
Qt-qml@trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to