As a followup.
I went for duplicating the model in QML level - works fine.
Unsurprisingly perhaps, because for a model of just a contact list size
and without strict performance restrictions any approach would work.
As for the general attitude for keeping backend in C++, I agree yet my
definition of backend that just has to stay in C++ is way more strict
than for many others :)
I find QML faster to develop and what's more important to me - way
easier to test, so I tend to put quite some logic to JavaScript.
Cheers,
Artem.
Bo Thorsen wrote:
Hi Artem,
Ok, our analysis of the problem agrees :)
As I said, I'd make a C++ model for this. The reason is that it's just
so annoying to manipulate models in QML. You can do it, but the code
will feel much simpler in C++.
It's also a very common split - to have the backend completely in C++
and the frontend in QML. This is what most end up with as a preferred
design for complex QML applications.
Bo.
Den 20-04-2012 10:42, Artem Marchenko skrev:
Thanks, Bo
Your UI
obviously mixes concepts in the same area, which is why you have a
problem with the low-end model code.
Indeed it is so. To be precise, there are two conceptually different,
yet related models.
1. One is to have a contact list coming from the messenger API. OK, I
add a couple of custom properties, yet it is still pretty much an
external contact list and it would be good to keep it this way - easier
to verify, easier to sync (I don't trust messenger API much, so it's
good to have isolated point of contact).
2. Another one is the model for list shown in the UI. That can have an
extra item (my own contacts) or maybe even hide some item (voice test
contact always provided by a messenger).
These two models are indeed conceptually different yet one can be
transformed into another one using a couple of clear and simple rules.
*Options*
So what I am asking for is an advice (or maybe somebody even has similar
experience) on how to do such a transformation. One possibility is to to
make 2nd model in a pure QML (manipulate ListModel whenever c++ model
changes). Another one is to have 2nd model in C++. Another option is to
have just one model on a C++ side, inject and remove items there and/or
maybe have special attribute to tell whether a particular item is
hidden.
Cheers,
Artem.
Bo Thorsen <mailto:[email protected]>
20 квітня 2012 р. 11:20
Yes, you can do this in QML, coupled with some Javascript and signal
handlers. But why on earth would you want to, when it's so much easier
to have it in the model? If you want to, you can add a bool flag on
each
item that says if it's your special item or not.
Let it sit in the model, it's *by far* the easiest for you.
If you are worried about tainting your model with something that
doesn't
match the concept it models, then you're on the wrong track. Your UI
obviously mixes concepts in the same area, which is why you have a
problem with the low-end model code.
Fix your UI to not show a special item that is a different concept, or
accept that you should add it to the model. I would choose one of those
two options, because the others are worse.
Bo Thorsen,
Fionia Software.
Artem Marchenko <mailto:[email protected]>
20 квітня 2012 р. 01:53
Hi All
I've go a model coming from C++ (Inhertited from
QAbstractListItemModel) that is basically a list of contact for an
instant messenger.
App's UI, however, is to include one more special contact representing
the current user (it makes sense on our devices with extremely
discouraged chrome elements such as extra headers, scrollbars, etc).
I can certainly, modify the model on C++ side, yet.. this special item
is really just about the UI representation and therefore it seems very
logical to me to perform such a modification in QML side. Is there a
way to somehow inject an item into a model coming from C++? Or maybe
there is a way to apply some rules to C++ model and make a QML
ListModel or something like that as a result?
Or how would you do it?
Cheers,
Artem.
P.S.
In most of cases there are going to be just a few elements in the
model so cloning of model if needed shouldn't effect performance and
memory use much
Bo Thorsen,
Fionia Software.
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt-qml