首页| 论坛| 消息
主题:Qt编写上下界面切换效果/前进到下一个界面/后退到上一个页面/零件工艺及管理设计系统
liudianwu发表于 2025-10-07 09:05
## 一、前言说明
上下切换界面的效果在网页上还是比较常见的,也就是后退可以切换到上一个打开的界面,前进可以切换到当前页面的下一个打开过的页面,如果没有上一个下一个则不切换,一般这种功能是一些年纪比较大的人常用,年轻人可能首选单击对应的菜单或者按钮去切换到自己想要的界面,而不是通过上下按钮去切换。如果只有一级菜单,那这个功能实现还是非常简单的,只需要记住对应切换过的界面的索引即可,每当切换到一个页面,则加入对应的索引。而如果还有二级菜单,则还需要记住对应的二级页面的子页面的索引,先切换到一级页面,然后切换到二级页面,这个是本功能的最大难点。
**算法思路:**
1. 定义跳转索引存储切换到的页面,前进和后退按钮单击的时候改变,同时在主动单击了菜单按钮的时候自动移到末尾
2. 定义跳转时间存储最后触发跳转的时间,避免跳转产生的页面切换记录到跳转队列中,只有用户单击按钮的切换才需要存储
3. 定义跳转队列存储页面标识,格式(一级菜单索引_二级菜单索引),比如系统设置对应 6_0 6_1
4. 添加跳转页面标识中需要对重复的页面进行过滤,比如用户单击了重复的按钮
5. 一级菜单和二级菜单所在的页面关联全局跳转信号进行判断处理
6. 主界面一级菜单切换,需要判断第一个标识切换到对应的子页面
7. 子界面二级菜单切换,需要判断第一个标识是否正确,然后再判断第二个标识切换到对应的子页面
8. 堆栈窗体切换前都判断下是否已经在
9. 页面跳转带了标识和参数,参数可以存储各种数据集合用于查询处理等
## 二、效果图

## 三、功能特点

## 四、相关地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)

## 五、相关代码
```cpp
#include "dbdata.h"
DbConnThread *DbData::DbLocal = 0;
int DbData::UserLogID = 0;
int DbData::JumpIndex = 0;
QDateTime DbData::JumpTime = QDateTime::currentDateTime().addDays(-1);
QStringList DbData::JumpPages = QStringList();
void DbData::appendJumpPage(const QString &jumpPage, bool checkExist, bool checkTime)
{
//超过最大数则移除最前面的
int count = JumpPages.count();
if (count >= 50) {
JumpPages.removeFirst();
}
//过滤重复的页面+跳转页面产生的
if (count > 0) {
QString jumpLast = JumpPages.last();
if (checkExist && jumpLast == jumpPage) {
return;
}
QDateTime now = QDateTime::currentDateTime();
if (checkTime && abs(now.secsTo(DbData::JumpTime)) btnBackward->setToolTip("后退");
ui->btnForeward->setToolTip("前进");
//全局换肤颜色变了自动更新图标
connect(AppEvent::Instance(), SIGNAL(changeStyle()), this, SLOT(initIcon()));
}
void frmJumpPage::initIcon()
{
//设置按钮图标
CommonNav::setIconBtn(ui->widget);
}
void frmJumpPage::on_btnBackward_clicked()
{
if (DbData::JumpIndex > 0) {
DbData::JumpIndex--;
QString type = DbData::JumpPages.at(DbData::JumpIndex);
AppEvent::Instance()->slot_jumpPage(type, "");
}
}
void frmJumpPage::on_btnForeward_clicked()
{
if (DbData::JumpIndex < DbData::JumpPages.count() - 1) {
DbData::JumpIndex++;
QString type = DbData::JumpPages.at(DbData::JumpIndex);
AppEvent::Instance()->slot_jumpPage(type, "");
}
}
```

浏览大图

浏览大图

浏览大图
下一页 (1/2)
回帖(0):

全部回帖(0)»
最新回帖
收藏本帖
发新帖