效果:显示当前目录下的所有内容, 如果选择是文件夹,进入这个文件夹中,显示内容如果选择是文件,用记事本程序打开并显示文件内容。
部分代码:
文件浏览器(基于QMainWidget)
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QProcess>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//编辑框内容初始化C盘
this->dir = new QDir;
ui->lineEdit->setText("C:/");
showDir();
}
Widget::~Widget()
{
delete ui;
delete this->dir;
}
void Widget::showDir()
{
//显示之前 清空内容
ui->listWidget->clear();
//获取编辑框内信息
this->filePath = ui->lineEdit->text();
//将获取到的路径添加文件对象内
this->dir->setPath(this->filePath);
//创建一个链表
QStringList name;
name << "*";
/*读取目录下所有文件夹+文件信息
* 参数1: 名字过滤器
* 参数2:文件过滤器:显示哪些文件信息
* 参数3:排序:按文件夹在前面的方式排序
*/
QFileInfoList fileList = this->dir->entryInfoList(name, QDir::AllEntries, QDir::DirsFirst);
//添加信息到listWidget中
for (int i = 0; i < fileList.size(); i++)
{
//如果它是文件的话进入
if (fileList.at(i).isDir() == true)
{
if (fileList.at(i).fileName()[0] == ".")
{
//如果它是隐藏文件 直接跳过不显示
continue;
}
//需要有QlistWidgetItem--创建单元项
QListWidgetItem *item = new QListWidgetItem(this->ui->listWidget);
//给单元项设置文件的名字
item->setText(fileList.at(i).fileName());
//给单元项设置图标
item->setIcon(QIcon(this->style()->standardIcon(QStyle::SP_DirIcon))); //标准文件夹图标
//将这个单元项加入列表框表内
this->ui->listWidget->addItem(item);
}
//普通文件
else if (fileList.at(i).isFile() == true)
{
//需要有QlistWidgetItem--创建单元项
QListWidgetItem *item = new QListWidgetItem(this->ui->listWidget);
//给单元项设置文件的名字
item->setText(fileList.at(i).fileName());
//给单元项设置图标
item->setIcon(QIcon(this->style()->standardIcon(QStyle::SP_FileIcon))); //标准文件夹图标
//将这个单元项加入表内
this->ui->listWidget->addItem(item);
}
}
}
//编辑框内容修改调用显示函数
void Widget::on_lineEdit_textChanged(const QString &arg1)
{
QString arg = arg1;
showDir();
}
//打开文件夹或者文件
void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
/*
1.判断当前选择是是不是文件夹 如何判断
如果是文件夹,显示对应文件夹里面的内容
如果是文件,用记事本程序去打开这个文件并显示内容
*/
bool res = this->dir->cd(item->text());
if (res == true) //文件夹可以进入
{
//修改编辑框内的路径
ui->lineEdit->setText(this->dir->absolutePath());
}
else
{
//用记事本方式打开
//关联到了另一个程序
QStringList arguments;
QString filename = this->ui->lineEdit->text() + "\\" + item->text();
arguments << filename;
QProcess *process = new QProcess(this);
//打开文本文件不能为中文
process->start("G:\\QT_Practice\\day3\\day3_text\\debug\\day3_text.exe", arguments);
}
}
//返回上一级目录
void Widget::on_pushButton_clicked()
{
//进入上一级文件
this->dir->cd("..");
//设置此时的绝对路径显示在编辑框内
ui->lineEdit->setText(this->dir->absolutePath());
}
//组合框内容发生改变时 即发送点击信号activated
void Widget::on_comboBox_activated(const QString &arg1)
{
//当组合框内容发生改变则将内容放在编辑框内
ui->lineEdit->setText(arg1);
if (arg1 == "其它")
{
this->filePath = QFileDialog::getExistingDirectory();
ui->lineEdit->setText(this->filePath);
}
}
记事本(基于QMainWidget)
#include "mainwindow.h"
#include <QMenu>
#include <QAction> //加入操作
#include <QFileDialog> //获取文件路径
#include <QByteArray> //读文件
#include <QToolButton>
#include <QMessageBox>
#include <QFileInfo> //获取文件名
#include <QFontDialog> //修改字体
#include <QColorDialog> //修改颜色
#include <QFile>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//设置窗口尺寸
this->resize(500, 500);
//修改窗口标题
this->fileName = "无标题-记事本";
this->setWindowTitle(this->fileName);
//创建添加菜单栏
this->menuBar = new QMenuBar(this);
this->setMenuBar(this->menuBar);
//创建添加工具栏
this->toolBar = new QToolBar(this);
this->addToolBar(this->toolBar);
//创建添加状态栏
this->statusBar = new QStatusBar(this);
this->setStatusBar(this->statusBar);
//编辑框并设置为核心
this->textEdit = new QTextEdit(this);
this->setCentralWidget(this->textEdit);
//实例化文件对象并加入菜单栏
QMenu *fileMenu = new QMenu("文件", this);
this->menuBar->addMenu(fileMenu); //加入菜单栏
//在文件下面加入可选项
//打开文件
QAction *openFile = new QAction("打开", this);
//将该操作添加至实例化对象内 也就是文件内
fileMenu->addAction(openFile);
//设置图标
openFile->setIcon(QIcon(":/icons/open.png"));
//加快捷键
openFile->setShortcut(QKeySequence::Open);
//新建文件
QAction *newFile = new QAction("新建", this);
fileMenu->addAction(newFile);
newFile->setIcon(QIcon(":/icons/new.png"));
newFile->setShortcut(QKeySequence::New);
//保存文件
QAction *saveFile = new QAction("保存", this);
fileMenu->addAction(saveFile);
saveFile->setIcon(QIcon(":/icons/save.png"));
saveFile->setShortcut(QKeySequence::Save);
//另存文件
QAction *saveAsFile = new QAction("另存为", this);
fileMenu->addAction(saveAsFile);
saveAsFile->setShortcut(QKeySequence::SaveAs);
//实例化编辑对象并加入菜单栏
QMenu *editMenu = new QMenu("编辑", this);
this->menuBar->addMenu(editMenu);
QAction *modifyFont = new QAction("修改字体", this);
editMenu->addAction(modifyFont);
modifyFont->setIcon(QIcon(":/icons/font.png"));
QAction *modifyColor = new QAction("修改颜色", this);
editMenu->addAction(modifyColor);
modifyColor->setIcon(QIcon(":/icons/color.png"));
//复制
QAction *copyFile = new QAction("复制", this);
editMenu->addAction(copyFile);
copyFile->setIcon(QIcon(":/icons/copy.png"));
copyFile->setShortcut(QKeySequence::Copy);
//粘贴
QAction *pasteFile = new QAction("粘贴", this);
editMenu->addAction(pasteFile);
pasteFile->setIcon(QIcon(":/icons/paste.png"));
pasteFile->setShortcut(QKeySequence::Paste);
//剪切文件
QAction *cutFile = new QAction("剪切", this);
editMenu->addAction(cutFile);
cutFile->setIcon(QIcon(":/icons/cut.png"));
cutFile->setShortcut(QKeySequence::Cut);
//加状态
openFile->setStatusTip("打开一个文件");
newFile->setStatusTip("新建一个文件");
saveFile->setStatusTip("保存一个文件");
saveAsFile->setStatusTip("另存为一个文件");
modifyFont->setStatusTip("修改字体");
modifyColor->setStatusTip("修改颜色");
//给工具栏添加工具
this->toolBar->addAction(openFile);
this->toolBar->addAction(newFile);
this->toolBar->addAction(saveFile);
this->toolBar->addAction(copyFile);
this->toolBar->addAction(pasteFile);
this->toolBar->addAction(cutFile);
//给工具栏添加啊工具按钮
//添加修改文字按钮
QToolButton *fontBtn = new QToolButton(this);
//给按钮加图标
fontBtn->setIcon(QIcon(":/icons/font.png"));
//添加更改颜色工具按钮
QToolButton *colorBtn = new QToolButton(this);
colorBtn->setIcon(QIcon(":/icons/color.png"));
//将工具按钮添加至工具栏 打开界面
this->toolBar->addWidget(fontBtn);
this->toolBar->addWidget(colorBtn);
connect(openFile, SIGNAL(triggered()), this, SLOT(openFileAction()));
connect(newFile, SIGNAL(triggered()), this, SLOT(newFileAction()));
connect(saveFile, SIGNAL(triggered()), this, SLOT(saveFileAction()));
connect(saveAsFile, SIGNAL(triggered()), this, SLOT(saveAsFileAction()));
connect(modifyFont, SIGNAL(triggered()), this, SLOT(upDateFont()));
connect(modifyColor, SIGNAL(triggered()), this, SLOT(upDateColor()));
//如果编辑框内容发生改变 则修改窗口标签
connect(this->textEdit, SIGNAL(textChanged()), this, SLOT(upFileTitle()));
//修改字体和颜色
connect(fontBtn, SIGNAL(clicked()), this, SLOT(upDateFont()));
connect(colorBtn, SIGNAL(clicked()), this, SLOT(upDateColor()));
//复制 粘贴 剪切
connect(copyFile, SIGNAL(triggered()), this, SLOT(copyFileAction()));
connect(pasteFile, SIGNAL(triggered()), this, SLOT(pasteFileAction()));
connect(cutFile, SIGNAL(triggered()), this, SLOT(cutFileAction()));
}
MainWindow::~MainWindow()
{
}
//清空文本框 和修改标题
void MainWindow::clearAll()
{
this->textEdit->clear();
this->fileName = "无标题-记事本";
this->setWindowTitle(this->fileName);
}
//打开记事本
void MainWindow::openFile()
{
/*
弹出文件选择对话框 选择文件
QFile打开文件 读文件中的内容readAll() 显示在文本框中
QFileInfo fileName()标题修改为 文件的名字
*/
//打开文件选择txt文件 获取文件路径
this->filePath = QFileDialog::getOpenFileName(this, "打开文件", ".", "TXT(*.txt)");
if (this->filePath.isNull() == true) //判断打开文件的路径是否为空
{
return;
}
//加入文件路径 创建文件对象
QFile file(this->filePath);
//打开文件 以只读的方式打开
bool res = file.open(QFile::ReadOnly);
if (res == true)
{
QByteArray arry = file.readAll(); //读取文件内所有内容
//将读到的内容写入编辑框内
this->textEdit->setText(arry);
//获取文件名 修改窗口标签
QFileInfo name(this->filePath);
//将获取到的文件名转为字符串格式
this->fileName = name.fileName();
//修改窗口标签
this->setWindowTitle(this->fileName);
//将打开的文件关闭
file.close();
}
else
{
return;
}
}
//main传参打开程序
void MainWindow::writeFile(QString path)
{
QFile file(path);
bool res = file.open(QFile::ReadOnly);
if (res == true)
{
QByteArray arry = file.readAll(); //读取文件内所有内容
//将读到的内容写入编辑框内
this->textEdit->setText(arry);
//获取文件名 修改窗口标签
QFileInfo name(this->filePath);
//将获取到的文件名转为字符串格式
this->fileName = name.fileName();
//修改窗口标签
this->setWindowTitle(this->fileName);
//将打开的文件关闭
file.close();
}
else
{
return;
}
}
//打开文件
void MainWindow::openFileAction()
{
//判断文件是否修改
bool res = this->textEdit->document()->isModified();
if (res == true)
{
//文件修改
int qres = QMessageBox::question(this, "提示框", "你想要保存该文件吗?", QMessageBox::Yes |
QMessageBox::No | QMessageBox::Cancel);
if (qres == QMessageBox::Yes)
{
//如果窗口签名是无标题-记事本 则从未保存 要走另存为
if (this->fileName == "无标题-记事本")
{
saveAsFileAction();
}
else
{
saveFileAction();
}
//将编辑框内容清空
clearAll();
openFile();
}
else if (qres == QMessageBox::No)
{
//不保存
clearAll();
openFile();
}
else
{
//取消
return;
}
}
else
{
return;
}
}
//新建文件
void MainWindow::newFileAction()
{
/*
如果文件被修改的状态下:
弹出消息提示框 保存、不保存 、取消
选择保存: 文本区域的内容清空 标题变成: 无标题-记事本 原来文件内容进行保存并关闭
选择不保存:文本区域的内容清空 标题变成: 无标题-记事本 原来文件只进行关闭
选择取消: 什么都不做
如果文件没有被修改呢:文本区域的内容清空 标题变成: 无标题-记事本 原文件进行关闭
*/
//判断编辑框是否改动
bool res = this->textEdit->document()->isModified();
if (res == true) //编辑框内容进行了修改
{
int qres = QMessageBox::question(this, "提示框", "你想要保存该文件吗?", QMessageBox::Yes |
QMessageBox::No | QMessageBox::Cancel);
if (qres == QMessageBox::Yes)
{
//如果窗口签名是无标题-记事本 则从未保存 要走另存为
if (this->fileName == "无标题-记事本")
{
saveAsFileAction();
}
else
{
saveFileAction();
}
clearAll();
}
else if (qres == QMessageBox::No)
{
clearAll();
//不保存
}
else
{
//取消
return;
}
}
else
{
clearAll();
}
}
//保存文件
void MainWindow::saveFileAction()
{
/*
* 如果文件的标题是 无标题-记事本
要进行另存为的操作
否则
打开文件
获取到文本框中的内容
写入到文件中
标题改为 不带有*的文件名
文件关闭
*/
if (this->fileName == "无标题-记事本")
{
//另存为
saveAsFileAction();
}
else
{
//加入路径创建文件对象
QFile file(this->filePath);
//以只写形式打开文件
bool res = file.open(QFile::WriteOnly);
if (res == true) //打开文件成功
{
//读取编辑框内容
QString content = this->textEdit->toPlainText();
//将内容写入文件
file.write(content.toUtf8());
//获取文件名
QFileInfo name(this->filePath);
//转换格式
this->fileName = name.fileName();
this->setWindowTitle(this->fileName);
//关闭文件
file.close();
}
}
}
//另存为文件
void MainWindow::saveAsFileAction()
{
/*
* 弹出文件选择对话框 选择文件 打开文件--以写入的方式
* 把文本框中的内容写入到文件中 文件标题要变成设保存的这个文件的名字
文件关闭
*/
//获取保存到的地址
this->filePath = QFileDialog::getSaveFileName(this, "另存为", ".", "TXT(*.txt)");
if (this->filePath.isNull() == true)
{
return;
}
else
{
//创建文件对象
QFile file(this->filePath);
//以只写方式打开文件
bool res = file.open(QFile::WriteOnly);
if (res == true)
{
//获取多行编辑框内容
QString content = this->textEdit->toPlainText();
//按照国标类型Utf8写入文件内 致使汉字不会乱码
file.write(content.toUtf8());
//获取文件名
QFileInfo name(this->filePath);
this->fileName = name.fileName();
this->setWindowTitle(this->fileName);
//另存完之后 使编辑框处于未修改状态
this->textEdit->document()->setModified(false);
//关闭文件
file.close();
}
}
}
//编辑框修改 更改文件标签
void MainWindow::upFileTitle()
{
this->setWindowTitle("*" + this->fileName);
}
void MainWindow::upDateFont()
{
bool ok;
//选择得到字体
QFont font = QFontDialog::getFont(&ok, this);
//给编辑框设置字体
this->textEdit->setFont(font);
}
void MainWindow::upDateColor()
{
//选择得到颜色 设置默认颜色 白色
QColor color = QColorDialog::getColor(Qt::white, this);
//给编辑框内容设置颜色
this->textEdit->setTextColor(color);
}
//复制
void MainWindow::copyFileAction()
{
this->textEdit->copy();
}
//粘贴
void MainWindow::pasteFileAction()
{
this->textEdit->paste();
}
//剪切
void MainWindow::cutFileAction()
{
this->textEdit->cut();
}