首页 > 解决方案 > 从 QML 调用 QAbstractTableModel setData 方法

问题描述

我试图在 QMLTableView和我的 C++ 类之间建立一个完全通用的连接,该类是QAbstractTableModel. 到目前为止,我能够通过data方法读取数据,因为这是由TableView模块内部完成的。然而,从我读过的内容来看,我需要setData在 QML 方面称自己为。问题是,函数头如下所示:

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信号也不会使 QMLTableView更新单元格......我还有什么遗漏的吗?

标签: c++qtqml

解决方案


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

来自 QAbstractTableModel::setData()文档

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

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


推荐阅读