You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AppFlowPost/GUIDialog/FileDialogDirectory.cpp

858 lines
27 KiB
C++

#include "FileDialogDirectory.h"
#include "ui_FileDialogDirectory.h"
#include "OperatorsInterface/ParaWidgetInterfaceOperator.h"
#include <QDebug>
#include <QDesktopServices>
#include <QStandardItemModel>
#include <QDir>
#include <QCollator>
//QDirModel
#include <QDesktopServices>
#include <QStandardItemModel>
namespace GUI
{
const QString FileDialogDirectory::fatherNodeText = "FileName"; //根节点名称
const QString FileDialogDirectory::splitExt = "@"; //用于文件头类型分割符如12@dat
FileDialogDirectory::FileDialogDirectory(EventOper::ParaWidgetInterfaceOperator* oper, QWidget *parent)
: GUIDialogBase(oper,"FileDialogDirectory", parent)
{
_ui = new Ui::FileDialogDirectory;
_ui->setupUi(this);
//ini ui
initUi();
//
connect(_ui->OKChoice, SIGNAL(clicked()), this, SLOT(onOkClicked()));
connect(_ui->Cancel, SIGNAL(clicked()), this, SLOT(onCancelClicked()));
connect(_ui->back, SIGNAL(clicked()), this, SLOT(onBackClicked()), Qt::UniqueConnection);
connect(_ui->front, SIGNAL(clicked()), this, SLOT(onFrontClicked()), Qt::UniqueConnection);
connect(_ui->up, SIGNAL(clicked()), this, SLOT(onUpPushButtonClicked()));
connect(_ui->FileType, SIGNAL(currentIndexChanged(QString)), this, SLOT(onFilterChange(QString)));
//
connect(_ui->PathTree, SIGNAL(doubleClicked(const QModelIndex)), this, SLOT(pathTreeViewDoubleClick(const QModelIndex)));
//
_fileTree = _ui->FileTree;
_fileTree->setSelectionMode(QAbstractItemView::SingleSelection); // 仅限单选
_fileTree->setSelectionBehavior(QAbstractItemView::SelectRows);
connect(_fileTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(onDoubleClickedObject(QTreeWidgetItem*, int)));
connect(_fileTree, SIGNAL(itemSelectionChanged()), this, SLOT(onItemSelectionChanged()));
QStringList names;
names << FileDialogDirectory::fatherNodeText;
_builtinItem = new QTreeWidgetItem(_fileTree, names);
//set path
_docPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
_deskTopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
userName = "";
rootName = "";
#ifdef Q_OS_UNIX
userPath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
rootPath = "/";
userName = userPath.section("/", -1, -1);
rootName = "Computer";
#endif
SetDirectoryForDrives();
// ini path
_currentFilePath = _ui->FilePath->text();
_currentIndex = _dirModel->index(_currentFilePath);
//
filterChange(_ui->FileType->currentText());
refreshRightView();
}
FileDialogDirectory::~FileDialogDirectory()
{
_fileTree->clear();
_pathBackVec.clear();
_pathFrontVec.clear();
}
void FileDialogDirectory::initUi()
{
//ini combox
_ui->FilePath->setReadOnly(true);
_currentFilePath = QDir::cleanPath(qApp->applicationDirPath());
_treeWidgetFilename = _currentFilePath;
_ui->FilePath->setText(_currentFilePath);
//ini button icons
QIcon iconBack;
iconBack.addFile(QString::fromUtf8(":/icons/back.png"));
QIcon iconFront;
iconFront.addFile(QString::fromUtf8(":/icons/front.png"));
QIcon iconUp;
iconUp.addFile(QString::fromUtf8(":/icons/up.png"));
_ui->back->setIcon(iconBack);
_ui->front->setIcon(iconFront);
_ui->up->setIcon(iconUp);
_ui->back->setEnabled(false);
_ui->front->setEnabled(false);
//ini spliter
_ui->splitter->setStretchFactor(0, 3);
_ui->splitter->setStretchFactor(1, 7);
}
void FileDialogDirectory::BuildFilePathTree()
{
_fileTree->clear();
QStringList names;
names << FileDialogDirectory::fatherNodeText;
_builtinItem = new QTreeWidgetItem(_fileTree, names);
QTreeWidgetItem* parentItem = _builtinItem;
QMap<QString, QVector<QString>>::iterator it;
for (it = _fileGroup.begin(); it != _fileGroup.end(); it++)
{
QString FilePath = it.key();
QVector<QString> FileNames = it.value();
QTreeWidgetItem *itm = new QTreeWidgetItem(_fileTree);
itm->setText(0, FilePath);
itm->setData(0, Qt::UserRole + 1, "Group");
if (FileNames.count() > 1)
{
parentItem->addChild(itm);
for (int j = 0; j < FileNames.count(); j++)
{
QTreeWidgetItem *itmchild = new QTreeWidgetItem(itm);
itmchild->setText(0, FileNames[j]);
itmchild->setData(0, Qt::UserRole + 1, "Child");
itm->addChild(itmchild);
}
}
}
}
void FileDialogDirectory::initWin(QString dirStr)
{
if (dirStr.isEmpty()) return;
QDir dir(dirStr);
if (!dir.exists()) return;
_ui->FilePath->setText(dirStr);
filterChange(_ui->FileType->currentText());
refreshRightView();
_currentIndex = _dirModel->index(dirStr);
_treeWidgetFilename = dirStr;
}
QString FileDialogDirectory::appendSlash(QString curPath)
{
int index = curPath.lastIndexOf("/", curPath.size());
if ((index <= 0) && (curPath.size() > 3))
{
curPath = curPath + "/";
}
return curPath;
}
void FileDialogDirectory::openFilePath(bool recordHistory)
{
// 前进后退不记录历史路径信息,正常打开文件记录文件信息并添加"\"后缀
if (recordHistory)
{
QString strPath = _currentFilePath;
if (strPath.right(1) == "/")
{
strPath = _currentFilePath.mid(0, _currentFilePath.length() - 1);
}
_pathBackVec.push_back(strPath);
_ui->back->setEnabled(true);
}
_currentFilePath = _treeWidgetFilename;
_ui->FilePath->setText(_currentFilePath);
if (!_currentFilePath.isEmpty())
{
_ui->FileName->setText("");
filterChange(_ui->FileType->currentText());
}
}
QString FileDialogDirectory::GetFileExt(QString fileName)
{
QFileInfo fileInfo;
fileInfo = QFileInfo(fileName);
return fileInfo.suffix();
}
QStringList FileDialogDirectory::GetFilterFromString(const QString& filter)
{
QString f = filter;
int start, end;
start = filter.indexOf('(');
end = filter.lastIndexOf(')');
if (start != -1 && end != -1)
{
f = f.mid(start + 1, end - start - 1);
}
else if (start != -1 || end != -1)
{
f = QString();
}
QStringList fs = f.split(QRegExp("[\\s+;]"), QString::SkipEmptyParts);
return fs;
}
void FileDialogDirectory::onDoubleClickedObject(QTreeWidgetItem* pitem, int column)
{
QString name = pitem->text(column);
int rowNum = 0;
#ifdef Q_OS_WIN
while (true)
{
QModelIndex index = _currentIndex.child(rowNum, 0);
if (!index.isValid())
{
//error
return;
}
if (index.data() == name)
{
int dotIndex = name.lastIndexOf(".");
QString fileExt = name.mid(dotIndex, name.length() - dotIndex);
// 包含在当前过滤文件类型中即可
if (_ui->FileType->currentText().indexOf(fileExt) != -1)
{
break;
}
func_PathTreeViewDoubleClick(index);
return;
}
rowNum++;
}
#endif
#ifdef Q_OS_UNIX
while (true)
{
QString fileExt = name.right(name.indexOf("."));
if (_ui->FileType->currentText().indexOf(fileExt) != -1)
{
break;
}
unix_PathTreeViewDoubleClick(name);
return;
rowNum++;
}
#endif
_ui->OKChoice->click();
}
void FileDialogDirectory::onFilterChange(QString filter)
{
_filterList.clear();
_filterList = GetFilterFromString(filter);
enterDirectory();
refreshRightView();
}
void FileDialogDirectory::filterChange(QString filter)
{
_filterList.clear();
_filterList = GetFilterFromString(filter);
enterDirectory();
}
void FileDialogDirectory::GetFileList(QString dirName)
{
_fileList.clear();
QFileInfo fileInfo;
QString filePath;
fileInfo = QFileInfo(dirName);
filePath = fileInfo.absolutePath();
QDir dir(dirName);
if (!dir.exists())
return;
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot); //QDir::Dirs;
dir.setSorting(QDir::Name);
dir.setNameFilters(_filterList);
QFileInfoList list = dir.entryInfoList();
if (list.count() > 0)
{
for (int i = 0; i < list.count(); i++)
{
_fileList.push_back(list.at(i).fileName());
}
}
//对文件进行大小排序
QCollator collator;
collator.setNumericMode(true);
std::sort(_fileList.begin(), _fileList.end(),
[&collator](const QString & str1, const QString & str2)
{
return collator.compare(str1, str2) < 0;
});
}
QString FileDialogDirectory::getCurrentFullPath()
{
return _currentFilePath + _selectionText;
}
bool FileDialogDirectory::isGourpFiles(const QString path)
{
if (path.indexOf("...") > 0)
{
return true;
}
return false;
}
void FileDialogDirectory::iniFileFilterType(QString filterString)
{
_ui->FileType->insertItem(0, filterString);
_ui->FileType->setCurrentIndex(0);
}
void FileDialogDirectory::onCancelClicked()
{
close();
}
void FileDialogDirectory::onOkClicked()
{
if (_selectionText.isEmpty()) return;
// 暂时解决 C:/Users/Administrator/Desktop/valve.cgns/valve.cgns
// 路径中文件名字重复的问题
QString f = _currentFilePath + _selectionText;
QStringList fs = f.split(QRegExp("[/]"), QString::SkipEmptyParts);
if (fs[fs.count() - 1] == fs[fs.count() - 2])
{
QString path = _currentFilePath.mid(0, _currentFilePath.size() - 1);
int index = path.lastIndexOf("/");
_currentFilePath = path.left(index + 1);
}
//执行操作器
if (_oper) {
_oper->setArgs("filePath", _currentFilePath);
_oper->setArgs("files", getCurrentFullPath());
_oper->execProfession();
}
accept();
}
void FileDialogDirectory::enterDirectory()
{
QString tempFileHeader;
_currentFilePath = _ui->FilePath->text().trimmed();
if (_currentFilePath.right(1) != "/")
_currentFilePath += "/";
GetFileList(_currentFilePath);
_fileGroup.clear();
_headFile.reserve(_fileList.count() * 2);
_headFile.clear();
for (int i = 0; i < _fileList.count(); i++)
{
QString fileName = _fileList.at(i);
QString fileExt = GetFileExt(fileName);
QString fileHead, fileHeadExt;
int endPos = fileName.length() - fileExt.length() - 2, beginPos;
for (beginPos = endPos; beginPos >= 0; --beginPos) {
if (fileName[beginPos] > '9' || fileName[beginPos] < '0') break;
}
fileHead = fileName.mid(0, beginPos + 1);
fileHeadExt = fileHead + FileDialogDirectory::splitExt + fileExt;
if (_headFile.contains(fileHeadExt) == false)
{
_headFile.insert(fileHeadExt, 1);
}
else
{
_headFile[fileHeadExt] += 1;
}
}
QString headExt, headFront;
QMap<QString, int>::iterator it;
for (int i = 0; i < _fileList.count(); i++)
{
QString fileName = _fileList.at(i);
QString fileExt = GetFileExt(fileName);
QString fileHead, fileHeadExt, NodeText;
int endPos = fileName.length() - fileExt.length() - 2;
int beginPos;
for (beginPos = endPos; beginPos >= 0; --beginPos) {
if (fileName[beginPos] > '9' || fileName[beginPos] < '0') break;
}
fileHead = fileName.mid(0, beginPos + 1);
fileHeadExt = fileHead + FileDialogDirectory::splitExt + fileExt;
if (_headFile[fileHeadExt] > 1)
{
NodeText = fileHead + "..." + fileExt;
}
else
{
NodeText = fileName;
}
if (_fileGroup.contains(NodeText) == false)
_fileGroup.insert(NodeText, QVector<QString>());
_fileGroup[NodeText].push_back(fileName);
}
BuildFilePathTree();
}
void FileDialogDirectory::SetDirectoryForDrives()
{
QStandardItemModel* tep_model = new QStandardItemModel;
#ifdef Q_OS_WIN
_dirModel = new QDirModel;
QStringList pathTreeHead;
pathTreeHead.append("Disk List");
tep_model->setHorizontalHeaderLabels(pathTreeHead);
_dirModel->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
_dirModel->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
int num_row = _dirModel->rowCount(QModelIndex());
tep_model->appendRow(new QStandardItem(tr("DeskTop")));
tep_model->appendRow(new QStandardItem(tr("My Documents")));
for (int i = 0; i < num_row; i++)
{
tep_model->appendRow(new QStandardItem(_dirModel->index(i, 0).data().toString()));
}
#endif
#ifdef Q_OS_UNIX
_dirModel = new QDirModel;
_dirModel->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
_dirModel->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
QString userPath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
QString userName = userPath.section("/", -1, -1);
tep_model->appendRow(new QStandardItem(rootName));
tep_model->appendRow(new QStandardItem(userName));
#endif
_ui->PathTree->setModel(tep_model);
_ui->PathTree->setAnimated(true);
_ui->PathTree->setIndentation(20);
_ui->PathTree->setSortingEnabled(false);
//_ui->PathTree->header()->hide();
_ui->PathTree->hideColumn(1);
_ui->PathTree->hideColumn(2);
_ui->PathTree->hideColumn(3);
_ui->PathTree->setItemsExpandable(false);
_ui->PathTree->resizeColumnToContents(0);
_ui->PathTree->setEditTriggers(QAbstractItemView::EditTrigger::NoEditTriggers);
_ui->PathTree->show();
}
void FileDialogDirectory::onItemSelectionChanged()
{
QList<QTreeWidgetItem*> selectItems = _fileTree->selectedItems();
if (selectItems.count() > 0)
{
_selectionText = "";
}
for (int i = 0; i < selectItems.count(); i++)
{
QTreeWidgetItem *curitem = selectItems.at(i);
if (curitem->text(0).contains("FileName"))
{
continue;
}
if (i == selectItems.size() - 1)
{
_selectionText += curitem->text(0);
}
else
{
_selectionText += curitem->text(0);
_selectionText += ";";
}
}
_ui->FileName->setText(_selectionText);
}
void FileDialogDirectory::func_PathTreeViewDoubleClick(const QModelIndex& index)
{
_currentIndex = index;
if ((index.data().toString() == ".") | (index.data().toString() == ".."))
return;
_treeWidgetFilename = FindFullFilename(index);
if (_treeWidgetFilename.indexOf("C:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "C:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "C:");
}
else if (_treeWidgetFilename.indexOf("D:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "D:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "D:");
}
else if (_treeWidgetFilename.indexOf("E:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "E:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "E:");
}
else if (_treeWidgetFilename.indexOf("F:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "F:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "F:");
}
else if (_treeWidgetFilename.indexOf("G:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "G:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "G:");
}
else if (_treeWidgetFilename.indexOf("H:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "H:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "H:");
}
else if (_treeWidgetFilename.indexOf("I:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "I:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "I:");
}
else if (_treeWidgetFilename.indexOf(tr("DeskTop")) >= 0)
{
_treeWidgetFilename = _deskTopPath;
}
else if (_treeWidgetFilename.indexOf(tr("My Documents")) >= 0)
{
_treeWidgetFilename = _docPath;
}
else return;
openFilePath(true);
refreshRightView();
}
void FileDialogDirectory::unix_PathTreeViewDoubleClick(QString itemName)
{
_treeWidgetFilename = _ui->FilePath->text();
if (_treeWidgetFilename != "/")
_treeWidgetFilename += "/";
_treeWidgetFilename += itemName;
openFilePath(true);
refreshRightView();
}
void FileDialogDirectory::pathTreeViewDoubleClick(const QModelIndex& index)
{
#ifdef Q_OS_WIN
QString cur_name = index.data().toString();
if ((cur_name == tr("DeskTop")) || (cur_name == tr("My Documents")))
{
_treeWidgetFilename = cur_name;
if (cur_name == tr("DeskTop"))
_currentIndex = _dirModel->index(_deskTopPath);
else
_currentIndex = _dirModel->index(_docPath);
}
else
{
int i;
for (i = 0; i < _dirModel->rowCount(QModelIndex()); i++)
{
if (_dirModel->index(i, 0).data().toString() == index.data().toString())
{
_currentIndex = _dirModel->index(i, 0);
break;
}
}
if (i == _dirModel->rowCount(QModelIndex()))
return;
qDebug() << index.parent().data().toString() << endl;
if ((index.data().toString() == ".") | (index.data().toString() == ".."))
return;
_treeWidgetFilename = FindFullFilename(index);
}
if (_treeWidgetFilename.indexOf("C:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "C:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "C:");
}
else if (_treeWidgetFilename.indexOf("D:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "D:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "D:");
}
else if (_treeWidgetFilename.indexOf("E:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "E:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "E:");
}
else if (_treeWidgetFilename.indexOf("F:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "F:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "F:");
}
else if (_treeWidgetFilename.indexOf("G:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "G:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "G:");
}
else if (_treeWidgetFilename.indexOf("H:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "H:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "H:");
}
else if (_treeWidgetFilename.indexOf("I:") != -1)
{
if (-1 == _treeWidgetFilename.indexOf("/", 1))
{
_treeWidgetFilename = "I:";
}
else
_treeWidgetFilename.replace(0, _treeWidgetFilename.indexOf("/", 1), "I:");
}
else if (_treeWidgetFilename.indexOf(tr("DeskTop")) >= 0)
{
_treeWidgetFilename = _deskTopPath;
}
else if (_treeWidgetFilename.indexOf(tr("My Documents")) >= 0)
{
_treeWidgetFilename = _docPath;
}
else return;
openFilePath(true);
#endif
#ifdef Q_OS_UNIX
QString cur_name = index.data().toString();
if ((cur_name == rootName) || (cur_name == userName))
{
_treeWidgetFilename = cur_name;
}
if (_treeWidgetFilename == rootName)
{
_treeWidgetFilename = rootPath;
}
else if (_treeWidgetFilename == userName)
{
_treeWidgetFilename = userPath;
}
else return;
qDebug() << _treeWidgetFilename << endl;
openFilePath(true);
#endif
refreshRightView();
}
QString FileDialogDirectory::FindFullFilename(const QModelIndex& index)
{
if (index.data().toString() == NULL) return NULL;
return FindFullFilename(index.parent()) + "/" + index.data().toString();
}
void FileDialogDirectory::refreshRightView()
{
QDir dir(_currentFilePath);
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
QFileInfoList list = dir.entryInfoList();
QStyle* style = QApplication::style();
QIcon icon = style->standardIcon(QStyle::SP_DirIcon);
for (int iCnt = 0; iCnt < list.size(); ++iCnt)
{
QTreeWidgetItem * item = new QTreeWidgetItem(_fileTree);
item->setText(0, list.at(list.size() - 1 - iCnt).fileName());
item->setIcon(0, icon);
_fileTree->addTopLevelItem(item);
}
}
void FileDialogDirectory::onUpPushButtonClicked()
{
#ifdef Q_OS_WIN
if (_currentIndex.parent().isValid())
{
_currentIndex = _currentIndex.parent();
QDir dir(_treeWidgetFilename);
if (dir.cdUp())
{
_treeWidgetFilename = dir.absolutePath();
openFilePath(true);
refreshRightView();
}
}
#endif
#ifdef Q_OS_UNIX
QString str = _ui->FilePath->text();
QStringList tepList = str.split("/", QString::SkipEmptyParts);
if (tepList.count() >= 1)
{
QDir dir(_treeWidgetFilename);
if (dir.cdUp())
{
_treeWidgetFilename = dir.absolutePath();
openFilePath(true);
refreshRightView();
}
}
#endif
}
void FileDialogDirectory::onBackClicked()
{
if (_pathBackVec.size() > 0)
{
QString strPath;
if (_currentFilePath.right(1) == "/")
{
strPath = _currentFilePath.mid(0, _currentFilePath.length() - 1);
}
_pathFrontVec.push_back(strPath); //前进列表新增
_ui->front->setEnabled(true); //前进键可用
_currentFilePath = _pathBackVec.back();
_pathBackVec.pop_back(); //后退列表更新
if (_pathBackVec.size() == 0)
{
_ui->back->setEnabled(false); //后退键不可用
}
_currentIndex = _dirModel->index(_currentFilePath);;
QDir dir(_treeWidgetFilename);
if (dir.cd(_currentFilePath))
{
_treeWidgetFilename = _currentFilePath;
openFilePath(false);
refreshRightView();
}
}
}
void FileDialogDirectory::onFrontClicked()
{
if (_pathFrontVec.size() > 0)
{
QString strPath;
if (_currentFilePath.right(1) == "/")
{
strPath = _currentFilePath.mid(0, _currentFilePath.length() - 1);
}
_pathBackVec.push_back(strPath); //后退列表新增
_ui->back->setEnabled(true); //后退键可用
_currentFilePath = _pathFrontVec.back();
_pathFrontVec.pop_back(); //前进列表更新
if (_pathFrontVec.size() == 0)
{
_ui->front->setEnabled(false); //前进键不可用
}
_currentIndex = _dirModel->index(_currentFilePath);;
QDir dir(_treeWidgetFilename);
if (dir.cd(_currentFilePath))
{
_treeWidgetFilename = _currentFilePath;
openFilePath(false);
refreshRightView();
}
}
}
}