[SOLVED] How to use multiple different list element in ListView
-
I can use different properties in ListElement when using QML model. The following code works properly. Arg2 is only in the first ListElement:
ListView { id:listView height: 200 Layout.fillWidth: true delegate: Rectangle { height: 50 Label { anchors.fill: parent text: arg1 + " " + (arg2 === undefined ? "" : " " + arg2) } } model: ListModel { ListElement { arg1: "Elem1"; arg2: "Elem1arg2" } ListElement { arg1: "Elem2" } } }
But I'd like to load model from C++. I have multiple inherited classes.
Here is base idea of my classes:
class Class1 : public QObject { Q_PROPERTY(QString arg1... //... class Class2 : public Class1 Q_PROPERTY(QStirng arg2...
I tried to use QObjectList -based model. I didn't get it working because only properties from Class1 are available:
QList<QObject*> list; list.append(new Class1("Elem1")); list.append(new Class2("Elem2","Elem2arg1" )); return QVariant::fromValue(list);
How I can get properties from both classes? Or is it even possible?
-
@jimcad AFAIK it should work. All the parent's properties should be visible to child.
Have you set the inherited property's value from child ? -
@p3c0 Yes, arg1 is set for both and it's visible in QML. But arg2 is available only in Class2 and it's not visible in QML. That is the problem.
-
@jimcad OfCourse how would arg2 be available to Class1 ? Children inherit properties of their parents and not the other way.
You can add a check there something like:Text { text : typeof model.modelData.arg2==="undefined" ? "DefaultValue" : model.modelData.arg2 }
-
@p3c0 Yes, I know that. There must be something wrong in my code because this not working either:
MyClass1{ id: class1 } MyClass2{ id: class2 } Component.onCompleted: { class2.arg1 = "Changed arg1" console.log(class2.arg1) // works ok class2.arg2 = "Changed arg2" // <-- Doesn't work console.log(class2.arg2) }
Seems that all properties from inherited classes doesn't works. Here is my example project: https://www.dropbox.com/s/mi33b8ml8nctrup/qml-test.zip?dl=0
-
@p3c0 I found it. It was missing Q_OBJECT macro in Class2. Now it works properly. Thanks for your advice.