I've tried with QVector<AClass*> instead of QVector<AClass*>* and it works with the following in qml:
ListView{ model: testContext.list delegate: Text{ text: modelData.name + " " + modelData.age } } When I added one more * to make it QVector<AClass*>* I got this error:
QMetaProperty::read: Unable to handle unregistered datatype 'QVector*' for property 'Test::list'
to fix it according to solution provided here, I've added qRegisterMetaType<QVector<AClass*>*>("QVector<AClass*>*"); in constructor like this:
Test::Test(QObject *parent) : QObject(parent) { qRegisterMetaType<QVector<AClass*>*>("QVector<AClass*>*"); engine.rootContext()->setContextProperty("testContext", this); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); } above constructor is in .cpp file of the following class:
class Test : public QObject { QQmlApplicationEngine engine; QVector<AClass*> *vector; Q_OBJECT Q_PROPERTY(QVector<AClass*>* list READ list WRITE setList NOTIFY listChanged) public: explicit Test(QObject *parent = nullptr); QVector<AClass*>* list() {return vector;} void setList(QVector<AClass*>* value){vector = value; emit listChanged();} Q_SIGNAL void listChanged(); Q_INVOKABLE void addItem(); Q_INVOKABLE void removeItem(int index); }; in my main.cpp I've these:
int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); Test test; return app.exec(); } QVector has items in it BUT nothing shows up in ListView! Here is AClass:
class AClass : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(int age READ age WRITE setAge NOTIFY ageChanged) public: explicit AClass(QObject *parent = nullptr); QString name() const {return mName;} void setName(QString value) {mName = value; emit nameChanged();} int age() const {return mAge;} void setAge(int value){mAge = value; emit ageChanged();} Q_SIGNAL void nameChanged(); Q_SIGNAL void ageChanged(); private: QString mName; int mAge; }; If I use QVector<AClass*> or QVector<AClass> instead of QVector<AClass*>* I see items in ListView.
QVector<AClass*>*?