Qt10-19

第一个界面的头文件

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QMovie>//动态图片所用的类
#include<QMessageBox>//消息对话框类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);//有参构造
    ~Widget();//析构函数
signals:
    void my_signal();//自定义信号
    void jump();//跳转信号
public slots:
    void on_login_clicked();//响应自定义信号的槽函数
    void jump2Slot();//接收第二个界面的槽函数

private slots:
    void on_cancel_clicked();//点击cancel按钮的槽函数

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

第二个界面的头文件

cpp 复制代码
#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT
public slots:
    void jumpSlot();//接收登录界面的槽函数
public:
    explicit Second(QWidget *parent = nullptr);//有参构造
    ~Second();//析构函数
signals:
    void jump2();//跳转回登录界面的信号
private slots:
    void on_pb5_clicked();//点击按钮触发jump2

private:
    Ui::Second *ui;
};

#endif // SECOND_H

main函数

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    Second s;//实例化第二个界面的对象
    QObject::connect(&w,&Widget::jump,&s,&Second::jumpSlot);//连接jump和jumpSlot函数
    QObject::connect(&s,&Second::jump2,&w,&Widget::jump2Slot);//连接jump2和jumpSlot2函数
    return a.exec();
}

第一个界面的源文件

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

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

    this->setWindowFlag(Qt::FramelessWindowHint);

    ui->logoLab->setPixmap(QPixmap(":/res/1.gif"));
    QMovie *mv =  new QMovie(":/res/1.gif");
    ui->logoLab->setMovie(mv);
    mv->start();
    ui->logoLab->setScaledContents(true);

    ui->userLab->resize(40,40);
    ui->userLab->setPixmap(QPixmap(":/res/preview.gif"));
    ui->userLab->setScaledContents(true);

    ui->passLab->resize(40,40);
    ui->passLab->setPixmap(QPixmap(":/res/preview.gif"));
    ui->passLab->setScaledContents(true);

    ui->userEdit->setPlaceholderText("请输入账号");
    ui->passEdit->setPlaceholderText("请输入密码");
    ui->passEdit->setEchoMode(QLineEdit::Password);

    ui->login->setIcon(QIcon(":/res/preview.gif"));
    ui->cancel->setIcon(QIcon(":/res/preview.gif"));

    connect(this,&Widget::my_signal,[&](){//连接自定义信号与自定义槽函数,判断账号密码是否正确,并进行跳转
        if(ui->userEdit->text()=="" || ui->passEdit->text()=="")
        {
            QMessageBox::information(this,"提示","账号或密码为空");//信息提示对话框
        }else{
            if(ui->userEdit->text()=="admin")
            {
                if(ui->passEdit->text()=="123456")
                {
                    ui->userEdit->clear();
                    ui->passEdit->clear();
                    QMessageBox::information(this,"提示","登录成功");
                    this->close();
                    emit jump();
                }else
                {
                    int ret = QMessageBox::critical(this,"错误","账号和密码不匹配,是否重新登录",QMessageBox::Yes|QMessageBox::No);
                       //错误信息对话框
                   if(ret==QMessageBox::Yes)
                   {
                       ui->passEdit->clear();
                   }else{
                       this->close();
                   }
                }
            }else{
                QMessageBox::information(this,"提示","账号不存在",QMessageBox::Yes|QMessageBox::No);
            }
        }
    });


}

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

void Widget::on_login_clicked()
{
    emit my_signal();
}

void Widget::jump2Slot()
{
    this->show();
}

void Widget::on_cancel_clicked()
{
    //实例化对象实现消息对话框
     QMessageBox msg(QMessageBox::Information,"提示","您是否要退出登录?",QMessageBox::Yes|QMessageBox::No,this);
     int ret = msg.exec();
  //  int ret = QMessageBox::question(this,"问题","您是否要退出登录?",QMessageBox::Yes|QMessageBox::No);
    if(ret == QMessageBox::Yes)
    {
        this->close();
    }else{
        this->show();
    }
}

第二个界面的源文件

cpp 复制代码
#include "second.h"
#include "ui_second.h"

void Second::jumpSlot()
{
    this->show();
}

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

    this->setWindowTitle("马化腾之泪");
    this->setWindowIcon(QIcon(":/res/preview.gif"));
}

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

void Second::on_pb5_clicked()
{
    emit jump2();
    this->close();

}

Xmind

相关推荐
程与留2 小时前
15_国际化和本地化:tr()、ts 文件、QM 文件、多语言切换
c++·qt
程与留3 小时前
14_Qt 样式表(QSS)入门(语法、选择器、美化实战)
c++·qt
Quz10 小时前
QML 拖拽篇:接收拖拽与数据交换
qt
张人玉1 天前
基于 Python 机器学习 与 PyQt5 桌面框架开发的可视化分析系统——基于大数据的网上购物消费行为分析可视化大屏
python·qt·机器学习·echarts·three.js
「QT(C++)开发工程师」1 天前
C++11 std::unique_ptr — 独占所有权的智能指针
c语言·开发语言·c++·qt
小镇敲码人1 天前
【深入浅出】之Qt 事件系统实战:鼠标、键盘、滚轮、窗口与定时器事件
数据库·qt·网络协议·mysql·http
小小龙学IT1 天前
Qt 数据库编程(Qt SQL 模块)深度解析
数据库·sql·qt
Qt历险记1 天前
C++11 std::unique_ptr — 独占所有权的智能指针
qt
宏笋1 天前
一款集结古今中外文学查阅与编辑的软件
qt
机器视觉知识推荐、就业指导2 天前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt