Mag*_*yev 1 c++ qt repeater qml
我在网格上有QML Repeater,当我点击项目i发出由C++类处理的信号,然后在C++中更改数组,然后将其指定为QML Repeater的模型.有没有办法改变C++模型的两个元素,而不像我那样改变整个模型?
这是我的qml文件
Grid{
height:width
rows:8
columns: 8
Repeater{
    id: chessPiecesRptr
       ...
   signal chessfigureSelected(int index)
    delegate: Item{
        id:chessPiecesItm
        Image{
            ...
        }
        MouseArea
        {
            anchors.fill:parent
            onClicked: {
                chessPiecesRptr.chessfigureSelected(index)
            }
        }
    }
}
更新QML Repeater模型的C++方法
void ChessFiguresClass::changeModel()
{
    QStringList dataList;
    for(int i=0;i<64;i++)
        dataList.append(QChar(posArray[i]));
    QQmlProperty::write(chessPiecesRptr, "model",   QVariant::fromValue(dataList));
}
与接受的答案相反,确实有可能不会一直实现整体QAbstractListModel.
这是事实,QStringList没有任何方法来通知更改,但所有你需要做的就是在属性包起来,这样的事情:
Q_PROPERTY(QVariant myModel READ myModel NOTIFY myModelChanged)
...
QVariant myModel() { return QVariant::fromValue(myStringList); }
...
void myModelChanged(); // signal
而就发出myModelChanged要反映模型的变化,每次,是与不同的模式替换它或改变它的内部.并使用该myModel属性Repeater的模型.
但是,如果模型中有很多项目或者委托很复杂,那么实现自己的项目总是一个好主意QAbstractListModel,因为通过上面的方法,转发器将在每次"更改"时重新创建整个模型,而在QAbstractListModel将只更新的实际变化.
| 归档时间: | 
 | 
| 查看次数: | 3824 次 | 
| 最近记录: |