将元素附加到C 的QML ListModel
Appending Elements to QML ListModel from C++
我正在遵循此示例,以了解如何将Qlist作为QML的列表模型。
我想从C 修改列表。因此,我将列表放入一个新的QOBject中,以便能够使用计时器。在计时器回调中,我修改了现有元素的颜色,并将新元素附加到列表中。
void MyObject::setList(QList<QObject *>* l)
{
list = l;
QTimer* timer = new QTimer;
connect(timer, SIGNAL(timeout()), this, SLOT(addElement()));
timer->start(2000);
}
void MyObject::addElement()
{
list->append(new DataObject("Item 1", "red"));
((DataObject *) list->at(0))->setColor("blue");
}
颜色更改显示在QML中,但是QMLS ListView中列表的长度不更改。我想念什么?什么步骤是必要的,以使QML意识到列表的大小更改?
我了解颜色和名称属性是通过q_property makro
注册的Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
如何将其转换为列表的长度?
a QList<QObject*>
是您可以使用的最简单但最愚蠢的数据模型类型。它无需向内部更改发出信号,以便该视图可以自行更新。
您可以通过将列表公开为具有NOTIFY
信号的属性来强制更新。但是,这是非常效率的,并且会迫使每次列表视图的娱乐活动委托。随着元素数量的增长,这会变得非常丑陋。
您应该考虑用其所有铃铛和哨声实现适当的QAbstractListModel
。然后,列表中的更改将以最有效,最适当的方式在QML侧反映。或者也许使用我在此处概述的通用模型,它非常灵活,因为它还允许使用声明性QML代码的人群使用这些功能。您还可以在QML中定义实际对象类型,而无需重新编译每种新类型的C 内容。
相关文章:
- 从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:错误:未知方法返回类型:自定义类型
- 将元素附加到C 的QML ListModel
- 如何为QML创建通用ListModel
- 如何在ListModel中添加元素后更新QML ListView