QTday2(登录界面+跳转——小黄人篇)

1.完成登录框的按钮操作,并在登录成功后进行界面跳转

form.h:

cpp 复制代码
#ifndef FORM_H
#define FORM_H

#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QLineEdit>             //行编辑器
#include <QLabel>                //标签类
#include <QMovie>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

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

public slots:
    void jump_slot();     //定义有关处理跳转信号的槽函数

//private slots:
//    void my_slot();

private:
    Ui::Form *ui;
    QLabel *lab1;
};

#endif // FORM_H

widget.h:

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QLineEdit>             //行编辑器
#include <QLabel>                //标签类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT
signals:
    void my_signal();          //自定义信号函数
    void jump();               //自定义跳转函数

public slots:
    void my_slot();            //自定义的槽函数

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    QLabel *lab1;
    QLabel *lab2;
    QLabel *lab3;
    QLineEdit *edit1;
    QLineEdit *edit2;
    QPushButton *btn1;
    QPushButton *btn2;
};
#endif // WIDGET_H

form.cpp:

cpp 复制代码
#include "form.h"
#include "ui_form.h"

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    
    this->setFixedSize(400,300);                 //设置固定尺寸
    this->setWindowTitle("小徐的聊天室");          //窗口标题
    this->setWindowIcon(QIcon(":/wodepeizhenshi.png"));   //设置窗口的icon
    
    lab1 = new QLabel("LOGO",this);
    lab1->resize(400,300);
//    lab1->setPixmap(QPixmap(":/1.gif"));
    QMovie *movie = new QMovie(":/1.gif");
    lab1->setMovie(movie); // 1. 设置要显示的 GIF 动画图片
    movie->start(); // 2. 启动动画
    lab1->show();
    lab1->setScaledContents(true);                 //设置内容自适应
}

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

//处理跳转信号函数对应的槽函数
void Form::jump_slot()
{
    this->show();             //将当前界面进行展示
}

main.cpp:

cpp 复制代码
#include "widget.h"
#include "form.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    Form f;
    QObject::connect(&w, &Widget::jump,&f,&Form::jump_slot);

    return a.exec();
}

widget.cpp:

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>                     //输出函数对应的头文件
#include <QIcon>

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

    //信号函数也可以连接信号函数
    //connect(ui->jumpBtn,&QPushButton::clicked,this,&Widget::jump)

    this->setFixedSize(540,410);                 //设置固定尺寸
    this->setWindowTitle("小徐的聊天室");          //窗口标题
    this->setWindowIcon(QIcon(":/wodepeizhenshi.png"));   //设置窗口的icon

    //1、实例化标签
    lab1 = new QLabel("LOGO",this);
    lab1->resize(540,220);
    lab1->setPixmap(QPixmap(":/logo.png"));
    lab1->setScaledContents(true);                 //设置内容自适应

    lab2 = new QLabel("账号",this);
    lab2->resize(35,35);
    lab2->move(115,230);
    lab2->setPixmap(QPixmap(":/userName.jpg"));
    lab2->setScaledContents(true);

    lab3 = new QLabel("密码",this);
    lab3->resize(35,35);
    lab3->move(lab2->x(),lab2->y()+65);
    lab3->setPixmap(QPixmap(":/passwd.jpg"));
    lab3->setScaledContents(true);

    //2、构造行编辑器,构造时给定父组件
    edit1 = new QLineEdit(this);
    edit1->setPlaceholderText("QQ/手机/邮箱");           //设置编辑器的占位文本
    edit1->resize(230,40);                              //设置尺寸
    edit1->move(lab2->x()+80,lab2->y());                //移动位置

    //3、构造行编辑器,构造时给定父组件以及文本内容
    edit2 = new QLineEdit(this);
    edit2->setPlaceholderText("密码");                   //设置编辑器的占位文本
    edit2->resize(230,40);                              //设置尺寸
    edit2->move(lab3->x()+80,lab2->y());                //移动位置
    edit2->resize(edit1->size());
    edit2->move(edit1->x(),edit1->y()+60);
    edit2->setEchoMode(QLineEdit::Password);             //设置回显模式

    //4、使用无参构造添加一个按钮
    btn1 = new QPushButton;   //无参构造
    btn1->setParent(this);         //给组件指定父组件,让其依附于界面而存在
    btn1->setText("登录");         //给组件设置文本内容
    btn1->resize(QSize(90,35));   //设置按钮组件的大小
    btn1->move(195,360);          //移动组件位置
    btn1->setIcon(QIcon(":/login.png"));

    //5、构造按钮时,指定父组件
    btn2 = new QPushButton(this);      //将当前界面设置成父组件
    btn2->setText("取消");
    btn2->resize(btn1->size());                     //使用其他按钮的大小设置该组件的大小
    btn2->move(btn1->x()+140,btn1->y());
    btn2->setIcon(QIcon(":/cancel.png"));    //设置图标
    connect(btn1,&QPushButton::clicked,this,&Widget::my_slot);
    connect(this,&Widget::my_signal,this,&Widget::close);
    connect(btn2,SIGNAL(clicked()),this,SLOT(close()));
}

//处理登录按钮对应槽函数的实现
void Widget::my_slot()
{
    if(edit1->text()=="admin" &&edit2->text()=="123456")
    {
        qDebug() << "登录成功";
        emit jump();
        this->close();
    }
    else
    {
        qDebug() << "登录失败";
        this->close();
    }
}

Widget::~Widget()
{
    delete ui;
}
相关推荐
开始了码16 分钟前
UDP 协议详解与 Qt 实战应用
qt·网络协议·udp
深蓝海拓15 小时前
PySide6从0开始学习的笔记(三) 布局管理器与尺寸策略
笔记·python·qt·学习·pyqt
꧁坚持很酷꧂15 小时前
Windows安装Qt Creator5.15.2(图文详解)
开发语言·windows·qt
淼淼76317 小时前
QT表格与数据
开发语言·qt
小灰灰搞电子17 小时前
Qt 实现炫酷锁屏源码分享
开发语言·qt·命令模式
追烽少年x18 小时前
Qt面试题合集(二)
qt
零小陈上(shouhou6668889)19 小时前
YOLOv8+PyQt5玉米病害检测系统(yolov8模型,从图像、视频和摄像头三种路径识别检测)
python·qt·yolo
蓝天智能20 小时前
QT实战:qrc资源动态加载
qt
四维碎片20 小时前
【Qt】生产者-消费者模式学习笔记
笔记·qt·学习
追烽少年x1 天前
Qt面试题合集(一)
qt