1

我有一个 Qt 应用程序,我从QAbstractTableModel派生了我自己的模型类。我已经实施了文档中规定的必要方法。当我调用removeRows方法时,我的视图中的更改是正确的(我想要删除的行已被删除)。

但不知何故,模型上的操作似乎没有传播到我在模型中用来存储数据的 QList。当我将存储在 QList 中的值保存到磁盘时,removeRows 似乎没有从其中删除任何内容。

这是我的 removeRows 实现的样子(它基于Advanced Qt Programming , Chapter 3, p.125 一书中的代码):

bool MyModel::removeRows(int row, int count, const QModelIndex&)
{
    beginRemoveRows( QModelIndex(), row, row + count - 1);

    for (int i = 0; i < count; ++i) {
        mMyQList.removeAt(row);
    }

    endRemoveRows();

    return true;
}

我该如何解决?我错过了什么?

谢谢!

4

2 回答 2

1

就像 Frank O. 暗示的那样,如果不看一些代码,就很难知道发生了什么。但是从它的声音来看,这些值并没有从 QList 中删除,仅仅是因为您没有将它们取出。当你从 Widget 转移到 Model/View 类时,你必须自己做。即,在您的 removeRows() 方法中,您必须“手动”从 QList 中删除行。

于 2011-03-27T00:52:20.620 回答
0

事实证明,我的 removeRows 实现没有任何问题。

在显示我的对话框之前,我的单元测试调用了 save 方法。该对话框根本没有调用 save 方法。

难怪更改在视图中可见,而不是在输出文件中......

于 2011-03-27T01:52:03.757 回答