实现类似Windows文件管理器的功能,左边treeview文件夹列表,右边列出所有文件。
关于文件重命名:
- 左边文件树只可以右键重命名,禁掉双击编辑功能。
- 右边文件重命名通过EditTrigger设置。
左边treeview的数据模型为:
QSortFilterProxyModel *filterModel
MyLeftFileView::MyLeftFileView(QFileSystemModel *sourceModel) {
filterModel = new QSortFilterProxyModel();
filterModel->setSourceModel(sourceModel);
setModel(filterModel);
setEditTriggers(QAbstractItemView::NoEditTriggers);
}
开始使用的这种方法
void MyLeftFileView::triggerRename()
{
QModelIndexList indexList = selectionModel()->selectedRows();
this->edit(filterModel->mapToSource(indexList.at(0)));
}
运行后无法实现rename,查了output发现提示错误信息:
edit: index was invalid
edit: editing failed
想了半天,原来是filterModel->mapToSource(indexList.at(0))这句话的问题,这里返回的是sourceModel的index,而MyLeftFileView的model是QSortFilterProxyModel ,修改如下后运行正确。
void MyLeftFileView::triggerRename()
{
QModelIndexList indexList = selectionModel()->selectedRows();
this->edit(indexList.at(0));
}