C++ 后退前进资源浏览器实现方式,附代码
实现的逻辑如下
首先分析该功能需要实现的几个场景:
A 点击进入 B, B能够返回到A, A能够前进到B
A点击进入 B, B点击进入C, C返回到B后,B点击进入D,此时D返回到B,B返回到A。
因此可以使用两个栈,一个用来存储已经点击进入的文件浏览器地址叫后退栈,一个用来存储后退时文件浏览器地址栈pop掉的叫前进栈。
第一个场景只需要进行普通的push、pop操作就行了。
第二个场景则需要特殊处理,如果回退到某一浏览器地址然后点击新的浏览器地址的话,后退栈正常操作,但是前进栈需要清空,然后添加这个新浏览器地址。bool m_ingoreUrlVisterFlag = false;//是否有前惠安还是后退方问当前地址的标志
QFileInfo m_lastUrlInfo; //上一次访问的地址保存的信息定义两个堆QStack
QStack<QFileInfo> m_UrlStackBack; //后退的QStack
QStack<QFileInfo> m_UrlStackForword; //保存前的的QStackQFileInfo可以定义为url地址要不文件路径,比如“C:\Windows\Temp” “C:\QMDownload” “C:\Program Files”
现在要实现的方式就是,void XXXXXBrowser::SlotBrowserBack()
{m_ingoreUrlVisterFlag = true;if(m_UrlStackBack.size()>1&&m_UrlStackForword.size()==0){QFileInfo dtFileInfo = m_UrlStackBack.pop();if( dtFileInfo.exists() ){if(dtFileInfo.isDir()){m_UrlStackForword.push(dtFileInfo);}}}if(!m_UrlStackBack.isEmpty()){QFileInfo dtFileInfo = m_UrlStackBack.pop();if( dtFileInfo.exists() ){if(dtFileInfo.isDir()){QString readString = "back url "+dtFileInfo.filePath();qDebug("readString = %s",qPrintable(readString));m_UrlStackForword.push(dtFileInfo);VistorBrowserUrl(dtFileInfo);EnableBtnStatus(m_UrlStackBack.size(),m_UrlStackForword.size());}else{m_ingoreUrlVisterFlag = false;}}else{m_ingoreUrlVisterFlag = false;}}else{m_ingoreUrlVisterFlag = false;}}void XXXXXBrowser::SlotBrowserForward()
{m_ingoreUrlVisterFlag = true;if(m_UrlStackForword.size()>1&&m_UrlStackBack.size()==0){QFileInfo dtFileInfo = m_UrlStackForword.pop();if( dtFileInfo.exists() ){if(dtFileInfo.isDir()){m_UrlStackBack.push(dtFileInfo);}}}if(!m_UrlStackForword.isEmpty()){QFileInfo dtFileInfo = m_UrlStackForword.pop();if( dtFileInfo.exists() ){if(dtFileInfo.isDir()){QString readString = "Forward url "+dtFileInfo.filePath();qDebug("readString = %s",qPrintable(readString));m_UrlStackBack.push(dtFileInfo);VistorBrowserUrl(dtFileInfo);EnableBtnStatus(m_UrlStackBack.size(),m_UrlStackForword.size());}else{m_ingoreUrlVisterFlag = false;}}else{m_ingoreUrlVisterFlag = false;}}else{m_ingoreUrlVisterFlag = false;}//m_ingoreUrlVisterFlag = false;}void XXXXXBrowser::VistorBrowserUrl(QTreeWidgetItem *pTreeItem, QFileInfo fileInfo)
{if(m_ingoreUrlVisterFlag==false){if(m_UrlStackBack.size()==0){//first vise new url,or back is null later to vister newurl ,注意这是中式英语不要在意语法if(m_lastfileInfo.isDir()==true){m_UrlStackBack.push(m_lastfileInfo);}}//访问新地址if(m_lastfileInfo!=fileInfo&&fileInfo.isDir()==true){m_UrlStackBack.push(fileInfo);}while(!m_UrlStackForword.isEmpty()){m_UrlStackForword.pop();}}EnableBtnStatus(m_UrlStackBack.size(),m_UrlStackForword.size());if(fileInfo.isDir()==true){FileSystemWatcher::addWatchPath(this,fileInfo.filePath());}m_lastfileInfo = fileInfo;m_ingoreUrlVisterFlag = false;//以下是真正访问url做的事,比如把当前C:\Windows\Temp所有文件列出来等,有点像资源浏览器的后退前进方式
}void XXXXXBrowser::EnableBtnStatus(int nBackSize,int nForwordSize)
{m_backtoolButton->setEnabled(false);m_forwardtoolButton->setEnabled(false);if(nBackSize>0){m_backtoolButton->setEnabled(true);}if(nForwordSize>0){m_forwardtoolButton->setEnabled(true);}}
为什么前进,后退时都要压入上一个,那是因为当前页面地址,要不前进后退,第一下没反应,我的逻辑写完了,你们有更好的方法可以通知我
C++ 后退前进资源浏览器实现方式,附代码相关推荐
- java乘法表_Java中四种9*9乘法表的实现方式(附代码)
前言: 初学java,实现99乘法表是必学必会的内容. 需求 : 分别写出上下左右,对应四个角的乘法表. 思路: 可以先打印出*星星,形成一个直角三角形,然后再替换成乘法公式. 代码如下: publi ...
- SpringCloud-创建服务消费者-Ribbon方式(附代码下载)
场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 从实例一步一步入门学习SpringCloud的Eureka、Ribbon、Feign、熔断器、Zuul的简单使用(附代码下载)
场景 SpringCloud -创建统一的依赖管理: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102530574 Sprin ...
- 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码
通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...
- Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载
场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...
- php如何实现文件操作,php实现操作文件的各种方式总结(附代码)
这篇文章给大家介绍的内容是关于php实现操作文件的各种方式总结(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 正常来说,php操作mysql才是绝配,但是如果考虑到安全问题 ...
- 【闲得无聊】写个web版功德无量附代码+静态资源
[闲得无聊]写个web版功德无量附代码+静态资源 Vue2环境开发 web版无量功德 <template> <div class="merits">< ...
- Unity游戏开发——新发教你做游戏(三):3种资源加载方式
文章目录 一.前言 二.Unity的目录结构规范 1.Resources(不是很推荐把资源放这个目录) 2.RawAssets(存放生资源) 3.GameRes(存放熟资源) 4.StreamingA ...
- Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)
Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤) 目录
- 腾讯视频客户端在文件资源浏览器的顽固图标如何删除
腾讯视频客户端在文件资源浏览器的顽固图标如何删除 安装了腾讯视频客户端后,会很"流氓"地在资源管理器中生成一个很顽固的图标,如下图所示.该图标打不走删不掉,程序中并没有提供删除该图 ...
最新文章
- Python-EEG工具库MNE中文教程(10)-信号空间投影SSP数学原理
- QT的QLineSeries类的使用
- 利用日志传送实现高可用性
- PhpStorm11.0 配置在浏览器中打开文件
- while和for循环
- Oracle命令--如何查看oracle中创建的所有目录
- 仅信用卡大小,性能比TX2强15倍,英伟达边缘AI计算新品Jetson Xavier NX
- django如何连接mysql_Django如何连接mysql
- 最新最全git使用大全
- 通用型CRC校验算法
- 解决UWP应用无法使用本地代理
- T检验与F检验的区别_f检验和t检验的关系
- win10开启自带移动热点以及解决无法设置移动热点,请打开WLAN问题
- plsql相同变量高亮显示
- 下载并安装MS office 365
- 新突破!德国MPQ证实光子是量子比特载波的优选
- 增加tensor维度 torch
- npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT
- IOS开发环境 Xcode 下载 安装
- sqlyog 试用版过期
热门文章
- ubuntu 18.04 install tensorflow-nightly-gpu and tfp-nightly
- python因子分析案例_因子分析及python实现(一)
- WIN下静默安装MSI文件
- 移动硬盘文件系统错误16389
- 前端:移动端和PC端的区别
- 贝多芬《 d小调第九交响曲》(Symphony No.9 in d Minor, Op.125, 1824)(永无完结)
- 分时电价模型,削峰填谷,转移24小时一天中用电率,减少谷峰差
- Jetpack Compose Modifier 使用入门
- 编写自己的Photon游戏服务器(Yanlz+Unity+Photon+Server+UNet+KBEngine+Socket+纤程+UDP+立钻哥哥+==)
- ctfshow F5杯 部分WP(writeup) 超详细