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

相关推荐
JosieBook18 分钟前
【Java编程动手学】Java中的数组与集合
java·开发语言·python
qq_5895681021 分钟前
element-plus按需自动导入的配置 以及icon图标不显示的问题解决
开发语言·javascript·ecmascript
lsx20240636 分钟前
SQLite Select 语句详解
开发语言
Dovis(誓平步青云)44 分钟前
基于探索C++特殊容器类型:容器适配器+底层实现原理
开发语言·c++·queue·适配器·stack
R-sz1 小时前
java流式计算 获取全量树形数据,非懒加载树,递归找儿
java·开发语言·windows
feiyangqingyun1 小时前
全网唯一/Qt结合ffmpeg实现手机端采集摄像头推流到rtsp或rtmp/可切换前置后置摄像头/指定分辨率帧率
qt·智能手机·ffmpeg
随意0231 小时前
Qt 事件
开发语言·qt
鸥梨菌Honevid1 小时前
Qt自定义控件(1)——QPaintEvent
开发语言·qt
Code季风1 小时前
深入比较 Gin 与 Beego:Go Web 框架的两大选择
开发语言·golang·go·gin·beego
专注VB编程开发20年2 小时前
javascript的类,ES6模块写法在VSCODE中智能提示
开发语言·javascript·vscode