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,"提示","请选中要打开的文件路径");
    }
}

源码

https://download.csdn.net/download/sinat_33859977/12456983

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值