首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QAbstractItemModel +模型测试::rowsInserted ASSERTion问题

QAbstractItemModel +模型测试::rowsInserted ASSERTion问题
EN

Stack Overflow用户
提问于 2011-09-15 23:17:23
回答 1查看 1.2K关注 0票数 2

我正在尝试用QAbstractItemModel调试我的模型( ModelTest )。我不明白一个断言。

ModelTest中有两个插槽拦截我的模型产生的信号。

  1. ModelTest::rowsAboutToBeInserted
  2. ModelTest::rowsInserted

槽/函数1如下所示

代码语言:javascript
复制
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 );
}

第二插槽是这样的

代码语言:javascript
复制
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。

在添加调用的行之前,在我的模型中

代码语言:javascript
复制
beginInsertRows(parentIndex, 0, 0);

那么为什么模型测试需要

模型->数据(模型->索引(开始,0,父))

相等于

模型->数据(模型->索引( end + 1,0,c.parent ))

我在这里错过了什么?(请帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-15 23:46:31

这个断言背后的思想是检查添加的第一行是否被正确移动。如果插入后有一些行,则比较它们的数据。如果没有,您的模型应该都在行

代码语言:javascript
复制
c.next = model->data ( model->index ( start, 0, parent ) );

和在

代码语言:javascript
复制
Q_ASSERT ( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) );

应该返回无效(空) QVariant。如果两者都返回空的QVariant断言(正如它们应该的那样),那么即使在当前插入后没有行的情况下,也会提供某种级别的错误检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7438539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档