本文主要是介绍仿QFileSystemModel将文件目录在QTreeView中显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
因为工作需要显示指定文件下的文件夹下的目录,但是QFileSystemModely不熟重写的时候没有达到指定的效果,所以用其他方法做了个类似的:
void MainWindow::refreshTree()
{
QString path ="X:/XXXX/XXXX/Tencent Files";
newfile= new FileTree(); //设置根节点信息
QStringList strlist = path.split("/");
QString name = strlist.at(strlist.count() - 1);
newfile->setFileName(name); //文件名
newfile->setPathName(path); //文件路径
GetAllFileFolder(NULL, path);//递归获取文件目录并将目录按层保存
appendNode(NULL, m_PFile); //添加到treeView
}
void MainWindow::GetAllFileFolder(FileTree* pfile, QString dirPath)
{
QDir dir(dirPath);
FileTree* file; //自定义用来保存文件信息
QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
for(int i = 0; i != folder_list.size(); i++)
{
if(folder_list.at(i).fileName() == "." || folder_list.at(i).fileName() == "..") continue;
QString name = folder_list.at(i).absoluteFilePath();
file = new FileTree();
QString fileName = folder_list.at(i).fileName();
QString pathName = folder_list.at(i).filePath();
file->setFileName(fileName);
file->setPathName(pathName);
addNode(pfile, file);
GetAllFileFolder(file, name);
}
}
void MainWindow::addNode(FileTree *aPFile, FileTree *afile) //保存节点
{
FileTree* file = aPFile;
if(m_PFile == NULL)
{
m_PFile = newfile;
}
if(file == NULL)
{
file = m_PFile;
}else{
}
file->addSubIten(afile);
}
void MainWindow::appendNode(QStandardItem *pitem, FileTree *node)
{
QStandardItem* item = new QStandardItem;
item->setText(node->fileName());
item->setData(qVariantFromValue((int)(node)), Qt::UserRole);
if (pitem == NULL)
{
m_itemModel->appendRow(item);
}else{
pitem->appendRow(item);
}
for(int i = 0; i <node->itemCount(); i++)
{
appendNode(item, node->at(i));
}
}
效果图:
缺点是不能实时监测指定文件夹下目录的变化,所以初始化的时候获取目录总个数开个线程利用定时器判断目录个数是否发生变化,然后重新刷新组织树
下载:https://download.csdn.net/download/u010304326/10824828
这篇关于仿QFileSystemModel将文件目录在QTreeView中显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!