c++ - 从 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
更新单元格......我还有什么遗漏的吗?
解决方案
我可能会回答您的编辑。看起来你可能没有在你的函数中发出dataChanged()
信号。setData
这可以解释为什么视图没有更新。
来自 QAbstractTableModel::setData()文档:
如果成功设置数据,则应发出 dataChanged() 信号。
另外,关于你原来的问题。您可以使用index
qml: 中的方法model.setData(model.index(row,column), data)
来避免覆盖setData
.
推荐阅读
- c# - 显示 MessageBox 时如何防止表单最大化?
- python - 如何绘制 SciKit-Learn 线性回归图
- java - 使用带有 Spring Security 的 Azure AD 高级自定义角色进行基于角色的访问
- graphics - VKRay/DXR:你的“有效载荷”结构中存储了哪些信息?
- java - 我不小心复制了这个窗口,我该如何撤消它?
- tensorflow - 在编译模型之后或之前加载权重是否重要?
- python - 无法使用scrapy从网页中获取不同列表的标题
- web-scraping - 如何更改此公式以进行单元格引用
- database - 过滤地址列以仅显示城市
- reactjs - 图像出现在开发中,但在“REACT”中没有出现在生产中