嵌入式学习

笔记

作业 

        使用手动连接,将登录框中的取消按钮使用第二中连接方式,右击转到槽,在该槽函数中,调用关闭函数。将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,则输出“登录成功”,并关闭该界面,如果匹配失败,则输出登录失败,并将密码框中的内容清空。

        widget.h文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QIcon>  //图标类
#include <QLabel>  //标签类
#include <QMovie>  //动图类
#include <QPushButton>  //按钮类
#include <QLineEdit>  //编辑器类
#include <QTimer>  //定时器类
#include <QMouseEvent>  //鼠标事件类
#include <QPoint>  //坐标点类




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_login();//声明  登录按钮  的信号函数
    void my_signal_cancel();//声明  取消按钮  的信号函数

public slots:
    void my_slot_login();//声明  登录按钮  的槽函数
    void my_slot_cancel();//声明  取消按钮  的槽函数

private slots:
    void on_btn_mul_icon_clicked();

private:
    Ui::Widget *ui;


    QLineEdit *edit_account;//声明  账号输入框  的行编辑器
    QLineEdit *edit_password;//声明  密码输入框  的行编辑器

    QPushButton *btn_login;//声明  登录  按钮
    QPushButton *btn_cancel;//声明  取消  按钮

    QTimer *timer;//声明  定时器


protected:
    //重写鼠标按下事件
    void mousePressEvent(QMouseEvent *event) override;
    //重写鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event) override;

private:
    QPoint dragPosition;//声明一个坐标点

};
#endif // WIDGET_H

        widget.cpp文件: 

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , edit_account(new QLineEdit(this))   //账号   行编辑器
    , edit_password(new QLineEdit(this))   //密码   行编辑器
    , btn_login(new QPushButton("登录",this))   //登录  按钮
    , btn_cancel(new QPushButton("取消",this))  //取消  按钮
    , timer(new QTimer(this))    //定时器

{
    ui->setupUi(this);


    //窗口设置
    this->resize(430,330);//重新设置窗口大小
    this->setWindowIcon(QIcon(":/QQ/qq.png"));//设置窗口标签
    this->setWindowTitle("QQ");//设置窗口标题
    this->setStyleSheet("background-color:rgb(255,255,255)");//设置窗口背景颜色
    this->setFixedSize(430,330);//固定窗口大小
    this->setWindowFlag(Qt::FramelessWindowHint);//去掉窗口头部    设置纯净窗口


    //顶部动图
    QLabel *lab_dynamic_picture = new QLabel(this);//创建标签,用于放动图
    lab_dynamic_picture->resize(430,165);//设置大小
    QMovie *mv = new QMovie(":/QQ/qq2.gif");//设置一个动图对象接收动图
    lab_dynamic_picture->setMovie(mv);//将动图设置到label中
    mv->start();//让图片动起来
    lab_dynamic_picture->setScaledContents(true);//让图片自适应


    //左上角  “企鹅”   图标
    QLabel *lab_penguin_icon = new QLabel(this);//创建标签,用于放 企鹅 图标
    lab_penguin_icon->move(12,10);//移动
    lab_penguin_icon->resize(30,30);//设置大小
    lab_penguin_icon->setPixmap(QPixmap(":/QQ/Icon.png"));//在标签中添加图片
    lab_penguin_icon->setScaledContents(true);//让图片自适应


    //右上角   “设置”   图标
    QPushButton *btn_setting_icon = new QPushButton(QIcon(":/QQ/set.png"),"",this);//创建按钮  用于放“设置图标”
    btn_setting_icon->move(340,10);//移动
    btn_setting_icon->resize(25,25);//设置大小


    //右上角  “ - ”  图标
    QPushButton *btn_sub_icon = new QPushButton(QIcon(":/QQ/sub.png"),"",this);//创建按钮  用于放 “ - ” 图标
    btn_sub_icon->move(370,10);//移动
    btn_sub_icon->resize(25,25);//设置大小


//    //创建按钮  用于放 “ X ” 图标
//    QPushButton *btn_mul_icon = new QPushButton(QIcon(":/QQ/mul.png"),"",this);
//    //移动
//    btn_mul_icon->move(400,10);
//    //设置大小
//    btn_mul_icon->resize(25,25);


    //ui布局中已经设置过  “X”  图标
    ui->btn_mul_icon->raise();//让在ui布局中设置的 “X” 按钮浮在上一层


    //窗口中间  “头像”  图标
    QLabel *lab_head = new QLabel(this);//创建标签  用于放  头像  图标
    lab_head->move(182,80);//移动
    lab_head->resize(65,65);//设置大小
    lab_head->setPixmap(QPixmap(":/QQ/head.png"));//设置头像图片
    lab_head->setScaledContents(true);//让图片自适应
    lab_head->setStyleSheet("border-radius:32px");//将头像设置成圆形


    //账号输入框前面的图标
    QLabel *lab_icon_account = new QLabel(this);//创建一个标签类,用于放账号前面的图标
    lab_icon_account->move(95,160);//移动
    lab_icon_account->resize(30,30);//设置大小
    lab_icon_account->setPixmap(QPixmap(":/QQ/account_front.png"));//设置图片
    lab_icon_account->setScaledContents(true);//让图片自适应


    //创建一个行编辑器   用于账号输入
    //QLineEdit *edit_account = new QLineEdit(this);
    //账号输入框相关
    edit_account->move(130,160);//移动
    edit_account->resize(200,30);//设置大小
    edit_account->setPlaceholderText("QQ号码/手机/邮箱");//设置占位符


    //密码输入框前面的图标
    QLabel *lab_icon_password = new QLabel(this);//用于放密码前面的图标
    lab_icon_password->move(96,200);//移动
    lab_icon_password->resize(30,30);//设置大小
    lab_icon_password->setPixmap(QPixmap(":/QQ/password_front.png"));//设置图片
    lab_icon_password->setScaledContents(true);//让图片自适应


    //创建一个行编辑器    用于密码输入
    //QLineEdit *edit_password = new QLineEdit(this);
    //密码输入框相关
    edit_password->move(130,200);//移动
    edit_password->resize(200,30);//设置大小
    edit_password->setPlaceholderText("密码");//设置占位符
    edit_password->setEchoMode(QLineEdit::Password);//设置显示模式


    //密码输入框下面的    “自动登录” 按钮
    QPushButton *btn_automatic_login = new QPushButton("自动登录",this);//创建 “自动登录” 按钮
    btn_automatic_login->move(127,245);//移动
    btn_automatic_login->resize(65,20);//设置大小
    btn_automatic_login->setStyleSheet("background-color:rgb(255,255,255); color:rgb(168,168,168)");//设置按钮颜色


    //密码输入框下面的    “记住密码” 按钮
    QPushButton *btn_save_password = new QPushButton("保存密码",this);//创建 “记住密码” 按钮
    btn_save_password->move(195,245);//移动
    btn_save_password->resize(65,20);//设置大小
    btn_save_password->setStyleSheet("background-color:rgb(255,255,255); color:rgb(168,168,168)");//设置按钮颜色


    //密码输入框下面的   “找回密码” 按钮
    QPushButton *btn_retrieve_password = new QPushButton("找回密码",this);//创建 “找回密码” 按钮
    btn_retrieve_password->move(265,245);//移动
    btn_retrieve_password->resize(65,20);//设置大小
    btn_retrieve_password->setStyleSheet("background-color:rgb(255,255,255); color:rgb(168,168,168)");//设置按钮颜色


    //登录按钮
    //QPushButton *btn_login = new QPushButton("登录",this);//创建登录按钮
    btn_login->move(130,280);//移动
    btn_login->resize(95,30);//设置登录按钮大小
    btn_login->setStyleSheet("background-color:rgb(128,191,255); color:white");//设置登录按钮颜色
    connect(btn_login,SIGNAL(clicked()),this,SLOT(my_slot_login()));//登录按钮,手动连接信号和自定义的槽函数


    //取消按钮
    //QPushButton *btn_cancel = new QPushButton("取消",this);//创建取消按钮
    btn_cancel->move(btn_login->x()+200-95,btn_login->y());//移动
    btn_cancel->resize(95,30);//设置登录按钮大小
    btn_cancel->setStyleSheet("background-color:rgb(128,191,255); color:white");//设置登录按钮颜色
    connect(btn_cancel,SIGNAL(clicked()),this,SLOT(my_slot_cancel()));//取消按钮,手动连接信号和自定义的槽函数


    //左下角   “注册账号” 按钮
    QPushButton *btn_sign_in = new QPushButton("注册账号",this);//创建一个按钮  用于注册账号
    btn_sign_in->move(10,300);//移动
    btn_sign_in->resize(65,20);//设置大小
    btn_sign_in->setStyleSheet("background-color:rgb(255,255,255); color:rgb(168,168,168)");//设置按钮颜色


    //右下角   “二维码” 按钮
    QPushButton *btn_two_dimensional_code = new QPushButton(QIcon(":/QQ/two_dimensional_code.png"),"",this);//创建一个按钮  用于扫描二维码
    btn_two_dimensional_code->move(397,296);//移动
    btn_two_dimensional_code->resize(27,27);//设置大小


    //定时器
    //QTimer *timer = new QTimer(this);//创建一个QTimer
}

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

// “X” 按钮对应的槽函数
void Widget::on_btn_mul_icon_clicked()
{
    this->close();//点击  “X”  按钮   关闭整个窗口
}

//登录按钮  对应的  槽函数
void Widget::my_slot_login()
{
    if(edit_account->text() == "admin" && edit_password->text() == "123456")
    {
        QLabel *lab_login_success = new QLabel("登录成功",this);//创建  “登录成功”  标签
        lab_login_success->resize(100,edit_account->height());//设置标签大小,与登录按钮高度相同
        lab_login_success->setStyleSheet("background-color:rgb(220,220,220)");//设置标签颜色
        lab_login_success->show();//标签显示
        lab_login_success->setAlignment(Qt::AlignCenter);//设置标签中文本居中显示
        lab_login_success->move(btn_login->x(),btn_login->y()-lab_login_success->height());//设置标签位置在登录按钮上方

        //3秒后既关闭标签,还关闭窗口
//        connect(timer, &QTimer::timeout, [&](){  //连接QTimer的timeout信号到关闭标签的槽
//            lab_login_success->close();//close():关闭          hide():隐藏
//        });
//        timer->start(3000);//设定时间并启动定时器       3秒后关闭标签

        //关闭标签
        QTimer::singleShot(3000,lab_login_success,SLOT(close()));//仅在3秒后关闭标签

    }else
    {
        QLabel *lab_login_failure = new QLabel("登陆失败",this);//创建  “登录失败”  标签
        lab_login_failure->resize(100,edit_account->height());//设置标签大小,与登录按钮高度相同
        lab_login_failure->setStyleSheet("background-color:rgb(220,220,220)");//设置标签颜色
        lab_login_failure->show();//标签显示
        lab_login_failure->setAlignment(Qt::AlignCenter);//设置标签中文本居中显示
        lab_login_failure->move(btn_login->x(),btn_login->y()-lab_login_failure->height());//设置标签位置在登录按钮上方
        edit_password->clear();//清空  密码  行编辑器中的内容

        //关闭标签
        QTimer::singleShot(3000,lab_login_failure,SLOT(close()));//仅在3秒后关闭标签
    }
}


//取消按钮  对应的  槽函数
void Widget::my_slot_cancel()
{
    //清空  账户和密码  行编辑器中的内容
    edit_account->clear();//清空  账户  行编辑器中的内容
    edit_password->clear();//清空  密码  行编辑器中的内容
}


//重写鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *event) {
    // 当按下鼠标左键时记录当前位置
    if (event->button() == Qt::LeftButton) {
        dragPosition = event->globalPos();
        event->accept();
    }
}


//重写鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event) {
    // 当移动鼠标时移动窗口
    if (event->buttons() & Qt::LeftButton) {
        move(this->x() + event->globalPos().x() - dragPosition.x(),
             this->y() + event->globalPos().y() - dragPosition.y());
        dragPosition = event->globalPos();
        event->accept();
    }
}

        main.cpp文件:

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

         实现效果:

相关推荐

  1. 嵌入学习-ARM

    2024-06-17 01:18:02       20 阅读
  2. 嵌入学习-ARM

    2024-06-17 01:18:02       16 阅读
  3. 嵌入安全学习路标

    2024-06-17 01:18:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-17 01:18:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-17 01:18:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-17 01:18:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-17 01:18:02       18 阅读

热门阅读

  1. Opencv无法自动补全

    2024-06-17 01:18:02       6 阅读
  2. 15分钟面试被5连CALL,你扛得住么?

    2024-06-17 01:18:02       7 阅读
  3. SSH error : no kex alg message

    2024-06-17 01:18:02       7 阅读
  4. Spring (60)Spring WebFlux

    2024-06-17 01:18:02       8 阅读
  5. 数据结构之B树的原理与业务场景

    2024-06-17 01:18:02       8 阅读
  6. Autosar实践——诊断配置(DaVinci Configuration)

    2024-06-17 01:18:02       6 阅读
  7. 2024.06.16 刷题日记

    2024-06-17 01:18:02       4 阅读
  8. linux发展历程

    2024-06-17 01:18:02       6 阅读
  9. atcoder ABC 358-B题详解

    2024-06-17 01:18:02       7 阅读
  10. Qt中的事件循环

    2024-06-17 01:18:02       6 阅读
  11. Linux各目录的作用

    2024-06-17 01:18:02       7 阅读
  12. MySQL 保姆级教程(四):过滤数据

    2024-06-17 01:18:02       6 阅读
  13. 一千题,No.0070(组合数的和)

    2024-06-17 01:18:02       7 阅读