我正在尝试用QAbstractItemModel调试我的模型( ModelTest )。我不明白一个断言。
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 );
}第二插槽是这样的
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);那么为什么模型测试需要
模型->数据(模型->索引(开始,0,父))
相等于
模型->数据(模型->索引( end + 1,0,c.parent ))
我在这里错过了什么?(请帮助:)
发布于 2011-09-15 23:46:31
这个断言背后的思想是检查添加的第一行是否被正确移动。如果插入后有一些行,则比较它们的数据。如果没有,您的模型应该都在行
c.next = model->data ( model->index ( start, 0, parent ) );和在
Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );应该返回无效(空) QVariant。如果两者都返回空的QVariant断言(正如它们应该的那样),那么即使在当前插入后没有行的情况下,也会提供某种级别的错误检查。
https://stackoverflow.com/questions/7438539
复制相似问题