概述
根据关键字,检索文件夹下的文件内容
代码
#include "widget.h"
#include "ui_widget.h"
#include <QDir>
#include <QtDebug>
#include <QFileDialog>
#include <QSettings>
#include <QProcess>
#include <QMessageBox>
#include <QDesktopServices>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("检索工具");
ui->tableWidget->horizontalHeader()->setStretchLastSection(true); //设置充满表宽度
QSettings *configIni = new QSettings("./config.ini", QSettings::IniFormat);
ui->label_retrieval->setText(configIni->value("path").toString());
delete configIni;
}
Widget::~Widget()
{
delete ui;
}
bool Widget::FindFile(const QString &path)
{
QDir dir(path);
if (!dir.exists()) {
return false;
}
dir.setFilter(QDir::Dirs | QDir::Files);
dir.setSorting(QDir::DirsFirst);
QFileInfoList list = dir.entryInfoList();
int i = 0;
do {
QFileInfo fileInfo = list.at(i);
if (fileInfo.fileName() == "." | fileInfo.fileName() == "..") {
i++;
continue;
}
bool bisDir = fileInfo.isDir();
if (bisDir) {
FindFile(fileInfo.filePath());
} else {
//qDebug() << "path:" <<fileInfo.path() << " name:" <<fileInfo.fileName();
QFile file(fileInfo.filePath());
if(file.open(QIODevice::ReadOnly))
{
int count = 0;
while (!file.atEnd())
{
count++;
QString str = file.readLine();
if(str.contains(ui->lineEdit_retrieval->text()))
{
m_num++;
ui->tableWidget->setRowCount(m_num);
ui->tableWidget->setItem(m_num-1,0,new QTableWidgetItem(fileInfo.filePath()));
ui->tableWidget->setItem(m_num-1,1,new QTableWidgetItem(QString::number(count) +" | " + str));
}
}
}
file.close();
}
i++;
} while (i < list.size());
return true;
}
void Widget::on_pushButton_retrieval_clicked()
{
ui->label_retrieval->setText(QFileDialog::getExistingDirectory());
QSettings *configIni = new QSettings("./config.ini", QSettings::IniFormat);
configIni->setValue( "path" ,ui->label_retrieval->text());
delete configIni;
}
void Widget::on_pushButton_begin_clicked()
{
m_num = 0;
ui->tableWidget->setRowCount(0);
FindFile(ui->label_retrieval->text());
}
void Widget::on_pushButton_open_clicked()
{
if(!ui->tableWidget->selectedItems().isEmpty())
{
QString str = ui->tableWidget->selectedItems().at(0)->text();
QDesktopServices::openUrl(QUrl("file:///" + str, QUrl::TolerantMode));
}
else
{
QMessageBox::information(nullptr,"提示","请选中要打开的文件路径");
}
}
源码
https://download.csdn.net/download/sinat_33859977/12456983