【问题标题】:QTreeView / QAbstractItemModel - adding items and using beginInsertRowsQTreeView / QAbstractItemModel - 添加项目并使用 beginInsertRows
【发布时间】:2011-11-16 04:06:02
【问题描述】:

我正在基于 QAbstractItemModel 实现我的模型,并将它与 QTreeView 一起使用来显示分层数据。数据存储在 sqlite 表中。

我的问题是添加子节点时应该如何调用 beginInsertRows。 假设我有一些父节点,它包含 10 个子节点。我想添加新的子节点(最后)。

我是这样做的:

beginInsertRows(parentIndex, currentNodesCount, currentNodesCount);
// actual inserting
endInsertRows()

currentNodesCount 包含值 10,它是此子节点中的行数。 新节点将放置在第 11 位(从 0 开始计数的第 10 位)。

这个逻辑正确吗?

感谢您的帮助。


我也想知道如何使用 beginRemoveRows。

这是否正确:

beginRemoveRows(parentIndex, currentRow, currentRow);
// delete record
endRemoveRows();

currentRow 包含从 0 开始计数的已移除节点列表中的位置。

【问题讨论】:

    标签: qt qt4 qtreeview qabstractitemmodel


    【解决方案1】:

    是的,就是这样。

    这是你唯一的问题吗?

    【讨论】:

    • 好的,谢谢。修改记录后如何刷新视图?发出 dataChanged(.., ..); ?
    • 您会在 Qt 文档 (doc.qt.nokia.com/latest/…) 中找到关于模型子类化的很好的指南。如“可调整大小的模型”部分所述,在大多数情况下 begin**() 和 end**() 应该足以告诉连接视图(或任何其他组件)数据结构已更改。附言如果是这种情况,请不要犹豫,将您的问题标记为“已回答”
    • 你对子类化的评论有一个死链接
    • @SteveLorimer 更新链接:doc.qt.io/qt-5/…
    猜你喜欢
    • 2011-09-29
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多