如何检测表视图中的项何时被修改?

时间:2011-09-13 12:41:03

标签: qt4 qtableview qabstracttablemodel

我有这个表视图,其中我在3列上添加不同的项目。这些项目是可编辑的,因此我可以直接在视图中修改它们。


    bool ClothoidTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
    {
        if (index.isValid() && role == Qt::EditRole) {
            int row = index.row();

            ClothoidCurve p = listOfCurves.value(row);

            if (index.column() == 0)
                p.length = value.toFloat();            
            else if (index.column() == 1)
                p.startCurvature = value.toFloat();
            else if (index.column() == 2)
                p.endCurvature = value.toFloat();
            else
                return false;

            listOfCurves.replace(row, p);
            emit(dataChanged(index, index));

            return true;
        }

        return false;
    }

上面的方法在我的表模型中声明,当我添加和修改表中的数据时都会调用它。

我只想在修改表格中的项目时发送信号。我怎么能这样做?有没有办法区分添加和修改?

1 个答案:

答案 0 :(得分:0)

您想知道差异的方式和地点?行为良好的模型在添加新数据之前和之后会发出rowsAboutToBeInsertedrowsInserted。我想(虽然我不确定)新行的数据设置应该在这些调用之间进行。无论如何,它值得一试。否则,您可能能够跟踪上次插入的行,并使用它来区分“添加”和“编辑”。这可能是不完美的,但可能涵盖了大多数用例。