主界面代码:
my.h:
#ifndef MY_H
#define MY_H
#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QLineEdit>
#include <QLabel>
#include <QCheckBox>
#include <QTextToSpeech>
#include <QMessageBox>
class My : public QWidget
{
Q_OBJECT
signals:
//该权限定义的都是信号函数
//自定义信号
void jumpSignal();
public slots:
//该权限定义的都是槽函数
void loginSlot();
void cancelSlot();
public:
My(QWidget *parent = nullptr);
~My();
QPushButton *loginBtn;
QPushButton *cancelBtn;
QLineEdit *accountEdit;
QLineEdit *passwdEdit;
QLabel *accountLab;
QLabel *passwdLab;
QLabel *registerLab;
QLabel *pictureLab;
QLabel *forgetLab;
QLabel *QRcodeLab;
QLabel *headPhotoLab;
QCheckBox *autoLoginBox;
QCheckBox *rememberBox;
QTextToSpeech *speecher;
};
#endif // MY_H
main.cpp:
#include "my.h"
#include "second.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
My w; //实例化第一个界面
w.show();
Second s; //实例化第二个界面
//将第一个和第二个界面的信号与槽进行连接
QObject::connect(&w,&My::jumpSignal,&s,&Second::jumpSlot);
return a.exec();
}
my.cpp:
#include "my.h"
My::My(QWidget *parent): QWidget(parent)
{
//1.
//更改窗口图标
this->setWindowIcon(QIcon(":/icon_nhgbq8i4bf/QQ.png"));
//更改窗口名称
this->setWindowTitle("QQ");
//设置固定尺寸
this->setFixedSize(600,400);
//2.登录按钮
loginBtn = new QPushButton("登录",this);
//设置大小
loginBtn->resize(100,50);
//将组件移动走
loginBtn->move(175,300);
//设置图标
loginBtn->setIcon(QIcon(":/icon_nhgbq8i4bf/denglu_1.png"));
//3.取消按钮
cancelBtn = new QPushButton("取消",this);
//设置大小
cancelBtn->resize(100,50);
//将组件移动走
cancelBtn->move(325,300);
//设置图标
cancelBtn->setIcon(QIcon(":/icon_nhgbq8i4bf/quxiao.png"));
//4.账号行编辑器
accountEdit = new QLineEdit(this);
//移动组件
accountEdit->move(150,175);
//重新设置大小
accountEdit->resize(300,40);
//设置占位文本
accountEdit->setPlaceholderText("QQ号码/手机/邮箱");
//5.密码行编辑器
passwdEdit = new QLineEdit(this);
//移动组件
passwdEdit->move(150,225);
//重新设置大小
passwdEdit->resize(300,40);
//设置重现模式为密文模式
passwdEdit->setEchoMode(QLineEdit::Password);
//设置占位文本
passwdEdit->setPlaceholderText("密码");
//6.账号图标标签,构造时给定文本内容以及父组件
accountLab = new QLabel("账号",this);
//将组件移动走
accountLab->move(115,185);
//设置图像
accountLab->setPixmap(QPixmap(":/icon_nhgbq8i4bf/denglu.png"));
//设置文本内容自适应
accountLab->setScaledContents(true);
//设置大小
accountLab->resize(20,20);
//7.密码图标标签,构造时给定文本内容以及父组件
passwdLab = new QLabel("密码",this);
//将组件移动走
passwdLab->move(115,235);
//设置图像
passwdLab->setPixmap(QPixmap(":/icon_nhgbq8i4bf/denglumima.png"));
//设置文本内容自适应
passwdLab->setScaledContents(true);
//设置大小
passwdLab->resize(20,20);
//8.注册账号标签,构造时给定文本内容以及父组件,
registerLab = new QLabel("注册账号",this);
//将组件移动走
registerLab->move(20,360);
//9.图片标签,构造时给定文本内容以及父组件
pictureLab = new QLabel("label",this);
//lab4->move(50,50);
//设置图像
pictureLab->setPixmap(QPixmap(":/icon_nhgbq8i4bf/3.jpg"));
//设置文本内容自适应
pictureLab->setScaledContents(true);
//设置大小
pictureLab->resize(600,150);
//10.忘记密码标签,构造时给定文本内容以及父组件
forgetLab = new QLabel("忘记密码",this);
//将组件移动走
forgetLab->move(350,277);
//11.二维码标签,构造时给定文本内容以及父组件
QRcodeLab = new QLabel(this);
//将组件移动走
QRcodeLab->move(540,340);
//设置图像
QRcodeLab->setPixmap(QPixmap(":/icon_nhgbq8i4bf/4.png"));
//设置文本内容自适应
QRcodeLab->setScaledContents(true);
//设置大小
QRcodeLab->resize(30,30);
//12.头像标签,构造时给定文本内容以及父组件
headPhotoLab = new QLabel(this);
//将组件移动走
headPhotoLab->move(250,80);
//设置图像
headPhotoLab->setPixmap(QPixmap(":/icon_nhgbq8i4bf/5.jpg"));
//设置文本内容自适应
headPhotoLab->setScaledContents(true);
//设置固定大小
headPhotoLab->setFixedSize(80, 70);
//13.复选框1
autoLoginBox = new QCheckBox("自动登录",this);
//将组件移动走
autoLoginBox->move(150,275);
//14.复选框2
rememberBox = new QCheckBox("记住密码",this);
//将组件移动走
rememberBox->move(250,275);
//15.播报者
speecher = new QTextToSpeech(this);
//***********************************信号与槽*************************************//
//16.将登录按钮点击信号连接到槽函数
connect(loginBtn,&QPushButton::clicked,this,&My::loginSlot);
//17.将取消按钮点击信号连接到槽函数
connect(cancelBtn,&QPushButton::clicked,this,&My::cancelSlot);
}
//析构函数
My::~My()
{
}
//***********************************类外定义*************************************//
//自定义槽函数实现部分
//登录按钮被点击产生的信号连接的槽函数
void My::loginSlot()
{
if(accountEdit->text() == "admin" && passwdEdit->text() == "123456")
{
//弹出登录成功对话框
QMessageBox successBox( //构造出一个box对象,使用有参构造完成
QMessageBox::Information, //图标
"success", //对话框标题
"登录成功!", //文本内容
QMessageBox::Ok, //提供的按钮
this); //父组件
//将对象进入运行态
int ret = successBox.exec();
if(ret == QMessageBox::Ok)
{
//关闭当前界面
this->close();
//发射跳转信号
emit jumpSignal();
}
}
else
{
//登录失败,弹出对话框
//方法一:属性
//1.实例化一个消息对话框对象
QMessageBox errorBox( //构造出一个box对象,使用有参构造完成
QMessageBox::Critical, //图标
"error", //对话框标题
"账号密码不匹配,是否重新登录?", //文本内容
QMessageBox::Ok|QMessageBox::Cancel, //提供的按钮
this); //父组件
//将对象进入运行态
int ret = errorBox.exec();
//对用户选择的结果进行选择
if(ret == QMessageBox::Cancel)
{
this->close();
}
passwdEdit->clear();
}
}
//取消按钮被点击产生的信号连接的槽函数
void My::cancelSlot()
{
//方法二:静态成员函数版
QMessageBox::StandardButton ret = QMessageBox::question(
this,
"confirm",
"你是否要退出登录?",
QMessageBox::Yes|QMessageBox::No,
QMessageBox::Yes);
if(ret ==QMessageBox::Yes)
{
this->close();
}
}
登录成功后界面:
second.h:
#ifndef SECOND_H
#define SECOND_H
#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QLineEdit>
#include <QLabel>
#include <QCheckBox>
#include <QTextToSpeech>
namespace Ui {
class Second;
}
class Second : public QWidget
{
Q_OBJECT
public:
explicit Second(QWidget *parent = nullptr);
~Second();
public slots:
void jumpSlot();
private:
Ui::Second *ui;
};
#endif // SECOND_H
second.cpp:
#include "second.h"
#include "ui_second.h"
Second::Second(QWidget *parent) :QWidget(parent),ui(new Ui::Second)
{
ui->setupUi(this);
//1.
//更改窗口图标
this->setWindowIcon(QIcon(":/icon_nhgbq8i4bf/QQ.png"));
//更改窗口名称
this->setWindowTitle("QQ");
//设置固定尺寸
this->setFixedSize(1000,800);
}
Second::~Second()
{
delete ui;
}
//处理界面跳转函数对应的槽函数
void Second::jumpSlot()
{
this->show(); //展示该界面
}
运行结果: