笔记
作业
使用手动连接,将登录框中的取消按钮使用第二中连接方式,右击转到槽,在该槽函数中,调用关闭函数。将登录按钮使用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();
}
实现效果: