<div dir="ltr">Hi,<div><br></div><div>I have a list of objects at the core of a class inheriting QAbstractListModel,</div><div><br></div><div>QList<MyObject*> m_list;</div><div><br></div><div>"MyObject" inherits QObject and has many properties (20 or so). I need to access most of these properties in a Quick2 view delegate.</div>
<div><br></div><div>To avoid creating roles for each of these properties, I created a "myObject" role in the list model class instead, that returns a QVariant containing the pointer to the object.</div><div><br>
</div><div>This works allright as long as the model count doesn't change. In a delegate, I can get the properties like so:</div><div><br></div><div>Item {</div><div>   id: theDelegate</div><div>   property string someValue: myObject.someObjectValue</div>
<div>}</div><div><br></div><div>The properties have proper bindings, so the properties are updated when something changes.</div><div><br></div><div>However I get problems when I delete objects from the list model. The delegates are deleted later than the actual objects, so I get warnings from QML on the console (saying myObject is null). These seem harmless enough, but I would like to avoid having any warnings at all. </div>
<div><br></div><div>I can avoid them by doing tests where I use myObject in QML like so,</div><div><br></div><div><div>Item {</div><div>   id: theDelegate</div><div>   property string someValue: myObject ? myObject.someObjectValue : ""</div>
<div>}</div></div><div><br></div><div>but this is just ugly.</div><div><br></div><div>So I wonder, how should I best deal with situations like this? Is exposing the object pointer a bad practice to begin with?</div><div><br>
</div><div>The alternative is to create roles for every property in MyObject, and connect signals for every one of them so the model updates when one of the properties changes. Perfectly doable of course, but it has to be kept up-to-date with the properties in MyObject, and feels like duplicating a lot of code.</div>
<div><br></div><div>Cheers,</div><div>Ola</div><div><br></div><div><br></div><div><br></div></div>