栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【Qt】一种多页面跳转的设计

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Qt】一种多页面跳转的设计

一、背景

​ 在开发中,常常需要多个页面之间组合出现的应用场景。例如首先出现一个登录页面,当登录成功后会显示另外一个页面;当选择其他操作后,又会出现其他的页面。

​ 就这个话题,Qt提供了一个QSplashScreen类可以用于简单的应用场景。当然这个类的功能主要是:在应用程序启动期间显示的闪屏;总的来说,可能就只能放置一张图片或者动态显示文本了。

​ 关于登录成功跳转或者登录失败退出之类的页面跳转需求又该如何实现呢?本文描述一个跳转的方法,并给出具体的实现代码。

二、效果演示

三、实现

​ (3-1)核心思路

​ 许多项目不会在main函数中直接创建具体的应用窗体实例,或者QWidget实例(简单的除外)。如果qml与c++混合开发,还需要将C++类进行qml运行环境上下文注册。这些操作如果都在main函数中实现,将使main函数体变得较长。

​ 所以说,这里抽象了一个AppManager类来进行软件应用管理,如果需要修改,增加模块,可以在该类下进行。

​ 总的来说,登录成功跳转和登录失败退出类似的页面跳转功能实现,还是通过信号和槽函数来实现

​ 【文件组织】

1、main.cpp //应用main函数
2、mainwindow.cpp/mainwndow.h //应用主窗口
3、loginpage.h/loginpage.cpp //登录页面
4、appmanager.h //应用管理器

(3-2)核心代码

//appmanager.h文件
#ifndef APPMANAGER_H
#define APPMANAGER_H

#include 
#include 
#include 

#include "loginpage.h"
#include "mainwindow.h"

class AppManager : public QObject
{
    Q_OBJECT
public:
    explicit AppManager(QObject *parent = nullptr):QObject(parent),
        m_mainWindow(nullptr)
    {
        m_loginpage = new LoginPage();
        m_loginpage->setStyleSheet("QDialog{background-color: qlineargradient(spread:pad, x1:0.403227, y1:0.165, x2:1, y2:1, stop:0 rgba(0, 130, 216, 255), stop:1 rgba(255, 255, 255, 255));}"
                                   "QPushButton{font: 14px '微软雅黑';color:white;background-color: rgb(99, 99, 99);border-radius: 6px;}"
                                   "QPushButton:hover{background-color: rgb(167, 167, 167);}");
        
        //登录页面中有两个QPushButton,一个ok,一个cancel;
        //当点击ok后,将创建MainWindow
        connect(m_loginpage,&LoginPage::btn_Ok,this,&AppManager::createMainWindow);
        //当点击cancel后,将退出应用
        connect(m_loginpage,&LoginPage::btn_Cancel,this,&AppManager::exitHandler);
        m_loginpage->setWindowTitle(QString("登录"));
	   
        //首先弹出登录页面
        m_loginpage->show();
    }

    ~AppManager(){}

public slots:
    void createMainWindow()
    {
        delete m_mainWindow;

        m_mainWindow = new MainWindow;

        m_mainWindow->show();

        m_loginpage->close();
    }

    void exitHandler()
    {
        QApplication::instance()->quit();
    }

private:
    //应用主窗口MainWindow
    QPointer m_mainWindow;
    
    //登录页面
    QPointer m_loginpage;
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664752.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号