将 QAbstractModelList 列表公开给 QML
Expose List of QAbstractModelList to QML
我正在编写一个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
,例如,使用本例中的模型,我们将使用以下内容:
*。.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 }
}
}
您可以在以下链接中找到完整示例
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 阅读 QML 中结构C++ QVector 的 QVector
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- Qt QML桌面应用程序自动化测试