我正在尝试在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方面直接调用它。问题是,即使现在调用了实际的setData
,dataChanged
信号也不能使QML TableView
来更新单元格……还有什么我想念的吗? >
答案 0 :(得分:0)
我可能可以回答您的修改。看来您可能没有在dataChanged()
函数中发出setData
信号。这可以解释为什么视图未更新。
来自QAbstractTableModel :: setData()documentation:
如果成功设置了数据,则应该发出dataChanged()信号。
另外,关于您的原始问题。您可以从qml中使用index
方法:model.setData(model.index(row,column), data)
来避免覆盖setData
。