#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QListWidgetItem>
#include <QDir>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
void showDir();
private slots:
void on_btnBack_clicked();
void on_btnInputPath_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
void on_editPath_textChanged(const QString &arg1);
private:
Ui::Widget *ui;
QDir *dir;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QListWidgetItem>
#include <QProcess>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->dir = new QDir;
this->ui->editPath->setText(R"(F:/)");
this->setWindowTitle("Qt文件浏览器");
}
Widget::~Widget()
{
delete ui;
delete this->dir;
}
void Widget::showDir()
{
this->ui->listWidget->clear();
QStringList namelist;
namelist << "*";
if (!this->dir->exists())
{
return;
}
this->dir->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); //文件夹和文件 不要.和..
this->dir->setSorting(QDir::DirsFirst);//文件夹排在前面
QFileInfoList list = this->dir->entryInfoList();
for (int i = 0; i < list.size(); ++i)
{
QListWidgetItem *item = nullptr;
if (list.at(i).isDir())
{
item = new QListWidgetItem(this->ui->listWidget);
item->setText(list.at(i).fileName());
item->setIcon(QIcon(this->style()->standardIcon(QStyle::SP_DirIcon)));//标准图标
// item->setIcon(QIcon(":/icons/dir.png"));//自定义图标
}
else if (list.at(i).isFile())
{
item = new QListWidgetItem(this->ui->listWidget);
item->setText(list.at(i).fileName());
item->setIcon(QIcon(this->style()->standardIcon(QStyle::SP_FileIcon)));//标准图标
// item->setIcon(QIcon(":/icons/file.png"));//自定义图标
}
if (item != nullptr)
{
this->ui->listWidget->addItem(item);
}
}
}
void Widget::on_btnBack_clicked()
{
this->dir->cdUp();//cd("..");
this->ui->editPath->setText(this->dir->absolutePath());
}
void Widget::on_btnInputPath_clicked()
{
QString tmpPath = QFileDialog::getExistingDirectory();
if (tmpPath != nullptr)
{
this->ui->editPath->setText(tmpPath);
}
}
void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
if (this->dir->cd(item->text()))
{
this->ui->editPath->setText(this->dir->absolutePath());
}
else
{
QStringList arguments;
QString filename = this->ui->editPath->text() + R"(\)" + item->text();
arguments << filename;
QProcess *process = new QProcess(this);
//启动程序
process->start(R"(F:\QT_Project\Day4\NotePad1\build-NotePad1-Desktop_Qt_5_9_8_MinGW_32bit-Debug\debug\NotePad1.exe)",
arguments);
}
}
void Widget::on_editPath_textChanged(const QString &arg1)
{
this->dir->setPath(arg1);
this->showDir();
}