我遇到一个错误,QTreeView 无法正确显示目录、文件和图标。 我在 Github 上的代码
见下图:
QTreeView树形文件夹从json数据显示,从图中可以看到,
.qmake.stash
应该位于文件位置,但现在.qmake.stash
位于目录位置,release
应该是一个目录,但是现在release
是一个文件,debug和release的图标无法正确显示。
我认为它与下面的代码相关,下面的代码来自 make-tree-folder-from-qtreeview-or-qtreewidget。
通话功能为:
appendToModel(&model, name.split("/", Qt::SkipEmptyParts), LastModifiedTime);
MyWidget::appendToModel 函数是:
void MyWidget::appendToModel(QStandardItemModel *model, const QStringList & list, const QString & LastModifiedTime){
parentItem = model->invisibleRootItem();
for(QStringList::const_iterator it = list.begin(); it != list.end(); ++it)
{
item = findChilItem(parentItem, *it);
if(item){
parentItem = item;
continue;
}
item = new QStandardItem(*it);
item->setEditable(false);
if(std::next(it) == list.end()){
item->setIcon(provider.icon(QFileIconProvider::File));
parentItem->appendRow({item, new QStandardItem(LastModifiedTime)});
}
else{
item->setIcon(provider.icon(QFileIconProvider::Folder));
parentItem->appendRow(item);
}
parentItem = item;
}
}
和
QStandardItem* MyWidget::findChilItem(QStandardItem* it, const QString & text){
if(!it->hasChildren())
return nullptr;
for(int i=0; i< it->rowCount(); i++){
if(it->child(i)->text() == text)
return it->child(i);
}
return nullptr;
}
但是我找不到错误在哪里,当我调试时,输出是数字而不是目录和文件的名称。
请帮我解决这个问题。谢谢你。