QT-实现一个简单的文件浏览器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

实现功能:

一、前期准备

二、使用的核心类

三、步骤

1、实例化控件、实例化布局

2、添加控件到布局中

3、给编辑框设置默认路径

4、实例化目录对象

5、显示当前目录下的内容到ListWidget中

6、双击文件切换目录

7、返回上一级目录


实现功能:

1、可以显示当前目录;

2、可以显示当前目录下的文件内容(文件夹及文件);

3、通过双击文件夹,可以进入对应的下级目录;

(注意:如果双击文件,是调用自己编写的记事本程序进行传参打开文件,使用时可屏蔽此代码)

4、通过按钮“返回上一级”可以返回上一级。


一、前期准备

1、一个按钮,用来实现“返回上一级目录”

2、一个单行文本编辑框,用来显示“目录”

3、一个显示框listWidget,用来显示“当前目录下的文件内容”

二、使用的核心类

QListWidget、QListWidgetItem、QDir、QVBoxLayout、QHBoxLayout、Qprocess

三、步骤

1、实例化控件、实例化布局

2、添加控件到布局中

3、给编辑框设置默认路径

4、实例化目录对象

5、显示当前目录下的内容到ListWidget中

1.清空QlistWidget里面的内容

2.获取当前目录

3.获得这个目录下所有内容

4.将内容添加到QlistWidget中进行显示

6、双击文件切换目录

进行目录的切换,判断能否成功;

        如果返回ture,则说明是文件夹,更新编辑框的目录路径,再更新目录下的内容

  如果返回false,则说明是文件,使用记事本打开

7、返回上一级目录

切换目录到上一级,判断能否成功;

如果可以成功,则更新编辑框的目录路径,再更新目录内容

代码如下:

1、main文件:

#include "widget.h"
#include int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

2、头文件: 

#ifndef WIDGET_H
#define WIDGET_H#include 
#include 
#include 
#include 
#include 
#include   //垂直布局
#include   //水平布局
#include class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();public slots:void showDir1();void changeDir1(QListWidgetItem *item);void backDir1();private:QPushButton *btn;QLineEdit *textEdit;QListWidget *listWidget;QDir *dir;
};#endif // WIDGET_H

3、.cpp文件:

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("文件浏览器");/* 1、实例化控件、实例化布局* 2、进行界面布局* 3、给编辑框设置默认路径* 4、实例化目录对象* 5、显示当前目录内容到ListWidget*///实例化控件this->btn = new QPushButton("返回上一级",this);this->btn->setMinimumSize(50,40);this->textEdit = new QLineEdit(this);this->textEdit->setMinimumSize(200,40);this->listWidget = new QListWidget(this);//实例化布局QVBoxLayout *vbox = new QVBoxLayout;QHBoxLayout *hbox = new QHBoxLayout;//添加控件到布局中hbox->addWidget(this->btn);hbox->addWidget(this->textEdit);vbox->addLayout(hbox);vbox->addWidget(this->listWidget);//设置整个窗口为垂直布局this->setLayout(vbox);//给编辑框设置默认路径this->textEdit->setText("G:/");//实例化目录对象this->dir = new QDir;//显示当前目录内容到ListWidgetthis->showDir1();//连接绑定connect(this->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(changeDir1(QListWidgetItem *)));connect(this->btn, SIGNAL(clicked()), this, SLOT(backDir1()));
}Widget::~Widget()
{}
//显示当前目录内容到ListWidget
void Widget::showDir1()
{/* 1.清空QlistWidget里面的内容* 2.获取当前目录* 3.获得这个目录下所有内容* 4.将内容添加到QlistWidget中进行显示*///清空QlistWidget里面的内容this->listWidget->clear();//获取当前目录QString path = this->textEdit->text();this->dir->setPath(path);//获得这个目录下所有内容QStringList nameList;nameList << "*";QFileInfoList fileInfoList = this->dir->entryInfoList(nameList, QDir::AllEntries, QDir::DirsFirst);//将内容添加到QlistWidget中进行显示for(int i = 0; i < fileInfoList.size(); i++){if(fileInfoList.at(i).fileName()[0] == ".")//不显示“.”开头的文件名{continue;}QListWidgetItem *item = new QListWidgetItem(this->listWidget);item->setText(fileInfoList.at(i).fileName());//获得文件名this->listWidget->addItem(item);//将item添加到listWidget中进行显示}}
//双击进行目录切换
void Widget::changeDir1(QListWidgetItem *item)
{//进行目录的切换,判断能否成功//如果返回ture,则说明是文件夹,更新编辑框的目录路径,再更新目录下的内容//如果返回false,则说明是文件,使用记事本打开bool res = this->dir->cd(item->text());//切换目录if(res == true)//说明双击的是文件夹{this->textEdit->setText(this->dir->absolutePath());//将目录的绝对路径赋值给单行编辑框this->showDir1();//显示目录内容}else if(res == false)//说明双击的是文件{//使用记事本打开文件QStringList arg;QString filename = this->textEdit->text() + "/" + item->text();arg << filename;QProcess *pro = new QProcess(this);//创建对象//使用自己编写的记事本程序打开文件//参数1:记事本程序的路径;参数2:文件名pro->start("E:\\workbase\\Qt-lesson\\day3_textPrj2\\debug\\day3_textPrj2.exe", arg);}
}
//返回上一级
void Widget::backDir1()
{//切换目录到上一级,判断能否成功//如果可以成功,则更新编辑框的目录路径,再更新目录内容bool res = this->dir->cdUp();//切换目录到上一级if(res == true)//如果可以返回到上一级{this->textEdit->setText(this->dir->absolutePath());//更新编辑框的目录路径this->showDir1();//更新目录内容}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部