使用 createComponent 动态创建 QML 对象

Using createComponent to dynamically create QML objects

本文关键字:QML 对象 创建 动态 createComponent 使用      更新时间:2023-10-16

在我的C++程序中,我希望能够在运行时加载一个文件,其中包含多个员工的数据(名字,姓氏,DOB)。应该解释此文件并为每个员工创建 Employee 对象,并将其存储在某种列表中(也许是 QList?

在QML方面,我有一个"employee.qml"文件,它本质上是一个矩形,里面有几个文本字段。

创建我的 employee 对象时,我还想创建我的 'employee.qml' 组件的实例,并将每个实例绑定到其各自的 Employee 对象,以便文本字段反映C++对象中的数据。

实际上,对于每个 Employee 对象,应在屏幕上放置一个新组件,并将其绑定到正确的对象。它还应该能够调用类中定义的公共插槽方法。

Qt和QML甚至可能做到这一点吗?

编辑:

一个可能的想法可能是在C++中使用QQmlComponent::create(),使用SetProperty()将id设置为C++对象的名称,并使用setContextProperty使对象可用于QML。

实现此目的的一种简单方法是子类化QAbstractListModel创建自己的EmployesListModel,解析您的csv文件等,并将其公开给QML,您可以在其中使用Repeater。最终的 QML 代码应如下所示:

EmployeesListModel
{
id: employeesListModel
source: "/path/to/employees.csv"
}
Repeater
{
model: employeesListModel
delegate: Text { text: "Hi, my name is %1 and i am %2 years old".arg(employeeName).arg(employeeAge) }
}