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

tech2025-09-11  26

情景导入

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

今天就用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等组件,自行创建即可

告辞

最新回复(0)