Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QTreeView&;qabstractemodel&;insertRow详细信息理解_Qt_Insertion_Qtreeview_Qabstractitemmodel - Fatal编程技术网

QTreeView&;qabstractemodel&;insertRow详细信息理解

QTreeView&;qabstractemodel&;insertRow详细信息理解,qt,insertion,qtreeview,qabstractitemmodel,Qt,Insertion,Qtreeview,Qabstractitemmodel,我已经根据editabletreemodel示例以及此处的建议实现了我的QTreeView和QAbstractItemModel: 行得通。 但有一点我不明白 为了使我的应用程序在插入子行时正常工作,我必须发出layoutChanged()我必须这样做。如果我不发射-插入子项效果不好:新的子项正确显示在模型中,它被正确保存(保存时),但它不会显示在视图中 editabletreemodel示例不包含“emit layoutChanged()”,它可以很好地插入子项 以下是我的Qabstracte

我已经根据editabletreemodel示例以及此处的建议实现了我的QTreeView和QAbstractItemModel:

行得通。 但有一点我不明白

为了使我的应用程序在插入子行时正常工作,我必须发出layoutChanged()我必须这样做。如果我不发射-插入子项效果不好:新的子项正确显示在模型中,它被正确保存(保存时),但它不会显示在视图中

editabletreemodel示例不包含“emit layoutChanged()”,它可以很好地插入子项

以下是我的QabstracteModel同级类的insertRows方法:

bool ExTree::insertRows(int位置、int行、常量QModelIndex&parent)
{
ExObject*parentItem=getItem(父项);
成功;
开始插入行(父、位置、位置+行-1);
success=parentItem->insertChildren(位置、行、根项目->列计数());
endInsertRows();
如果(成功)发出layoutChanged();
回归成功;
}
这与editabletreeview示例中的几乎相同,唯一的区别是发射

为什么

我想了解,为什么我需要发出layoutChanged(),而editabletreeview不这样做。如果有人能解释这一点,我将不胜感激


我不需要理解为什么发射。我需要理解为什么我需要发出而editabletreeview不需要它。

您是否将自定义委托与重新实现的sizeHint一起使用?删除beginInsertRows和endInsertRows时会发生什么?[Dmitry Sazonov]您是否将自定义委托与重新实现的sizeHint一起使用?“我真的不知道您关于委托的意思。我试着尽可能接近这个例子。我的代码中没有sizeHint函数。未实现,未调用。