Qt QTreeView根节点下不显示数据(Thinkvd开发日志)

Qt QTreeView根节点下不显示数据(Thinkvd开发日志)_第1张图片

现象描述:当在Clip后返回主界面时,Clip后的记录B会从当前的记录A COPY一份,并在记录B下生成子记录B1、B2。关系如下:
A
B
|--B1
|--B2
此时记录B的子节点与B一块显示不出来,若B1,B2直接为记录A的子节点是没有问题,其记录B新增加的方式与已经存在增加addProfile类似。测试若把B当成A的子记录,如下关系:
A
|--B
  |--B1
  |--B2
这时显示没有问题。

简化代码:
//itemData 相当于B
//item 相当于A, A,B为兄弟节点

itemData = new ImListTreeItem(item);
*itemData = *item;  //COPY data

QModelIndex idx = model()->getItemIndex(item);
//得到当前记录的parent, itemData与item的parent相同
ImListTreeItem *parentItem = model()->getItem(idx.parent());     //由索引找到parent记录
parentItem->insertChildren(parentItem->childCount(), itemData);  //添加itemData为parentItem子记录

这时在model中的data()跟踪无 itemData对应的index

现在改为:index = model()->addItem(itemData, idx.parent());则正常

QModelIndex ImListTreeModel::addItem(ImListTreeItem *item, const QModelIndex &parentIdx)
{
 ImListTreeItem *parent = getItem(parentIdx);
 int position = parent->childCount();
 
 beginInsertRows(parentIdx, position, position );
 parent->insertChildren(position, item);
 endInsertRows();
 return index(position, 0, parentIdx);
}

他们的区别也就是:beginInsertRows(parentIdx, position, position );

不知为什么,在根节点下要用beginInsertRows,若非根节点下不用beginInsertRows也能正常为显示记录



你可能感兴趣的:(测试,qt)