从QML调用QAbstractTableModel setData方法

时间:2019-06-04 09:22:16

标签: c++ qt qml

我正在尝试在QML TableView和我的C ++类之间建立完全通用的连接,该类继承了QAbstractTableModel。到目前为止,我已经可以通过data方法读取数据,因为这是由TableView模块在​​内部完成的。但是,从我读过的书中,我需要在QML方面自己打电话给setData。问题是,函数头看起来如下:

bool setData(const QModelIndex &index,
                 const QVariant &value,
                 int role = Qt::EditRole) override;

要调用它,我需要QModelIndex,我不知道如何在QML方面获得它。我将感谢一个QML示例。

编辑:我通过如下包装setData来解决此问题:

Q_INVOKABLE bool setData(const int row,
                             const int column,
                             const QVariant& value);

bool CVarTableModel::setData(const int row,
                             const int column,
                             const QVariant& value)
{
    return setData(index(row, column), value);
}

我现在可以在QML方面直接调用它。问题是,即使现在调用了实际的setDatadataChanged信号也不能使QML TableView来更新单元格……还有什么我想念的吗? >

1 个答案:

答案 0 :(得分:0)

我可能可以回答您的修改。看来您可能没有在dataChanged()函数中发出setData信号。这可以解释为什么视图未更新。

来自QAbstractTableModel :: setData()documentation

  

如果成功设置了数据,则应该发出dataChanged()信号。

另外,关于您的原始问题。您可以从qml中使用index方法:model.setData(model.index(row,column), data)来避免覆盖setData