#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowIcon(QIcon(":/Resouce/heart.ico"));
// 设置树形结构
m_treeViewModel = new QStandardItemModel(ui->treeView);
m_treeViewModel->setHorizontalHeaderLabels(QStringList() << "文件名称" << "文件路径");
ui->treeView->setModel(m_treeViewModel);
ui->treeView->header()->setStretchLastSection(true);
ui->treeView->hideColumn(1);
ui->treeView->header()->hide();
ui->treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
InitTreeView("E:/MyWorkSpace/Qt/Demo");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitTreeView(QString path)
{
QFileInfo fileInfo(path);
if (!fileInfo.isDir())
{
return;
}
m_treeViewModel->removeRows(0, m_treeViewModel->rowCount());
// 绑定文件夹的图标和文件路径
QStandardItem *item = new QStandardItem(QIcon(":/Resouce/Folder.png"), path.split("/").last());
m_treeViewModel->appendRow(item);
m_treeViewModel->setItem(m_treeViewModel->indexFromItem(item).row(), 1, new QStandardItem(fileInfo.path()));
GetAllFiles(path, item);
}
bool MainWindow::GetAllFiles(QString path, QStandardItem *parentItem)
{
QDir sourceDir(path);
// 文件按时间排序
QStringList filter;
sourceDir.setNameFilters(filter);
QList<QFileInfo> fileInfoList = QList<QFileInfo>(sourceDir.entryInfoList(filter, QDir::AllEntries, QDir::Time));
// 遍历当前文件夹下的文件列表
foreach (QFileInfo fileInfo, fileInfoList)
{
if (fileInfo.fileName() == "." || fileInfo.fileName() == "..")
{
continue;
}
if (fileInfo.isDir())
{
// 如果存在子级,添加子级数据
QStandardItem *item = new QStandardItem(QIcon(":/Resouce/Folder.png"), fileInfo.baseName());
parentItem->appendRow(item);
parentItem->setChild(item->row(), 1, new QStandardItem(fileInfo.filePath()));
GetAllFiles(fileInfo.filePath(), item);
}
else if (fileInfo.isFile())
{
// 如果存在子级,添加子级数据
QStandardItem *item = new QStandardItem(QIcon(":/Resouce/Document.png"), fileInfo.baseName());
parentItem->appendRow(item);
parentItem->setChild(item->row(), 1, new QStandardItem(fileInfo.filePath()));
}
}
return true;
}
void MainWindow::GetItem(QStandardItem *item)
{
Q_ASSERT(item);
// 如果该行包含要查找的字符串,展开所有的父节点并把背景设为红色
if (item->text().contains(ui->lineEdit->text()))
{
item->setBackground(QBrush(qRgb(255, 125, 125)));
ParentExpand(item);
}
else
{
item->setBackground(QBrush(qRgb(255, 255, 255)));
}
// 如果有子项,继续查找所有子项
if (item->hasChildren())
{
for (int i = 0; i < item->rowCount(); i++)
{
item->setSelectable(true);
QStandardItem *childItem = item->child(i);
GetItem(childItem);
}
}
}
void MainWindow::ParentExpand(QStandardItem *item)
{
// 如果有父节点,就展开
if (item->parent() != nullptr)
{
QStandardItem *parentItem = item->parent();
ui->treeView->expand(parentItem->index());
ParentExpand(parentItem);
}
}
void MainWindow::on_Btn_Search_clicked()
{
// 所有行全部折叠
ui->treeView->collapseAll();
if (!ui->lineEdit->text().isEmpty())
{
// 遍历查找所有行
for (int i = 0; i < m_treeViewModel->rowCount(); i++)
{
GetItem(m_treeViewModel->item(i));
}
}
else
{
for (int i = 0; i < m_treeViewModel->rowCount(); i++)
{
m_treeViewModel->item(i)->setBackground(QBrush(qRgb(255, 255, 255)));
}
}
}
Sakuya__
- 粉丝: 401
- 资源: 19
最新资源
- s32k144 uds bootloader软件,包含上位机 上位机为周立功ZCANPRO脚本,操作简单, 非常适合学习调试
- 信息融合与状态估计 主要是针对多传感器多时滞(包括状态之后和观测滞后)系统,基于改进后的协方差交叉融合(ICI)方法实现对状态的
- 用友 畅捷通 T+ 19.0 数据字典
- IRFD12N06RLESM-VB一种N-Channel沟道TO252封装MOS管
- IRLR3105TRPBF-VB一种N-Channel沟道TO252封装MOS管
- Cmake工具调用HighTec编译器实现自动生成makefile
- SVG APF有源滤波器全套系统资料 包含: 150w电源(原理图 PCB BOM 制版文件) FPGA核心控制板
- cuda by example 书中例子
- IRFR1205NTRLPBF-VB一种N-Channel沟道TO252封装MOS管
- EVE-NG关联文件P-Link
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈