kinetic-declarative plasma integration
aaron.kennedy at nokia.com
aaron.kennedy at nokia.com
Fri May 15 03:52:56 CEST 2009
Hi Marco,
On 15/05/09 7:10 AM, "ext Marco Martin" <notmart at gmail.com> wrote:
>>> * if one wants to create QML items dynamically, e.g. when a DataEngine
>>> returns a source create a new QML item and load it, how does that work
>>> exactly? can that be done from a JavaScript file?
>>
>> We have a couple of ways of dealing with "lists" of things (which sounds
>> like what the sources returned from a dataengine conceptually are). All of
>> our view classes can take sets of things, and we also have a generalized
>> "Repeater" element for handling other cases.
>
> i'm indeed playing with views now.
> since the qml documentation appears still not there i'm going by attempts:
> what classes are for views? until now i've found ListView and GridView,
> anything else?
> also, is it possible to do an horizontal list view?
> but the real question is: is it possible somehow to plug a traditional qt
> model into it?
The documentation is still a work in progress. In the specific case of the
views available, however, I think its ok. From the main page, navigate to
"Declarative Module"/"Qml Elements" and then look under the "Views" heading.
Incase you haven't generated the documentation, but want to get going fast,
here are the specific answers to your questions :)
You can set a ListView into horizontal mode by setting the "orientation"
property, like this:
ListView {
orientation: "Horizontal"
}
You can plug a QAbstractItemModel Qt model into our views, with one small
extra step. Because we expose each model role as a JavaScript property, not
an integer enumeration value, we need a way to map between the role ints in
your C++ model and textual representations. We've added a "void
QAbstractItemModel:: setRoleNames(const QHash<int,QByteArray> &roleNames)"
method to let you specify this mapping.
So, to hook this all up:
// Setup role mapping
QHash<int, QByteArray> roleNames;
roleNames.insert(1023, "myRoleName");
myModel->setRoleNames(roleNames);
// Bind the C++ model instance into a QML context
QmlContext *context = new QmlContext(engine->rootContext());
context->setContextProperty("myModel", static_cast<QObject *>(myModel));
// This is the example QML text that we'll instantiate
#define QML_TEXT "Rect { color: "white"; ListView { anchors.fill: parent;
delegate: Text { text: myRoleName } model: myModel } }"
// Create a QML component that uses the model
QmlComponent component(engine, QML_TEXT);
component->create(context);
This will give you a fairly boring list containing the text of the
"myRoleName" role for each entry in your model.
Cheers,
Aaron
More information about the Plasma-devel
mailing list