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();
}

相关推荐
aini_lovee13 分钟前
MATLAB基于小波技术的图像融合实现
开发语言·人工智能·matlab
R1nG86326 分钟前
多线程安全设计 CANN Runtime关键数据结构的锁优化
开发语言·cann
初次见面我叫泰隆27 分钟前
Qt——5、Qt系统相关
开发语言·qt·客户端开发
亓才孓32 分钟前
[Class的应用]获取类的信息
java·开发语言
开开心心就好40 分钟前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
Never_Satisfied44 分钟前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
3GPP仿真实验室1 小时前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon1 小时前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity1 小时前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
沐知全栈开发1 小时前
CSS3 边框:全面解析与实战技巧
开发语言