QT-按下按钮实现页面跳转

本文介绍如何在QT应用中通过按钮操作实现页面的跳转。内容包括设计主界面、用户界面和管理员界面,以及各自界面的返回功能。用户通过下拉框选择角色并点击登录按钮,将跳转至对应界面。代码示例中详细注释了头文件、cpp源文件以及使用的组件。

情景导入

        当我们在做应用时,一般都会遇到需要跳转页面的情况,按下一个按钮,跳转到对应的功能界面 ;或者需要进行角色选择,选择不同的角色,进入不同的界面。

今天就用QT简单实现一下上述内容

内容描述
(1)设计三个界面:主界面、用户界面、管理员界面

(2)主界面描述:一个下拉框,实现角色的选择,一个登录按钮,点击后跳转到对应的界面

(3)管理员界面:一个返回按钮,点击后返回主界面

(4)用户界面   :一个返回按钮,点击后返回主界面

效果图

(1)主界面

(2)选择角色 -->管理员,并登录

                  

(点击返回可返回主界面)

(3)选择角色 -->用户,并登录

      

(点击返回可返回主界面)

代码附录

代码中都写了详细注释

(1)代码树结构

(2)头文件

myapp.h

#ifndef MYAPP_H
#define MYAPP_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MyApp; }
QT_END_NAMESPACE

class MyApp : public QMainWindow
{
    Q_OBJECT

    public:
        MyApp(QWidget *parent = nullptr);
        ~MyApp();
    private:
        Ui::MyApp *ui;
        void comboBox_display();

    private slots:
        void on_pushButton_clicked();
        void Show_Main_Page();
        void on_comboBox_currentTextChanged(const QString &arg1);
        void Switch_Role();

signals:
        void main_page();
        void admin_page();
        void user_page();
        void mesg_switch();

};
#endif // MYAPP_H

myadmin.h

#ifndef MYADMIN_H
#define MYADMIN_H


#include <QDialog>
namespace Ui {
class MyAdmin;
}
class MyAdmin : public QDialog
{
    Q_OBJECT

public:
    explicit MyAdmin(QWidget *parent = 0);
    ~MyAdmin();

private slots:
    void on_pushButton_clicked();//与login关联的槽函数
    void show_admin_page();
signals:
    void show_main_page();//显示主窗口信号
    void quit();//退出信号
private:
    Ui::MyAdmin *ui;
};
#endif // MYADMIN_H

myuser.h

#ifndef MYUSER_H
#define MYUSER_H

#include <QDialog>

namespace Ui {
class MyUser;
}

class MyUser : public QDialog
{
    Q_OBJECT

public:
    explicit MyUser(QWidget *parent = nullptr);
    ~MyUser();

private:
    Ui::MyUser *ui;
private slots:
    void Show_User_Page();
    void on_pushButton_clicked();
signals:
    void show_main_page();
};

#endif // MYUSER_H

(3)cpp源文件

main.cpp

/********************
 * Author:Easadon
 * Date  :2020.9.4
********************/

#include "myapp.h"
#include "myadmin.h"
#include "myuser.h"
#include <QApplication>
#include <string.h>
#include <QDebug>

//声明在外部定义好的全局变量Mesg
extern QString Mesg;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyApp mainpage;
    MyAdmin adminpage;
    MyUser userpage;

    mainpage.setWindowTitle("智慧生活");
    mainpage.setFixedSize(480,750);
    mainpage.show();

    adminpage.setFixedSize(480,750);
    adminpage.setWindowTitle("管理员界面");
    userpage.setFixedSize(480,750);
    userpage.setWindowTitle("用户界面");
    //按下管理员界面的按钮,返回主界面
    QObject::connect(&adminpage, SIGNAL(show_main_page()),
                     &mainpage,SLOT(Show_Main_Page()));
    //按下用户界面的按钮,返回主界面
    QObject::connect(&userpage, SIGNAL(show_main_page()),
                     &mainpage,SLOT(Show_Main_Page()));
    //获取下拉框的角色信息
    QObject::connect(&mainpage, SIGNAL(main_page()),
                     &mainpage,SLOT(Switch_Role()));
    //选择管理员角色,点击登录按钮,跳转到管理员界面
    QObject::connect(&mainpage,SIGNAL(admin_page()),
                     &adminpage,SLOT(show_admin_page()));
    //选择用户角色,点击登录按钮,跳转到用户界面
    QObject::connect(&mainpage,SIGNAL(user_page()),
                     &userpage,SLOT(Show_User_Page()));

    return a.exec();
}

myapp.cpp

/********************
 * Author:Easadon
 * Date  :2020.9.4
********************/
#include "myapp.h"
#include "ui_myapp.h"
#include "myadmin.h"
#include "myuser.h"
#include <QDebug>

//全局变量,保存下拉框所选择的文本信息
QString Mesg;

/******************主界面构造函数*******************
 * (1)显示下拉框组件
 * (2)连接下拉框文本变化的信号与对应槽
 * (3)检测到下拉框所选择的文本发生变化,触发槽函数,
 *     将当前选择的文本赋值给全局变量Mesg
*************************************************/
MyApp::MyApp(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MyApp)
{
    ui->setupUi(this);
    comboBox_display();
    connect(ui->comboBox,SIGNAL(currentTextChanged(const QString)),
            this,SLOT(on_comboBox_currentTextChanged(const QString)));
}

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

/************下拉框显示函数******************
 * (1)插入要进行选择的文本(管理员、用户)
 * (2)设置图标、文本格式
 * (3)这里不采用槽,直接使用普通函数即可
******************************************/
void MyApp::comboBox_display()
{
    QStringList Number;
    QIcon icon0,icon1;
    QFont font("Microsoft Yahei",15,20);
    ui -> comboBox -> clear();
    ui->comboBox->addItem(QString::asprintf("选择角色"));
    icon0.addFile("E:/QT/myproject/MyApp/MyApp/icon/admin.png");
    icon1.addFile("E:/QT/myproject/MyApp/MyApp/icon/user.png");
    ui->comboBox->addItem(icon0,QString::asprintf("管理员"));
    ui->comboBox->addItem(icon1,QString::asprintf("用户"));
    ui->comboBox-> setFont(font);
}

//显示主界面
void MyApp::Show_Main_Page()
{
    this -> show();
}

/*********主界面登录按钮槽函数**********
 * 登录按钮被按下,发送 main_page()信号
***********************************/
void MyApp::on_pushButton_clicked()
{
    this ->hide();
    emit main_page();
}

/********下拉框槽函数*********
 * 下拉框选择文本发生变化时触发
 * 将当前文本赋值给Mesg
***************************/
void MyApp::on_comboBox_currentTextChanged(const QString &arg1)
{
    Mesg = arg1;
    qDebug() << Mesg;
}

/************角色选择槽函数*************
 * 切换角色时,发送对应的信号确定跳转的页面
*************************************/
void MyApp::Switch_Role()
{
    if(Mesg == "管理员")
    {
        emit admin_page();
    }
    else if(Mesg == "用户")
    {
        emit user_page();
    }
}

myadmin.cpp

/********************
 * Author:Easadon
 * Date  :2020.9.4
********************/
#include "myadmin.h"
#include "ui_myadmin.h"
#include<QHBoxLayout>
#include "myapp.h"

MyAdmin::MyAdmin(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyAdmin)
{
    ui->setupUi(this);

}

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

void MyAdmin::on_pushButton_clicked()
{
    this->hide();//隐藏登录对话框
    emit show_main_page();//显示主窗口
}

void MyAdmin::show_admin_page()
{
    this -> show();
}

myuser.cpp

/********************
 * Author:Easadon
 * Date  :2020.9.4
********************/

#include "myuser.h"
#include "ui_myuser.h"

MyUser::MyUser(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyUser)
{
    ui->setupUi(this);
}

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

 //显示用户界面
void MyUser::Show_User_Page()
{
    this -> show();

}

void MyUser::on_pushButton_clicked()
{
    this->hide();//隐藏登录对话框
    emit show_main_page();//显示主窗口
}

(4)组件

用到comboBox、PushButton等组件,自行创建即可

告辞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值