6

有没有办法将 QStandardItemModel 复制到另一个 QStandardItemModel?还是我必须遍历每个项目并将其附加到另一个模型?

4

2 回答 2

7

一个项目只能由一个模型拥有。这就是为什么您需要创建每个项目的副本并将其放置到另一个模型中。您可以使用方法来做到这一点QStandardItem::clone

这是单列模型的示例:

void copy(QStandardItemModel* from, QStandardItemModel* to)
{
   to->clear();
   for (int i = 0 ; i < from->rowCount() ; i++)
   {
      to->appendRow(from->item(i)->clone());
   }
}

编辑:如果您想在链接视图中保留标题数据和列大小,
请使用to->removeRows(0, to->rowCount ());而不是。to->clear();

于 2014-09-17T07:42:50.560 回答
1

您可以通过以下步骤复制现有项目:

  1. 获取现有项目。
  2. 创建新项目。
  3. 将现有项目的必要数据角色设置为新项目。
  4. 对标志做同样的事情。

或者干脆使用QStandardItem::clone()方法。并在必要时重新实现它。

于 2014-09-17T08:44:37.543 回答