在代码中编辑时,Qt不会更新多个QTableView单元格

时间:2015-10-29 15:06:53

标签: qt qtableview qabstracttablemodel qsortfilterproxymodel

我有一个简单的逻辑,基本上是这样的:从源模型(我的自定义QAbstractTableModel)过滤了一些条目,并使用QSortFilterProxyModel呈现给用户,filterAcceptsRow只修改了{ {1}}功能。此演示文稿使用简单对话框完成。用户从过滤的条目中选择所需的条目,并且必须更新模型中的所选条目(实际上必须修改两个字段)。所以简化的代码是这样的:

    QModelIndexList selectedRows = myProxyModel->selectionModel()->selectedRows();
    for (int i = 0; i < selectedRows.count(); i++) {
        myProxyModel->setData(myProxyModel->index(selectedRows.at(i).row(), (int) LoanStatusCol, QModelIndex()), (int) ReturnedLoan, Qt::EditRole);
        myProxyModel->setData(myProxyModel->index(selectedRows.at(i).row(), (int) LoanRetEntriesCol, QModelIndex()), (lastEntryNo + 1), Qt::EditRole);
    }

然而,这不起作用。每次行为都很奇怪。我注意到的是,当它到达此循环中的第二个选定行并且在模型中达到setData()代码时:

bool TransactionModel::setData(const QModelIndex &index, const QVariant &value, int role) {
    if (!index.isValid()) {
        return false;
    }

它返回无效索引。但是,当我转换这两个setData()代码行时,一行被更新,但第二行不是 - 由于索引无效。我不知道,我是否正确解释了,但这可能是我的愚蠢错误,因为我是新手。

更新: 由于模型由QList数据组成,其中Transaction是定义条目字段的自定义类,我创建了一个函数,它按列号更新了基础条目(也就是说......)。我使用函数setValueByColumnNo。在使用自定义类列表时,我找不到更好的方法。

bool TransactionModel::setData(const QModelIndex &index, const QVariant &value, int role) {
    if (!index.isValid()) {
        return false;
    }
    if ((role == Qt::DisplayRole) || (role == Qt::EditRole)) {
        transactionData[index.row()].setValueByColumnNo(index.column(), value);  
        emit dataChanged(index, index);
        return true;
    }
    return false;
}

有什么想法吗?

感谢。

0 个答案:

没有答案