C++ 从QML调用QAbstractTableModel setData方法
我试图在QML <代码> Table VIEW/COD>和我的C++类之间建立一个完全通用的连接,它的子类是C++ 从QML调用QAbstractTableModel setData方法,c++,qt,qml,C++,Qt,Qml,我试图在QML Table VIEW/COD>和我的C++类之间建立一个完全通用的连接,它的子类是QuaseCtTabLimoDele>代码>。到目前为止,我能够通过data方法读取数据,因为这是由TableView模块内部完成的。然而,根据我所阅读的内容,我需要在QML端调用setData我自己。问题是,函数头如下所示: bool setData(const QModelIndex &index, const QVariant &value,
data
方法读取数据,因为这是由TableView
模块内部完成的。然而,根据我所阅读的内容,我需要在QML端调用setData
我自己。问题是,函数头如下所示:
bool setData(const QModelIndex &index,
const QVariant &value,
int role = Qt::EditRole) override;
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);
}
为了调用它,我需要QModelIndex
,我不知道如何在QML端获得它。我希望有一个QML的例子
编辑:我已经解决了这个问题,将setData
包装如下:
bool setData(const QModelIndex &index,
const QVariant &value,
int role = Qt::EditRole) override;
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
更新单元格。。。还有什么我遗漏的吗?我可能会回答你的编辑。您的setData
函数中似乎没有发出dataChanged()
信号。这将解释为什么视图没有更新
从QAbstractTableModel::setData():
如果成功设置数据,则应发出dataChanged()信号
还有,关于你原来的问题。您可以使用qml中的
index
方法:model.setData(model.index(行、列、数据)
来避免覆盖setData
,我可能可以回答您的编辑。您的setData
函数中似乎没有发出dataChanged()
信号。这将解释为什么视图没有更新
从QAbstractTableModel::setData():
如果成功设置数据,则应发出dataChanged()信号
还有,关于你原来的问题。您可以使用qml中的
index
方法:model.setData(model.index(row,column),data)
避免覆盖setData
代理可以通过执行model.roleName=value
隐式调用setData以获取其索引。谢谢您的回答,我想我明白了,但是你认为有任何可用的示例吗?学员可以通过执行model.roleName=value
隐式调用setData
获取其索引。谢谢你的回答,我想我明白了,但是你认为有任何可用的示例吗?