实现的逻辑如下
首先分析该功能需要实现的几个场景:
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++ 后退前进资源浏览器实现方式,附代码相关推荐

  1. java乘法表_Java中四种9*9乘法表的实现方式(附代码)

    前言: 初学java,实现99乘法表是必学必会的内容. 需求 : 分别写出上下左右,对应四个角的乘法表. 思路: 可以先打印出*星星,形成一个直角三角形,然后再替换成乘法公式. 代码如下: publi ...

  2. SpringCloud-创建服务消费者-Ribbon方式(附代码下载)

    场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  3. 从实例一步一步入门学习SpringCloud的Eureka、Ribbon、Feign、熔断器、Zuul的简单使用(附代码下载)

    场景 SpringCloud -创建统一的依赖管理: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102530574 Sprin ...

  4. 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码

    通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...

  5. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

  6. php如何实现文件操作,php实现操作文件的各种方式总结(附代码)

    这篇文章给大家介绍的内容是关于php实现操作文件的各种方式总结(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 正常来说,php操作mysql才是绝配,但是如果考虑到安全问题 ...

  7. 【闲得无聊】写个web版功德无量附代码+静态资源

    [闲得无聊]写个web版功德无量附代码+静态资源 Vue2环境开发 web版无量功德 <template> <div class="merits">< ...

  8. Unity游戏开发——新发教你做游戏(三):3种资源加载方式

    文章目录 一.前言 二.Unity的目录结构规范 1.Resources(不是很推荐把资源放这个目录) 2.RawAssets(存放生资源) 3.GameRes(存放熟资源) 4.StreamingA ...

  9. Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)

    Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤) 目录

  10. 腾讯视频客户端在文件资源浏览器的顽固图标如何删除

    腾讯视频客户端在文件资源浏览器的顽固图标如何删除 安装了腾讯视频客户端后,会很"流氓"地在资源管理器中生成一个很顽固的图标,如下图所示.该图标打不走删不掉,程序中并没有提供删除该图 ...

最新文章

  1. Python-EEG工具库MNE中文教程(10)-信号空间投影SSP数学原理
  2. QT的QLineSeries类的使用
  3. 利用日志传送实现高可用性
  4. PhpStorm11.0 配置在浏览器中打开文件
  5. while和for循环
  6. Oracle命令--如何查看oracle中创建的所有目录
  7. 仅信用卡大小,性能比TX2强15倍,英伟达边缘AI计算新品Jetson Xavier NX
  8. django如何连接mysql_Django如何连接mysql
  9. 最新最全git使用大全
  10. 通用型CRC校验算法
  11. 解决UWP应用无法使用本地代理
  12. T检验与F检验的区别_f检验和t检验的关系
  13. win10开启自带移动热点以及解决无法设置移动热点,请打开WLAN问题
  14. plsql相同变量高亮显示
  15. 下载并安装MS office 365
  16. 新突破!德国MPQ证实光子是量子比特载波的优选
  17. 增加tensor维度 torch
  18. npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT
  19. IOS开发环境 Xcode 下载 安装
  20. sqlyog 试用版过期

热门文章

  1. ubuntu 18.04 install tensorflow-nightly-gpu and tfp-nightly
  2. python因子分析案例_因子分析及python实现(一)
  3. WIN下静默安装MSI文件
  4. 移动硬盘文件系统错误16389
  5. 前端:移动端和PC端的区别
  6. 贝多芬《 d小调第九交响曲》(Symphony No.9 in d Minor, Op.125, 1824)(永无完结)
  7. 分时电价模型,削峰填谷,转移24小时一天中用电率,减少谷峰差
  8. Jetpack Compose Modifier 使用入门
  9. 编写自己的Photon游戏服务器(Yanlz+Unity+Photon+Server+UNet+KBEngine+Socket+纤程+UDP+立钻哥哥+==)
  10. ctfshow F5杯 部分WP(writeup) 超详细