返回项目声明及目录: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);

p, li { white-space: pre-wrap }

最后,完成按下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--

p, li { white-space: pre-wrap }

Leetcode本地阅读器开发--01界面设计二的更多相关文章

  1. Android本地视频播放器开发--视频解码

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  2. 怎样在Android本地视频播放器开发

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  3. [麻雀虽小]记 简易Markdown阅读器 开发全过程

    [麻雀虽小]记 简易Markdown阅读器 开发全过程 [TOC] 序言 项目地址: https://github.com/didikee/MDReader 测试文章地址: 2017 Android ...

  4. android rss阅读器开发一点小技巧

    这几天一直在学习开发Rss阅读器,遇到一个很坑的问题,InputSource这里总是出错.弄了好久,终于让我找到一个解决方法----看代码: new Thread(){ @Override publi ...

  5. pdf阅读器开发

    文章基于sumatrapdf的实现(当中mupdf中的内容不会太多涉及).以及自己在此基础上做的 优化,扩展.详细效果能够參考百度阅读器精简版. 最NB的还是得属于foxit.渲染速度一流,展示大图片 ...

  6. 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)

    AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...

  7. WDA演练一:用户登陆界面设计(二)

    一,登陆界面设计: 1.将系统编号灰显,默认初值 2.密码栏勾选密码显示,这样就不会明文显示在页面上了: Init方法中添加默认值代码: METHOD wddoinit . DATA lo_nd_zh ...

  8. Android开发:界面设计之六大layouts介绍

    1.帧布局 FrameLayout: FrameLayout是最简单的布局对象.在它里面的的所有显示对象都将固定在屏幕的左上角,不能指定位置,后一个会直接覆盖在前一个之上显示 因为上面的一段话这个是在 ...

  9. EasyPlayerPro(Windows)流媒体播放器开发之接口设计

    EasyPlayerPro(windows)接口说明如下: EasyPlayerPro_Open 说明:打开一个媒体流或者媒体文件进行播放,同时返回一个 player 对象指针 参数说明: fileU ...

  10. 手机新闻网站,手持移动新闻,手机报client,jQuery Mobile手机新闻网站,手机新闻网站demo,新闻阅读器开发

    我们坐在地铁.经常拿出新浪手机查看新闻.腾讯新闻,或者看新闻,等刷微信功能.你有没有想过如何实现这些目标. 移动互联网.更活泼. 由于HTML5未来,jQuery Moblie未来. 今天我用jqm的 ...

随机推荐

  1. c语言中计算逻辑表达式

    1.设变量m.n.a.b.c.d均为1,执行 (m=a!=b)&&(n=c!=d) 后,m.n的值为() A. 0 0        B.0 1        C. 1 0      ...

  2. .NET Core读写InfluxDB时序数据库的方法教程

    前言 在我们很多应用中会遇到有一种基于一系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据的预测告警.而时序数据库就是用于存 ...

  3. ES实战-桶查询

    目的 研究聚合查询的BUCKETS桶·到底是如何计算? PS:es版本为7.8.1 Bucket概念 关于es聚合查询,官方介绍,可以参考 es聚合查询-bucket. 有道翻译: 桶聚合不像指标聚合 ...

  4. linux环境下mariadb10.5.16的数据存储目录修改

    mysql或mariadb的数据,一般默认存在/var/lib/mysql目录下,本文介绍把mariadb数据存到容量较大的目录中,如/home 操作步骤: 1.将/var/lib/mysql的数据复 ...

  5. 初次使用gitee的笔记

    步骤及问题 1.git config --global user.name "username" 2.git config --global user.email "us ...

  6. java中取整数绝对值_Java之——位运算求整数绝对值通过下面的位运算可以得到一个整数的绝对值

    public int abs( int a ) {return (a + (a >> 31)) ^ (a >> 31) ;//前半部分-1或+0,后半部分取反 } a为正数的情 ...

  7. 搭建ftp服务器的超详细步骤

    第一步:打开控制面板. 1.1选择程序这个选项. 1.2选择启用或关闭window功能 1.3勾选如图有红箭头的这几个选项. 第二步:搜索iis且将其打开 . 2.1点击网站,且点击添加网站 物理路径 ...

  8. laravel Auth的使用

    最新的文档是使用的 laravel/jetstream 扩展包,旧版本中的 php artisan make:auth 命令在新版本中已不能用,但是此博客没有使用文档提供的扩展包,而是使用的是lara ...

  9. OceanBase使用OBLOADER、OBDUMPER进行导入导出

    需求背景 需要定时给OB进行数据备份,并且在需要时可以全量导入,所以只能通过脚本来减少手动操作的繁琐. 脚本示例 导出脚本 #!/bin/bash # 这一步不能省,如果不设置定时运行时可能会有问题 ...

  10. 为什么gdb通过0地址显示偏移会提示地址错误

    现象 在gdb中,如果想看一个struct的某个field的偏移量,和C语言一样可以通过对一个0地址变量取地址,然后取成员的偏移量获得.更神奇的地方在于和C语言一样,这里也不会触发内存访问异常. 另外 ...