IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> C++ 后退前进资源浏览器实现方式,附代码 -> 正文阅读

[移动开发]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; //保存前的的QStack

QFileInfo可以定义为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);
    }

}



为什么前进,后退时都要压入上一个,那是因为当前页面地址,要不前进后退,第一下没反应,我的逻辑写完了,你们有更好的方法可以通知我

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2022-05-03 09:26:10  更:2022-05-03 09:26:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:44:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码