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

相关推荐
程序喵大人22 分钟前
写C++十年,我现在怎么设计类和模块?(附真实项目结构)
开发语言·c++·类和模板
黄焖鸡能干四碗39 分钟前
信息系统安全保护措施文件方案
大数据·开发语言·人工智能·web安全·制造
liulilittle1 小时前
Unix/Linux 平台通过 IP 地址获取接口名的 C++ 实现
linux·开发语言·c++·tcp/ip·unix·编程语言
Nerd Nirvana1 小时前
C++编程——异步处理、事件驱动编程和策略模式
开发语言·c++·策略模式·嵌入式开发·事件驱动·异步处理
2501_920047032 小时前
bash自带的切片操作
开发语言·python·bash
会当临2 小时前
【c++】四种类型转换形式
开发语言·c++
xxy.c3 小时前
嵌入式解谜日志—多路I/O复用
linux·运维·c语言·开发语言·前端
数据爬坡ing3 小时前
C++ 类库管理系统的分析与设计:面向对象开发全流程实践
java·运维·开发语言·c++·软件工程·软件构建·运维开发
DKPT3 小时前
JVM新生代和老生代比例如何设置?
java·开发语言·jvm·笔记·学习
知彼解己3 小时前
JVM 运行时数据区域
java·开发语言·jvm