Я пытался использовать QVector<AClass*>
вместо QVector<AClass*>*
, и он работает со следующими параметрами в qml
:
ListView{
model: testContext.list
delegate: Text{
text: modelData.name + " " + modelData.age
}
}
Когда я добавил еще один *
, чтобы сделать его QVector<AClass*>*
Я получил эту ошибку:
QMetaProperty :: read: Невозможно обработать незарегистрированный тип данных 'QVector *' для свойства 'Test :: list'
, чтобы исправить его в соответствии с здесь , я добавил qRegisterMetaType<QVector<AClass*>*>("QVector<AClass*>*");
в constructor
следующим образом:
Test::Test(QObject *parent) : QObject(parent)
{
qRegisterMetaType<QVector<AClass*>*>("QVector<AClass*>*");
engine.rootContext()->setContextProperty("testContext", this);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
}
выше constructor
находится в .cpp
файле следующего класса:
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);
};
в моем main.cpp
У меня есть такие:
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
Test test;
return app.exec();
}
QVector
содержит предметы, НО ничего не появляется в ListView
! Вот 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;
};
Если я использую QVector<AClass*>
или QVector<AClass>
вместо QVector<AClass*>*
, я вижу элементы в ListView
.