Can I think Item has two types of element: property and inner
item(QGraphicsItem)?
Rectangle {
id: rect
width: 200; height: 200
property Text a; // This is property, not children item, so it can't be
painted by QML.
property Text b;
Text { // inner item
id: foobara
text: "foobara"
}
a: foobara // Its relationship is reference object or clone object?
b: Text { // It's not inner item, what's it?
parent: rect
y: 20
text: "foobarb"
}
gradient: Grdient { // Here, has gradient parent?
GradientStop { position: 0.0; color: "lightsteelblue" }
GradientStop { position: 1.0; color: "blue" }
}
}
From: Eduardo Fleury
Sent: Thursday, September 30, 2010 11:30 AM
To: 罗军
Cc: [email protected]
Subject: Re: [Qt-qml] no basic property define confuse
Yes, this works as well.
I understand, but I confuse this syntax problem.
Are you confused by the ":" vs "=" syntax?
If that's the question, then assume for a moment that you use ":" in QML (like
you did) but use "=" in inline JavaScript blocks (like I did inside onClicked).
There's a crucial difference between these since the former is a "binding" and
the latter an "assigment", but for now, consider that "parent" is being
successfully set in both cases.
Or is the confusion regarding the whole idea of setting the parent, etc?
If so, I'm not sure how familiar you are with standard C++ Qt but a little bit
of background on QGraphicsScene and QGraphicsItems (the base class of QML items
like rectangle and text) helps.
The idea is that in order to be painted on the screen an item needs to:
1) be created
2) have its "visible" property set to true
3) have a valid geometry, that means a non-zero size and be somewhere useful on
the screen.
4) be added to what we call the "scene", which is basically the set of items
that are handled by the system that paints things in Qt. In QML this is almost
hidden as implementation detail.
When we create an item in QML by default only conditions (1) and (2) are met by
default.
In the example I sent, I also set the size, so (3) is OK as well.
However it does not yet belong to a scene, and the way of making that happen in
QML is setting its parent. When this is done, the underground machinary of Qt
will make sure child knows about parent, parent knows about child and that
everyone is in the scene and shown... That's the reason parent needs to be set.
Huh... but what about when we create items inside others, like:
Rectangle {
Text {
text: "foobar"
}
}
In this case you don't set the parent of text and yet, it works. Well, what's
happening here is that by default, the inner items that are created inside
another item automatically becomes children of the outter one. In this case,
QML ensures that Text is a child of Rectangle (sets parent, adds to scene, bla,
bla) automatically. Kind of a (very important) syntactic sugar.
Let me know if it makes sense!
BR,
Eduardo
--
Eduardo M. Fleury
OpenBossa - INdT
http://eduardofleury.com/
http://www.openbossa.org/
---------------------------------------------------------------------------------------------------
Confidentiality Notice: The information contained in this e-mail and any
accompanying attachment(s)
is intended only for the use of the intended recipient and may be confidential
and/or privileged of
Neusoft Corporation, its subsidiaries and/or its affiliates. If any reader of
this communication is
not the intended recipient, unauthorized use, forwarding, printing, storing,
disclosure or copying
is strictly prohibited, and may be unlawful.If you have received this
communication in error,please
immediately notify the sender by return e-mail, and delete the original message
and all copies from
your system. Thank you.
---------------------------------------------------------------------------------------------------
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt-qml