zoukankan      html  css  js  c++  java
  • Leetcode本地阅读器开发--01界面设计二

    返回项目声明及目录:Leetcode本地阅读器开发--总声明

    继续上一节内容:

    1、第一个内容是左边第一行的功能,读取默认路径和修改路径。此路径为本地阅读器的搜索题目的主目录。

    为了整个程序都能读取工作目录,我们将其设置为Widget类的成员变量。

    1 private:
    2     Ui::Widget *ui;
    3 
    4     QString curPath;  //新添加的工作目录变量

    我们需要在程序启动时默认一个工作目录,这样不用每次启动都设置。

    因此需要在构造函数成员列表里对curPath进行初始化。

        构造函数列表添加: QWidget(parent)
                , ui(new Ui::Widget)
                , curPath("/home/jialu/Documents/GitPro/Leetcode")  //新添加的初始化工作路径
         构造函数内添加: ui->lineEdit_2->setText(curPath);

    最后,完成按下curr dir按钮更新工作路径的任务。

    增加curr dir按钮的槽函数,使其响应按钮按下的操作,然后在函数内获取文本框内的内容并对curPath进行修改。

    void Widget::on_pushButton_2_clicked()
    {
        curPath = ui->lineEdit_2->text();
    }

    2、第二个内容为左边第二行,通过输入题目信息,对该工作目录下的所有文件进行检索,找到匹配的文件。

    首先需要读取该目录下的所有文件,此处需要借助Qt的QDir目录操作库。

    这里介绍几个使用频率极高的函数,同时也是完成该功能所需要的函数:

    1     QDir dir;
    2     dir.setPath(curPath);    //设置目录
    3     if (!dir.exists()){     //判断该目录是否存在
    4         ui->textBrowser_3->setText("dir error...");
    5         ui->textBrowser_3->show();
    6         return;
    7     }
    dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoSymLinks|QDir::NoDotAndDotDot);  //设置文件过滤器,过滤不想检索的文件类型
    QFileInfoList list = dir.entryInfoList();  //将该目录下经过过滤的文件保存在list中
    for(int i=0; i<list.size(); ++i){
       QFileInfo fileinfo = list[i];
       QString ts=fileinfo.fileName();
       if(fileinfo.isDir()){ //if it is dir
                //todo    
       }
       else if(ts.startsWith(quenum)){
           QString filepath=fileinfo.filePath();  //获取文件路径
        QString filepath=fileinfo.fileName();  //获取文件名字,不包含路径
    } }

    有了这几个函数,我们就可以遍历一个文件夹下的所有内容。

    但此时还有一个问题,如果该文件夹下还有文件夹,我们想要递归的遍历所有文件夹下的内容,该怎么做呢?

    一种解决方法是写一个递归函数,不过这种方法函数调用和接口等不好实现。

    另一种解放方法就是使用队列,用队列来遍历,因为我们知道,文件结构类似于树,这样我们可以采用树的层序遍历的方法。

    遍历的过程中,我们对比当前文件名与想要查找的题目编号或名称是否相同。于是这一块任务就完成了。

        QList<QString> queue;
        queue.push_back(dir.path());
        while(!queue.empty()){
            QDir tmpdir;
            dir.setPath(queue.front());
            queue.pop_front();
            dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoSymLinks|QDir::NoDotAndDotDot);
            QFileInfoList list = dir.entryInfoList();
            for(int i=0; i<list.size(); ++i){
                QFileInfo fileinfo = list[i];
                QString ts=fileinfo.fileName();
                if(fileinfo.isDir()){ //if it is dir
                    queue.push_back(fileinfo.filePath());
    
                }
                else if(ts.startsWith(quenum)){
            //todo
    
                }
            }
        }

    3、最后一个内容就是在左边下面的文本框内显示检索结果,此内容下一节介绍。

    --xyten--

    --end--

  • 相关阅读:
    面向对象
    模块和包
    re、logging日志模块
    银行营业网点管理系统——implt包(CityAreaDaoImpl )
    银行营业网点管理系统——implt包(CityAreaDaoImpl )
    银行营业网点管理系统——implt包(BranchesDaoImpl )
    银行营业网点管理系统——implt包(BranchesDaoImpl )
    银行营业网点管理系统——implt包(BranchesDaoImpl )
    银行营业网点管理系统——dao包(BranchesDao)
    银行营业网点管理系统——dao包(BranchesDao)
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/12551616.html
Copyright © 2011-2022 走看看