qt文本檢索工具

概述

根據關鍵字,檢索文件夾下的文件內容
在這裏插入圖片描述

代碼

#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,"提示","請選中要打開的文件路徑");
    }
}

源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章