首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt模型测试,removeRows

Qt模型测试,removeRows
EN

Stack Overflow用户
提问于 2019-03-06 04:24:16
回答 1查看 210关注 0票数 0

我有一个内部结构类似于Simple Tree Model Example的树模型。有一个特殊的数组类型的项,我想为它显示一个索引。我的数据方法如下所示:

代码语言:javascript
复制
QVariant Model::data(const QModelIndex & index, int role ) const
{
    if (!index.isValid())
        return QVariant();

    TreeNode *item = getItem(index);

    if (role == Qt::DisplayRole) {
        return item->text();
    }
    ...

    return QVariant();
}

const QString TreeNode::text() const
{
    if (array) {
        return name() + " [" + QString::number(childNumber()) + "]";
    }
    return mText;
}

我有一个执行节点删除的单元测试,它使用Model Test。问题出现在此测试的最后一行

代码语言:javascript
复制
void ModelTest::rowsRemoved ( const QModelIndex & parent, int start, int end )
{
    Changing c = remove.pop();
    QVERIFY( c.parent == parent );
    QVERIFY( c.oldSize - ( end - start + 1 ) == model->rowCount ( parent ) );
    QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) );
    QVERIFY( c.next == model->data ( model->index ( start, 0, c.parent ) ) );
}

它将移除前的值与移除后的值进行比较。在我的例子中,因为我也显示索引,所以它们不匹配。例如,我在模型中有Item1Item2。如果删除了Item1,则Item2将变为Item1,测试将失败。

我的问题是我的模型实现中有什么地方出了问题吗?我应该以不同的方式处理这种情况吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 17:43:36

QAbstractItemModel中的数据不能只是静默地更改。对于数据已更改的索引,您应该始终发出dataChanged信号。

如果您这样做:

代码语言:javascript
复制
" [" + QString::number(childNumber()) + "]"

然后,您需要在每次更改childNumber()时发出dataChanged信号。因此,如果只能通过QAbstractItemModel::setData更改索引数据,将会容易得多。

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

https://stackoverflow.com/questions/55010975

复制
相关文章

相似问题

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