----- ListModel -----


https://doc.qt.io/qt-6.9/zh/qml-qtqml-models-listmodel.html

 属性 
import QtQuick
import QtQml.Models
    
ListModel {
    dynamicRoles: bool
        //动态角色
        //例如,false 时,如果创建了一个名为 "data "的角色并为其分配了一个数字,那么就不能再为 "data "角色分配字符串
        //必须在任何数据添加到ListModel 之前设置,而且必须在主线程中设置
        //静态定义数据(通过ListElement QML 语法)的ListModel 不能启用 dynamicRoles 属性
        //动态角色的 ListModel 通常比使用静态角色类型慢 4-6 倍
}


 只读属性 
import QtQuick
import QtQml.Models
    
ListModel {
    count: int  //数据项的数量
}


 方法 
import QtQuick
import QtQml.Models
    
ListModel {
    append(jsobject dict);
        //在列表模型的末尾添加一个新项目,值在dict 中
        //例:fruitModel.append({"cost": 5.95, "name":"Pizza"})
    clear();
        //删除模型中的所有内容,特别是会使所有使用 get() 提取的对象失效
    object get(int index);
        //返回列表模型中位于 index 的项目
        //就可以通过 JavaScript 访问或修改项目数据
    insert(int index, jsobject dict);
        //在index 位置向列表模型添加一个新项目,其值在dict 中
        //例:fruitModel.insert(2, {"cost": 5.95, "name":"Pizza"})
    move(int from, int to, int n);
        //移动n 项目from 一个位置to 另一个位置
        //例:fruitModel.move(0, fruitModel.count - 3, 3)  //将前 3 个条目移动到列表末尾
    remove(int index, int count = 1);
        //从模型中删除count 中index 的条目数
    set(int index, jsobject dict);
        //用dict 中的值更改列表模型中index 的项目
        //例:fruitModel.set(3, {"cost": 5.95, "name":"Pizza"})
        //如果index 等于 count(),则会在列表中添加一个新项目
    setProperty(int index, string property, variant value);
        //将列表模型中index 项目的property 更改为value 
    sync();
        //从 Worker 脚本修改列表模型后,将任何未保存的更改写入列表模型
    }
}


 自定义 
import QtQuick
import QtQuick.Controls
    
Slider {
    background: Item {
        //背景
    }
    handle: Item {
        //滑块
    }
}