使用UI界面实现简易文件夹
1、实现功能
1、双击文件夹,进入文件夹的下一层
2、点击回退按钮、返回上一级
3、如果是文本文件、则调用记事本的程序、显示文本内容
2、widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDir>
#include <QListWidgetItem>
#include <QProcess>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void showDir();
private slots:
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
void on_back_btn_clicked();
private:
Ui::Widget *ui;
QDir *dir;
};
#endif // WIDGET_H
3、widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//给编辑框设置一个初始路径
this->ui->path_edit->setText("D:/");
//创建目录类的对象
this->dir = new QDir;
//显示默认路径下的所有内容
this->showDir();
}
Widget::~Widget()
{
delete ui;
}
//显示文件夹内容
void Widget::showDir()
{
//清空QListWidget中的内容
this->ui->listWidget->clear();
//获取当前的目录
QString path = this->ui->path_edit->text();
//给目录对象设置当前的路径
this->dir->setPath(path);
//读取这个目录下的所有文件和文件夹信息
QFileInfoList infolist = this->dir->entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot,QDir::DirsFirst);
//循环添加到QListWidget中
for(int i = 0; i < infolist.size(); i++)
{
QListWidgetItem *item = new QListWidgetItem;
//给item设置图标
if(infolist.at(i).isDir())
{
item->setIcon(QIcon("./dir.png"));
}
else if(infolist.at(i).isFile())
{
item->setIcon(QIcon("./file.png"));
}
//给item设置主体内容,题目再添加到listWidget列表中
item->setText(infolist.at(i).fileName());
this->ui->listWidget->addItem(item);
}
}
void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
//切换目录
bool res = this->dir->cd(item->text());
if(res == true)//切换成功,就是文件夹
{
//得到当前路径
QString path = this->dir->absolutePath();
//设置给编辑框设置路径
this->ui->path_edit->setText(path);
this->showDir();
}
else//说明是文件
{
//使用记事本程序打开文件,在一个进程中运行另一个进程
QProcess * process = new QProcess(this);
//如何获取到双击这个文件的完整路径
QString fileName = this->ui->path_edit->text()+"/"+item->text();
QStringList arg;
arg << fileName;
//启动这个进程
process->start("E:\\QT_Demo\\jishiben\\debug\\jishiben.exe",
arg);
}
}
//返回上一级
void Widget::on_back_btn_clicked()
{
bool res = this->dir->cdUp();
if(res == true)//可以返回上一级目录
{
//得到当前路径
QString path = this->dir->absolutePath();
//设置给编辑框设置路径
this->ui->path_edit->setText(path);
this->showDir();
}
}
4、widget.ui
设置一个水平布局,关联回退按钮和 路径编辑框;
给整个界面设置为垂直布局。