QAbstractItemModel + ModelTest::rowsInserted断言问题
QAbstractItemModel + ModelTest::rowsInserted ASSERTion problem
我正试图用ModelTest调试我的模型(QAbstractItemModel)。我不能理解一个断言。
ModelTest中有两个槽,用来截取我的模型产生的信号。
- ModelTest: rowsAboutToBeInserted
- ModelTest: rowsInserted
槽/函数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 ) ) );
}
我不明白最后一个断言(*)。假设在我的应用中,我添加了1行。这一行是存储在我的模型中的唯一一行。因此行号为0。
在我的模型中,在添加行之前,我调用beginInsertRows(parentIndex, 0, 0);
那么为什么modeltest需要
model->data (model->index (start, 0, parent))
等于
model->data (model->index (end + 1,0, c.parent))
我在这里错过了什么?请帮忙:)
这个断言背后的思想是检查添加的行之后的第一行是否被正确移动。如果插入的行之后还有一些行,则比较它们的数据。如果没有,你的模型应该在
行c.next = model->data ( model->index ( start, 0, parent ) );
和
Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );
应该返回无效的(空)QVariant。如果两者都返回空QVariant(就像它们应该的那样),则断言成功,从而提供某种程度的错误检查,即使在当前插入之后没有行。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 断言失败错误,C++中的矢量下标超出范围问题
- 值传递、异常/断言和类设计.批评/问题
- 我遇到此问题,运行程序时出现一个弹出窗口,指出调试断言失败
- 断言在C++问题中失败
- 断言 C++问题失败
- 调试断言失败!奇怪的问题
- Android NDK断言.h问题
- QAbstractItemModel + ModelTest::rowsInserted断言问题