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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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();
}
}
}
}