【问题标题】:Programmatically adding a new row to a QAbstractListModel subclass以编程方式将新行添加到 QAbstractListModel 子类
【发布时间】:2011-01-17 00:08:13
【问题描述】:

在已经实例化的 QAbstractListModel 子类中,如何在每列中添加一行数据,并让关联的 QListView 显示新行?

似乎唯一的方法是在我的模型中重新实现 insertRow 和 setData,然后在另一个函数中以某种顺序将它们组合在一起以添加一行。我必须这样做吗?当然,Qt 必须让添加新行变得更容易。

非常感谢! ——丹妮。

【问题讨论】:

  • 再次看这个问题时,我意识到我写它时简直筋疲力尽:P 我的问题简单来说是:如何向我的 QAbstractItemModel 子类添加新行?

标签: qt qlistview


【解决方案1】:

只需在 beginInsertRows() 和 endInsertRows() 之间更改模型的数据存储即可。

例如,假设您有一个平面列表模型,并且您的模型将数据内部存储在 QVector m_data 中。您想在列表前面添加一行,即在位置 0 处插入一行:

beginInsertRows( QModelIndex(), 0, 0 ); //notify views and proxy models that a line will be inserted
m_data.prepend( somedata ); // do the modification to the model data
endInsertRows(); //finish insertion, notify views/models

【讨论】:

  • 这工作得很好,终于在我的列表视图中看到了一些项目,这是一个令人愉快的突破。然而,我花了一天半的时间试图弄清楚所有这些,现在我的最新问题是试图显示一组 1x4 的数据。目前它只显示一列数据,没有我的列标题。您对出了什么问题有任何指示吗?让 Qt 做一些像列表数据这样简单的事情是多么困难,我几乎完全感到沮丧。--Dany。
  • @nessup:QListView 仅支持一列。如果你想要多个列和标题,你需要使用 QTreeView 或 QTableView。
【解决方案2】:

恐怕你必须那样做。来自docs

为可调整大小的类似列表的数据结构提供接口的模型可以提供insertRows()removeRows() 的实现。

【讨论】:

  • 那些链接失效了
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2014-06-19
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多