Qt编写上下界面切换效果/前进到下一个界面/后退到上一个页面/零件工艺及管理设计系统

一、前言说明

上下切换界面的效果在网页上还是比较常见的,也就是后退可以切换到上一个打开的界面,前进可以切换到当前页面的下一个打开过的页面,如果没有上一个下一个则不切换,一般这种功能是一些年纪比较大的人常用,年轻人可能首选单击对应的菜单或者按钮去切换到自己想要的界面,而不是通过上下按钮去切换。如果只有一级菜单,那这个功能实现还是非常简单的,只需要记住对应切换过的界面的索引即可,每当切换到一个页面,则加入对应的索引。而如果还有二级菜单,则还需要记住对应的二级页面的子页面的索引,先切换到一级页面,然后切换到二级页面,这个是本功能的最大难点。

算法思路:

  1. 定义跳转索引存储切换到的页面,前进和后退按钮单击的时候改变,同时在主动单击了菜单按钮的时候自动移到末尾
  2. 定义跳转时间存储最后触发跳转的时间,避免跳转产生的页面切换记录到跳转队列中,只有用户单击按钮的切换才需要存储
  3. 定义跳转队列存储页面标识,格式(一级菜单索引_二级菜单索引),比如系统设置对应 6_0 6_1
  4. 添加跳转页面标识中需要对重复的页面进行过滤,比如用户单击了重复的按钮
  5. 一级菜单和二级菜单所在的页面关联全局跳转信号进行判断处理
  6. 主界面一级菜单切换,需要判断第一个标识切换到对应的子页面
  7. 子界面二级菜单切换,需要判断第一个标识是否正确,然后再判断第二个标识切换到对应的子页面
  8. 堆栈窗体切换前都判断下是否已经在
  9. 页面跳转带了标识和参数,参数可以存储各种数据集合用于查询处理等

二、效果图



三、功能特点

四、相关地址

  1. 国内站点:https://gitee.com/feiyangqingyun
  2. 国际站点:https://github.com/feiyangqingyun
  3. 个人作品: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)) <= 1) {
            return;
        }
    }

    //添加页面信息
    JumpPages << jumpPage;
    //一旦切换过页面则重置索引到最后
    //这里很容易误解需要-1,其实上面刚刚添加过所有又+1了
    JumpIndex = count;
    //qDebug() << TIMEMS << "appendJumpPage" << JumpIndex << JumpPages;
}

#include "frmjumppage.h"
#include "ui_frmjumppage.h"
#include "qthelper.h"

frmJumpPage::frmJumpPage(QWidget *parent) : QWidget(parent), ui(new Ui::frmJumpPage)
{
    ui->setupUi(this);
    this->initForm();
    this->initIcon();
}

frmJumpPage::~frmJumpPage()
{
    delete ui;
}

void frmJumpPage::initForm()
{
    //通过弱属性机制设置当前面板的按钮为圆形
    ui->widget->setProperty("shape", "circle");
    ui->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, "");
    }
}
相关推荐
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner1 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz6 天前
QML Hello World 入门示例
qt
xcyxiner9 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner10 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner10 天前
DicomViewer (添加模型类)3
qt
xcyxiner11 天前
DicomViewer (目录调整) 2
qt
xcyxiner11 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能13 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G13 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt