我正在编写QML / Qt应用程序。我用c ++实现了一个模型。该模型的类是从QAbstractListModel派生的。现在需要将此类的对象放入列表中,并将其公开给QML,以便可以在QML中像这样使用它:
DraggableItemList{
listModel: listofmodels[0]
}
我试图将对象简单地放入QList并像这样公开QList:
engine.rootContext()->setContextProperty("listofmodels",QVariant::fromValue(modelList));
不幸的是,这导致错误,因为QAbstractListModel是不可复制的。 所以我用每个模型的指针QList进行了尝试:
QList<myModel *> modelList;
但是在qml中,它没有使用模型指针显示模型。还有其他解决方案可以解决这个问题吗?
答案 0 :(得分:1)
您必须使用QVariantList
,例如,使用APPNOTE中的模型,我们将使用以下内容:
*。cpp
#include "model.h"
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QVariantList modelist;
for(int i=0; i< 10; i++){
AnimalModel *model = new AnimalModel;
model->addAnimal(Animal("Wolf", "Medium"));
model->addAnimal(Animal("Polar bear", "Large"));
model->addAnimal(Animal("Quoll", "Small"));
modelist << QVariant::fromValue(model);
}
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("modelist", modelist);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
*。qml
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ListView {
width: 200; height: 250
model: modelist[0]
delegate: Text { text: "Animal: " + type + ", " + size }
}
}
您可以在以下this example
中找到完整的示例