我正在尝试使用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);
为什么modeltest需要
model-> data(model-> index(start,0,parent))
等于
model-> data(model-> index(end + 1,0,c.parent))
我在这里缺少什么?请帮助:)
答案 0 :(得分:1)
这个断言背后的想法是检查添加的第一行是否被正确移动。如果插入后有一些行,则比较它们的数据。如果没有,那么你的模型应该在行
中c.next = model->data ( model->index ( start, 0, parent ) );
并在
Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );
应返回无效(空)QVariant。如果两者都返回空的QVariant(因为它们应该)断言成功,那么即使在当前插入后没有行的情况下也提供一定程度的错误检查。