gpt4 book ai didi

c++ - 将 QAbstractModelList 的列表公开给 QML

转载 作者:行者123 更新时间:2023-11-28 04:36:32 29 4
gpt4 key购买 nike

我正在编写 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 中它并没有使用模型指针来显示模型。有没有其他方案可以解决这个问题?

最佳答案

你必须使用QVariantList,例如,使用this example中的模型,我们将使用以下内容:

*.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 }
}
}

您可以在以下link 中找到完整的示例

关于c++ - 将 QAbstractModelList 的列表公开给 QML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261464/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com