> On 20 Oct 2017, at 12:33, Sean Harmer <sean.har...@kdab.com> wrote:
> 
> Hi,
> 
> On 19/10/2017 19:44, Shawn Rutledge wrote:
>> 
>> What exactly do you think should be done there, in case we can fix it
>> some day?
> 
> Probably something like how NSObject manages properties of collections. So 
> far with Qt3D we've only needed the same level of semantics as offered by 
> QQmlListProperty - or rather we've worked within those constraints. So a 
> simple indexed container with the ability to add/remove items.
> 
> In a more general setting I can easily also imagine support for associative 
> containers too.

We have dynamic properties at least.

> The tricky part will be deciding which semantics do we wish to support and 
> where do we draw the line between such properties and recommending to use a 
> full-blown model instead.
> 
> Speaking of which, improving QAIM to be able to return data for contiguous 
> blocks of indices in one function call would be a really welcome addition. 
> Calling so many virtuals to retrieve a single data value for a single index 
> and role is not exactly efficient. The existing QAIM API is fine for the 
> existing views but doesn't scale well when trying to use them to populate, 
> say a buffer of per instance data on a large scale. Yes I know we could avoid 
> this with custom API but users have so many models at this point it would be 
> nice to offer some interoperability with them.

So you want something like QVector<QVariant> dataRows(const QModelIndex 
&startIndex, int rows, int role = Qt::DisplayRole)?

It’s been pointed out as somewhat of a bottleneck (for QtQuick applications at 
least) that data() returns QVariant.  But what sort of alternative is there for 
C++ API?

>> A typical pattern in QtQuick is that a QQmlListProperty is the
>> default property, so declared children are automatically added.  But
>> instead you have to declare the Components first, and then also add
>> them to a vector.  Why is that?  It seems needlessly cumbersome to
>> me.  If Components are naturally always children of Entities,
> 
> ^ that is your broken assumption. Components do not have to be children of 
> the entity. We actually started out with that but found that it prohibits 
> sharing components which can sometimes be handy.

“sometimes”… so maybe add declared child Components to the vector 
automatically, but also allow sharing them by ID when necessary?

> Also whilst I'm here, there's an annoying limitation in the QML language that 
> prevents mixing inline declaration of elements with elements referenced by id 
> in a list property. That is you cannot write something like:
> 
> Mesh { id: mesh }
> Material { id: material }
> 
> Entity {
>    components: [ Transform {}, material, mesh ]
> }

Is there a bug written up about that one?

>> If you think there’s something wrong with the normal QObject
>> parent/child relationship, then there’s another mechanism for
>> detecting declared QML “children" and doing “something special” with
>> them.
> 
> Do you mean the autoparent callback?
> 
> http://code.qt.io/cgit/qt/qt3d.git/tree/src/quick3d/quick3d/qt3dquick_global.cpp#n676
> 
> We need this here because it's not enough for us to know that the parent is a 
> QObject. We need to know if it's a QNode to be able to add the new child to 
> the scene.

OK, it calls setParent but does not add it to the components vector.

> One possible future solution we discussed with Lars and Simon for this is to 
> make QObjectPrivate::setParent() virtual.

Yeah that might work, but has a pervasive cost I suppose.

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to