#include "MainWindow.h"
#include "ui_MainWindow.h"
//#include <pwd.h>
#include <unistd.h>
#include <QKeyEvent>
#include "TextDlg.h"
#include "ImageDlg.h"
#include "RenameDlg.h"
#include <QCheckBox>
#include <QStandardPaths>
#define MYDELETE(p) {if (p) { delete p; p = NULL;}}
#define MYDELETES(p) {if (p) { delete[] p; p = NULL;}}
#define QT_VERSION521
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
//0. 初始化变量
iniVar();
//1. 初始化界面
ui->setupUi(this);
initUi();
//2. 创建文件资源的模型
createFileModel();
//3. 分割主窗口
createSplitter();
//4. 创建左侧树形文件管理器
createQTreeWidget();
//5. 创建右侧的列表窗口视图
createQTableView();
//6. 创建右侧的图标窗口视图
createQListView();
}
MainWindow::~MainWindow()
{
delete ui;
}
//初始化边
void MainWindow::iniVar()
{
m_pItem = NULL;
m_pThread = NULL;
m_pOldItem = NULL;
m_pFileModel = NULL;
m_iActionState = 0;
m_pProgressBar = NULL;
MYDELETE(m_pThread);
m_pThread = new FileThread(this);
connect(m_pThread, SIGNAL(copyAndCutFinished()), this, SLOT(onCopyAndCutFinished()));
connect(m_pThread, SIGNAL(chooseCoverFileOrDir(bool, QString)), this, SLOT(onChooseCoverFileOrDir(bool, QString)));
connect(this, SIGNAL(chooseCoverFinished(int)), m_pThread, SLOT(onChooseCoverFinished(int)));
}
//初始化控件
void MainWindow::initUi()
{
//选中列表按钮
ui->tbList->setChecked(true);
ui->tbList->setFocus();
//隐藏图标按钮
ui->tbIcon->setChecked(false);
}
//创建文件资源的模型
void MainWindow::createFileModel()
{
MYDELETE(m_pFileModel);
m_pFileModel = new QFileSystemModel(this);
m_pFileModel->setReadOnly(false);
m_pFileModel->setFilter(QDir::AllEntries | QDir::NoDot);
//默认排序 升序AscendingOrder, 降序DescendingOrder
m_pFileModel->sort(0, Qt::AscendingOrder);
}
//对分割窗口QSplitter进行设置
void MainWindow::createSplitter()
{
//界面的比例分配
ui->splitter->setStretchFactor(0, 20); //左窗口占整个窗口的20%
ui->splitter->setStretchFactor(1, 80); //右窗口占整个窗口的80%
ui->splitter->setAutoFillBackground(true);
}
//创建左侧树形文件浏览器
void MainWindow::createQTreeWidget()
{
//1. 设置列数 和 设置头的标题
ui->tvFileList->setColumnCount(1);
ui->tvFileList->setHeaderLabel(tr("目录结构"));
//2. 默认加载系统桌面的所有文件夹和文件
QString sDesktop = getDesktopPath();
QDir dir(sDesktop);
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); //不显示隐藏文件夹 和 文件
if (dir.exists())
{
//树形Item对象,用于操作树形结构中的目录和文件
MYDELETE(m_pItem);
m_pItem = new QTreeWidgetItem(ui->tvFileList, QStringList(sDesktop));
m_pItem->setIcon(0,QIcon(":/icon/icon_64_open.png")); //设置图标
m_pItem->setData(1, 0, sDesktop);
m_items << m_pItem;
//先读取桌面根目录下的所有目录,添加到树形窗口
loadFiles(sDesktop, m_pItem);
//再递归桌面的每个目录,把文件和文件夹都添加到树形窗口
showChildrenCombox(m_pItem);
//默认展开根目录
if (m_pItem) m_pItem->setExpanded(true);
}
connect(ui->tvFileList, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(onItemClicked(QTreeWidgetItem*,int)));
}
//创建右侧的列表窗口视图
void MainWindow::createQTableView()
{
//1. 默认显示桌面下的所有目录和文件
QString sDesktop = getDesktopPath();
QDir dir(sDesktop);
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); //不显示隐藏文件夹 和 文件
if (dir.exists())
{
//显示S桌面所有目录 和 文件 到table
ui->lvFileList->setModel(m_pFileModel);
ui->lvFileList->setRootIndex(m_pFileModel->setRootPath(sDesktop));
//展开所有节点
if (m_pItem) m_pItem->setExpanded(true);
//在界面显示桌面根目录
m_sCurPath = sDesktop;
ui->lePath->setText(sDesktop);
}
//2. 设置table的属性
ui->lvFileList->setShowGrid(false); //设置QTableView的透明化
ui->lvFileList->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中
ui->lvFileList->setEditTriggers(QAbstractItemView::NoEditTriggers); //不可编辑
ui->lvFileList->verticalHeader()->hide(); //隐藏行头
//3. 设置列标题的排序功能
QHeaderView *header = ui->lvFileList->horizontalHeader();
header->setEnabled(true);
//4. 自动适应内容
ui->lvFileList->resizeColumnsToContents();
ui->lvFileList->resizeRowsToContents();
ui->lvFileList->horizontalHeader()->setStretchLastSection(true);
//5. 设置列表项的宽度
ui->lvFileList->setColumnWidth(0,200);
ui->lvFileList->setColumnWidth(1,100);
ui->lvFileList->setColumnWidth(2,100);
//6. 连接点击信号槽
connect(header, SIGNAL(sectionClicked(int)), this, SLOT(onSectionClicked(int)));
}
//创建右侧的图标窗口视图
void MainWindow::createQListView()
{
//1. 默认显示桌面下的所有目录和文件
QString sDesktop = getDesktopPath();
QDir dir(sDesktop);
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
if (dir.exists())
{
ui->listView->setModel(m_pFileModel);
ui->listView->setRootIndex(m_pFileModel->setRootPath(sDesktop));
if (m_pItem) m_pItem->setExpanded(true);
m_sCurPath = sDesktop;
ui->lePath->setText(sDesktop);
}
ui->listView->setMinimumSize(QSize(0, 0));
ui->listView->setMaximumSize(QSize(1870, 16777215));
ui->listView->setContextMenuPolicy(Qt::CustomContextMenu);
ui->listView->setLayoutDirection(Qt::LeftToRight);
ui->listView->setParent(0);
ui->listView->hide();
ui->listView->setViewMode(QListView::IconMode);
ui->listView->setGridSize(QSize(120, 120));
ui->listView->setIconSize(QSize(60, 60));
ui->listView->setTextElideMode(Qt::ElideNone);
//选择模式
ui->listView->setSelectionMode(QAbstractItemView::SingleSelection);
//文字可以换行显示
ui->listView->setWordWrap(true);
ui->listView->setMovement(QListView::Static);
ui->listView->setResizeMode(QListView::Adjust);
}
//对自QTreeWidgetItem进行LoadFiles()
void MainWindow::showChildrenCombox(QTreeWidgetItem* rootItem)
{
int iSize = rootItem->childCount();
if (iSize == 0) return;
for (int i = 0; i < iSize; i++)
{
loadFiles(rootItem->child(i)->data(1, 0).toString(), rootItem->child(i));
}
}
//读取SD卡的所有目录和文件,添加到树形窗口
void MainWindow::loadFiles(QString sPath, QTreeWidgetItem *item)
{
//1. 先判断SD是否存在
QDir dir(sPath);
if (!dir.exists()) return;
//设置文件过滤器
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
QFileInfoList list = dir.entryInfoList();
int size = list.size();
for (int i = 0; i < size; i++)
{
QFileInfo info = list.at(i);
if (!info.isDir()) continue;
//判断文件路径是否存在于QTreeWidgetItem之下, true为不存在
if (!treeWidgetItemIsExisted(info.filePath(), item)) continue;
QTreeWidgetItem *pFileItem = new QTreeWidgetItem(QStringList(info.fileName()), 0); //0表示目录
pFileItem->setIcon(0, QIcon(":/icon/icon_64_open.png"));
pFileItem->setData(1, 0, info.filePath());
item->addChild(pFileItem);
m_items << pFileItem;
}
}
//判断sPath是否存在于QTreeWidgetItem之下
bool MainWindow::treeWidgetItemIsExisted(QString sPath, QTreeWidgetItem* pParentItem)
{
int nCount = pParentItem->childCou
没有合适的资源?快使用搜索试试~ 我知道了~
QT实现文件管理器.rar
共33个文件
png:11个
cpp:8个
h:7个
4星 · 超过85%的资源 需积分: 50 260 下载量 186 浏览量
2019-11-04
23:17:57
上传
评论 16
收藏 78KB RAR 举报
温馨提示
这是在Windows下用QT实现的文件管理器,工程实现了文件类似windows文件管理器的功能,复制、粘贴、剪切、重命名、新建文件夹、新建稳定.....
资源推荐
资源详情
资源评论
收起资源包目录
QT实现文件管理器.rar (33个子文件)
test38
TextDlg.cpp 3KB
MyTextEdit.cpp 592B
Resource.qrc 534B
ImageDlg.cpp 11KB
TextDlg.h 787B
test38.pro 708B
RenameDlg.ui 2KB
ZoonView.h 547B
main.cpp 181B
TextDlg.ui 838B
MyTextEdit.h 402B
RenameDlg.h 460B
MainWindow.h 4KB
FileThread.cpp 7KB
test38.pro.user 18KB
FileThread.h 2KB
ImageDlg.ui 20KB
RenameDlg.cpp 2KB
icon
zoom_in2.png 5KB
icon_64_liangpinxuexi.png 25KB
zoom_out2.png 5KB
zoom_roateleft.png.png 5KB
zoom_pre.png 3KB
zoom_fix.png 1KB
zoom_next.png 3KB
zoom_roateright.png 5KB
icon_64_open.png 24KB
zoom_original.png 6KB
zoom_fullscreen.png 1KB
ImageDlg.h 2KB
MainWindow.ui 4KB
ZoonView.cpp 1KB
MainWindow.cpp 32KB
共 33 条
- 1
资源评论
- 苍海蜉蝣2020-05-25很不错,报错自己把类型改成public不就行了。重新继承以下自己写一个类也可以,动点脑。
- weixin_442176222020-06-23如果是想从最初目录开始显示该怎么写路径呢,也就是说默认第一次显示的各个盘符
- qq_330782352019-12-27编译时候出问题了,提示使用了protect函数
- JS_YK2020-06-30不错,编译时候出问题了,提示使用了protect函数,进入库中改为public即可
mark-puls
- 粉丝: 166
- 资源: 82
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功