QT day3

widget.h

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#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 jump();//自定义一个跳转信号

private slots:
    void on_loginbtn_clicked();

    void on_cancelbtn_clicked();

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

second.h

cpp 复制代码
#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

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

main.cpp

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;

    //将一个窗口的jump信号和第二窗口的jumpSlot槽函数连接
    QObject::connect(&w, &Widget::jump, &s, &second::jumpSlot);
    return a.exec();
}

widget.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //窗口的相关设置
    this->setWindowTitle("QQ");
    this->setWindowIcon(QIcon(":/pictrue/qq.png"));

    //标签的相关设置
    ui->logolabel->setPixmap(QPixmap(":/pictrue/logo.png"));
    ui->logolabel->setScaledContents(true);

    //账号和密码
    ui->usernamelabel->resize(35,35);
    ui->usernamelabel->setPixmap(QPixmap(":/pictrue/userName.jpg"));
    ui->usernamelabel->setScaledContents(true);

    ui->passwordlabel->resize(35,35);
    ui->passwordlabel->setPixmap(QPixmap(":/pictrue/passwd.jpg"));
    ui->passwordlabel->setScaledContents(true);

    ui->usernamelineEdit->setPlaceholderText("QQ账号/手机号码/邮箱");
   // ui->usernamelineEdit->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
   // ui->usernamelineEdit->adjustSize();
    ui->passwordlineEdit->setEchoMode(QLineEdit::Password);

    //登录按钮和取消登录按钮
    ui->loginbtn->setIcon(QIcon(":/pictrue/login.png"));
    ui->cancelbtn->setIcon(QIcon(":/pictrue/cancel.png"));

    //qt5版本 判断账号是否为admin,密码是否为123456
    connect(ui->loginbtn,&QPushButton::clicked,this,&Widget::on_loginbtn_clicked);

}

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

//登录按钮对应的槽函数
void Widget::on_loginbtn_clicked()
{

    if(ui->usernamelineEdit->text()=="admin" && ui->passwordlineEdit->text()=="123456")
    {
        QMessageBox msg(
                   QMessageBox::Information,//图标
                    "信息对话框",   //消息对话框标题
                    "登录成功",    //对话框文本
                    QMessageBox::Ok, //提供OK按钮
                    this);  //父对象

        //用exec()函数执行对话框
        int ret = msg.exec();
        //对用户选中的按钮进行判断
        if(ret == QMessageBox::Ok)
        {
           this->close();
           emit jump();
        }
    }
    else
    {
        QMessageBox msg(
                    QMessageBox::Critical, //错误图标
                    "错误对话框",    //错误对话框标题
                    "账号和密码不匹配", //错误对话框文本
                    QMessageBox::Yes | QMessageBox::No,  //提供Yes/No按钮
                    this);  //父对象

        //用exec()函数执行对话框
        int ret = msg.exec();
        //对用户选中的按钮进行判断
        if(ret == QMessageBox::Yes)
        {
            //清除密码框中的内容
            ui->passwordlineEdit->setText("");

        }
        else if(ret == QMessageBox::No)
        {
            //关闭登录
            this->close();
        }
    }

}

//取消登录按钮对应的槽函数
void Widget::on_cancelbtn_clicked()
{
    //直接调用静态成员函数
    int ret = QMessageBox::question(this,
                                    "问题对话框",
                                    "您是否确定要退出登录?",
                                    QMessageBox::Yes | QMessageBox::No);

    //对用户选中的按钮进行判断
    if(ret == QMessageBox::Yes)
    {
        this->close();
    }
    else if(ret == QMessageBox::No)
    {

    }

}

second.cpp

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

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

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

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

相关推荐
Buleall5 分钟前
期末考学C
java·开发语言
重生之绝世牛码7 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行13 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm157623 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明32 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
Monly2139 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu40 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee202140 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
7yewh42 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
waicsdn_haha1 小时前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk