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

125 lines
2.9 KiB

#include "QFileList.h"
#include <QDir>
#include <QDesktopServices>
#include <qurl.h>
QFileList::QFileList(QWidget *parent)
: QDockWidget(parent)
{
ui.setupUi(this);
this->setWindowTitle(_S("文件列表"));
m_pFileModel = new QStandardItemModel(0, 1, ui.m_treeViewFiles);
ui.m_treeViewFiles->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); //设置上下文菜单测量
ui.m_treeViewFiles->setHeaderHidden(true);
ui.m_treeViewFiles->setModel(m_pFileModel);
ui.m_treeViewFiles->setAlternatingRowColors(true);
// 双击事件
connect(ui.m_treeViewFiles, &QTreeView::doubleClicked, this, &QFileList::OnDoubleClicked);
// 更新路径
connect(ui.lineEdit, &QLineEdit::textChanged, this, &QFileList::DisplayFileList);
// 调用系统打开文件夹
connect(ui.pushButton, &QPushButton::clicked, this, &QFileList::OnOpenDirWithSys);
}
QFileList::~QFileList()
{
}
void QFileList::OnOpenDirWithSys()
{
QDesktopServices::openUrl(QUrl::fromLocalFile(m_CurrentPath));
}
void QFileList::DisplayFileList(QString path)
{
QDir varDir(path);
if (!varDir.exists())
{
return;
}
varDir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
QFileInfoList varList = varDir.entryInfoList();
m_vecFileList.clear();
foreach(QFileInfo varInfo, varList)
{
m_vecFileList.push_back(varInfo.fileName());
}
// 过滤文件,保留符合标准的文件
int nPos = 0;
foreach(QString str, m_vecFileList)
{
//str.toLower();
QString es = "raw$|xraw$|rawx$|GD$|avi$|mp4$|yuv|MP4|AVI|data";//by wcw04046
nPos = str.indexOf(QRegExp(es), 0);
if (-1 == nPos)
{
m_vecFileList.removeOne(str);
}
}
// 将文件显示到文件列表
int nIndex = 0;
int cnt = m_pFileModel->rowCount();
m_pFileModel->removeRows(0, cnt);
foreach(QString str, m_vecFileList)
{
m_pFileModel->insertRow(nIndex);
m_pFileModel->setData(m_pFileModel->index(nIndex, 0), str);
nIndex++;
}
ui.m_treeViewFiles->resizeColumnToContents(0);
ui.m_treeViewFiles->setAlternatingRowColors(false);//by wcw04046 关闭行交替背景,方便区分选中
ui.m_treeViewFiles->setEditTriggers(QAbstractItemView::NoEditTriggers);//关闭编辑
m_CurrentPath = path; //将当前路径设置为打开路径
ui.lineEdit->setText(path);
}
QString QFileList::GetSelectedFilePath()
{
//QString strSelectedFileName = QString(tr(""));
//if (m_varSelectedModelIndex.row() >= 0
// && m_varSelectedModelIndex.row() < m_vecFileList_Other.size())
//{
//}
return m_pFileModel->data(m_varSelectedModelIndex).toString();
}
QString QFileList::GetCurrentDir()
{
return m_CurrentPath;
}
void QFileList::OnDoubleClicked(const QModelIndex& index)
{
m_varSelectedModelIndex = index;
QDir varDir(m_CurrentPath);
if (m_varSelectedModelIndex.isValid())
{
QString fileFullPath = varDir.absoluteFilePath(GetSelectedFilePath());
emit(playSelectFile(fileFullPath));
qDebug() << fileFullPath;
}
}