情景导入
当我们在做应用时,一般都会遇到需要跳转页面的情况,按下一个按钮,跳转到对应的功能界面 ;或者需要进行角色选择,选择不同的角色,进入不同的界面。
今天就用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等组件,自行创建即可
告辞
本文介绍如何在QT应用中通过按钮操作实现页面的跳转。内容包括设计主界面、用户界面和管理员界面,以及各自界面的返回功能。用户通过下拉框选择角色并点击登录按钮,将跳转至对应界面。代码示例中详细注释了头文件、cpp源文件以及使用的组件。
929

被折叠的 条评论
为什么被折叠?



