c++ - 使用 createComponent 动态创建 QML 对象
问题描述
在我的 C++ 程序中,我希望能够在运行时加载一个文件,其中包含多个员工的数据(名字、姓氏、出生日期)。这个文件应该被解释并为每个员工创建 Employee 对象,并存储在某种列表中(可能是 QList?)。
在 QML 方面,我有一个“employee.qml”文件,它本质上是一个包含一些文本字段的矩形。
在创建 Employee 对象时,我还想创建“employee.qml”组件的实例,并将每个实例绑定到其各自的 Employee 对象,以便文本字段反映 C++ 对象中的数据。
实际上,对于每个 Employee 对象,应该在屏幕上放置一个新组件,并绑定到正确的对象。它还应该能够调用类中定义的公共槽方法。
Qt 和 QML 甚至可以做到这一点吗?
编辑:
一种可能的想法可能是在 C++ 中使用 QQmlComponent::create(),使用 SetProperty() 将 id 设置为 C++ 对象的名称,然后使用 setContextProperty 使该对象可用于 QML。
解决方案
实现此目的的一种简单方法是子类化QAbstractListModel
以创建自己EmployesListModel
的 .csv 文件,解析您的 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) }
}
推荐阅读
- node.js - 在附近解析时,位置 XXX 处 JSON 中出现意外标记的错误
- python - “AttributeError: 'module' object has no attribute” - 有人可以解释这个错误消息的含义吗?
- powerbi - 如何计算已关闭工单的平均工作日?
- angular - 如何加载数据并返回承诺?
- amazon-web-services - AWS Personalize 项目属性
- python - 识别任意时间段内的会话
- excel - VBA 将多个 PDF 文件从一个位置保存到另一个位置
- javascript - date-fns - 从日期开始倒计时,包括周数
- reactjs - 从下拉菜单单击事件触发模态 antd
- php - 在 Wordpress 中显示分类法