gpt4 book ai didi

c++ - QAbstractItemModel + ModelTest::rowsInserted ASSERTion问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:22 24 4
gpt4 key购买 nike

我正在尝试使用 ModelTest 调试我的模型 (QAbstractItemModel)。我无法理解一种说法。

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

  1. ModelTest::rowsAboutToBeInserted
  2. 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 ) ) );
}

我不明白 dla 最后的断言 (*)。假设我在我的应用程序中添加了 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(因为它们应该)断言成功,因此即使在当前插入后没有行的情况下也提供某种程度的错误检查。

关于c++ - QAbstractItemModel + ModelTest::rowsInserted ASSERTion问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com