Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从QML调用QAbstractTableModel setData方法_C++_Qt_Qml - Fatal编程技术网

C++ 从QML调用QAbstractTableModel setData方法

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,

我试图在QML <代码> Table VIEW/COD>和我的C++类之间建立一个完全通用的连接,它的子类是QuaseCtTabLimoDele>代码>。到目前为止,我能够通过
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
信号不会使QML
TableView
更新单元格。。。还有什么我遗漏的吗?

我可能会回答你的编辑。您的
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
获取其索引。谢谢你的回答,我想我明白了,但是你认为有任何可用的示例吗?