我正在尝试使用ModelTest调试我的模型(QAbstractItemModel)。而且我无法理解一个断言。
ModelTest中有两个插槽可以拦截由我的模型生成的信号。
插槽/功能1看起来像这样
void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int end )
{
Changing c;
// ...
c.last = model->data ( model->index ( start - 1, 0, parent ) );
c.next = model->data ( model->index ( start, 0, parent ) );
insert.push ( c );
}
插槽2看起来像这样
void ModelTest::rowsInserted ( const QModelIndex & parent, int start, int end )
{
Changing c = insert.pop();
// other asserts ...
(*) Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );
}
我不理解dla的最后一个断言(*)。假设在我的应用程序中我添加了1行。
该行是模型中存储的唯一行。因此,行号将为0。
在我的模型中,添加行之前
beginInsertRows(parentIndex, 0, 0);
那么为什么模型测试需要
等于
我在这里想念什么?请帮忙 :)
最佳答案
该断言背后的想法是检查添加的行之后的第一行是否正确移动。如果在插入的行之后有一些行,则将比较它们的数据。如果没有,则您的模型都应在线
c.next = model->data ( model->index ( start, 0, parent ) );
和在
Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );
应该返回无效(空)的QVariant。如果两者都返回空的QVariant(如应有的那样),则断言成功,因此即使在当前插入后没有行的情况下,也可以提供一定程度的错误检查。
关于c++ - QAbstractItemModel + ModelTest::rowsInserted ASSERTion问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7438539/