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);
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界面设计二的更多相关文章
- Android本地视频播放器开发--视频解码
在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...
- 怎样在Android本地视频播放器开发
在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...
- [麻雀虽小]记 简易Markdown阅读器 开发全过程
[麻雀虽小]记 简易Markdown阅读器 开发全过程 [TOC] 序言 项目地址: https://github.com/didikee/MDReader 测试文章地址: 2017 Android ...
- android rss阅读器开发一点小技巧
这几天一直在学习开发Rss阅读器,遇到一个很坑的问题,InputSource这里总是出错.弄了好久,终于让我找到一个解决方法----看代码: new Thread(){ @Override publi ...
- pdf阅读器开发
文章基于sumatrapdf的实现(当中mupdf中的内容不会太多涉及).以及自己在此基础上做的 优化,扩展.详细效果能够參考百度阅读器精简版. 最NB的还是得属于foxit.渲染速度一流,展示大图片 ...
- 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)
AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...
- WDA演练一:用户登陆界面设计(二)
一,登陆界面设计: 1.将系统编号灰显,默认初值 2.密码栏勾选密码显示,这样就不会明文显示在页面上了: Init方法中添加默认值代码: METHOD wddoinit . DATA lo_nd_zh ...
- Android开发:界面设计之六大layouts介绍
1.帧布局 FrameLayout: FrameLayout是最简单的布局对象.在它里面的的所有显示对象都将固定在屏幕的左上角,不能指定位置,后一个会直接覆盖在前一个之上显示 因为上面的一段话这个是在 ...
- EasyPlayerPro(Windows)流媒体播放器开发之接口设计
EasyPlayerPro(windows)接口说明如下: EasyPlayerPro_Open 说明:打开一个媒体流或者媒体文件进行播放,同时返回一个 player 对象指针 参数说明: fileU ...
- 手机新闻网站,手持移动新闻,手机报client,jQuery Mobile手机新闻网站,手机新闻网站demo,新闻阅读器开发
我们坐在地铁.经常拿出新浪手机查看新闻.腾讯新闻,或者看新闻,等刷微信功能.你有没有想过如何实现这些目标. 移动互联网.更活泼. 由于HTML5未来,jQuery Moblie未来. 今天我用jqm的 ...
随机推荐
- (0319) uvm 库的安装编译:
https://mp.weixin.qq.com/s/jCSp89UYsEZGRU2BN5IloA
- 国产低功耗Soc蓝牙语音遥控器芯片HS6621 /OM6621
随着物联网技术不断发展,家用电器往智能化方向持续迭代,使用红外遥控器这种传统的互动方式已经满足不了实际的使用需求,蓝牙语音遥控器作为人机交互新载体,逐渐取代传统红外遥控器成为家居设备的标配.相比于传统 ...
- python3.10.0字符串基础
字符串支持 索引 (下标访问),第一个字符的索引是 0.单字符没有专用的类型,就是长度为一的字符串: >>> word = 'Python' >>> word[0] ...
- 小程序调用OCR识别操作的过程,特此记录。
bu废话,直接记录.(注:我用的是云调用!!!) 对于大家首次使用该操作时,推荐两位大佬的文章,大家完全可以看两位大佬的文章,一步一步来就可以实现. 第一个文章呢,先看这个 https://blog. ...
- iOS线程 - GCD在开发中的常见问题
GCD 在开发中的常见问题 1 - 主线程中调用方法 ① 执行 testONE 后的输出结果:1 5 2 4 3 1 -(void)testONE{ 2 3 // 并发队列 4 dispatc ...
- shell脚本,shell语法和结构(以Cshell/TC shell为例)
1.C shell/TC shell常用语法和结构 (1) shbang行: #!/bin/sh,通知内核使用哪种内核解释脚本; #!/bin/csh 或 #!/bin/tcsh (2) 注释: 以# ...
- 使用centos8.5配置一台YUM源服务器
公司的生产环境部署的Centos8.5, 现在已经EOL了, 为了给生产和测试机继续提供yum/dnf服务, 特意在公司的内部机房部署了一套本地yum源. 环境:centos 8.5 1. 下载镜像 ...
- Web安全测试之XSS【转】
作者: 小坦克 来源: 博客园 原文链接:http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html XSS 全称(Cross ...
- Fiddler 教程【转】
作者: 小坦克 来源: 博客园 发布时间: 2012-07-07 14:20 阅读: 71973 次 推荐: 45 原文链接 [收藏] 阅读目录 Fiddler的基本介绍 Fiddl ...
- python处理word、ppt、excel
介绍采用python_docx模块处理word文档的基本技巧,特别是图片如何提取和写入. python_docx模块只能处理docx,不支持doc,如需使用,要进行转换.代码入下: from win3 ...