QT_day3:信号和槽的连接方式

发布于:2024-03-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

1、使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数

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

2、完成一个使用qss的登陆窗口界面

程序代码:

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMovie>//动态图类
#include <QMainWindow>
#include <QPushButton>//按钮类
#include <QMessageBox> //弹窗类
#include <QString> //字符串类
#include <QIcon>//图标类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

signals: //该权限下都是信号函数

public slots://该权限下都是槽函数
    void my_close();//实现取消按钮,关闭窗口
    void LogBtn_slot();//实现登录功能

private:
    Ui::Widget *ui;
    QMessageBox *box;//实例化一个弹窗box
};
#endif // WIDGET_H

widget.cpp:

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //去掉头部
    this->setWindowFlag(Qt::FramelessWindowHint);
    //去掉空白
    this->setAttribute(Qt::WA_TranslucentBackground);


    this->setWindowTitle("天马系统");//窗口名
    this->setWindowIcon(QIcon(":/my_pictrue/kk.jpg"));


    ui->AboveName->setPixmap(QPixmap(":/my_pictrue/zz.jpg"));//账号前图标
    ui->AboveName->setScaledContents(true);//自适应

    ui->AbovePasswd->setPixmap(QPixmap(":/my_pictrue/yy.jpg"));//密码前图标
    ui->AbovePasswd->setScaledContents(true);//自适应

    QMovie *mv = new QMovie(":/my_pictrue/bb.gif");//Log动态图标
    mv->start();//动图
    ui->Loglab->setMovie(mv);
    ui->Loglab->setScaledContents(true);//自适应


    ui->NameEdit->setPlaceholderText("QQ/手机");
    ui->PasswdEdit->setPlaceholderText("密码");
    ui->PasswdEdit->setEchoMode(QLineEdit::Password);

    //一:设置一个取消按钮
    //手动连接 基于qt4版本 连接 自定义槽函数(调用关闭函数)

    connect(ui->closeBtn,SIGNAL(clicked()),this,SLOT(my_close()));

    //二:登录按钮  基于QT5连接 自定义槽函数
    //判断输入账号是否为"admin",密码是否为"123456"
    //匹配成功,输出"登录成功",关闭界面
    //匹配失败,输出登录失败,将密码框内容清空

    //连接
    connect(ui->LogBtn,&QPushButton::clicked,this,&Widget::LogBtn_slot);

}

Widget::~Widget()
{
    delete ui;
}
//按钮Btn1对应槽函数实现
void Widget::my_close()//基于QT4  自定义槽函数实现
{
    this->close();//调用关闭函数
}

//基于QT5 自定义槽函数的实现
void Widget::LogBtn_slot()
{
    box = new QMessageBox;//申请空间
    box->setWindowTitle("提示");//设置提示框名
    box->resize(20,20);//设置大小
    box->setFixedSize(20,20);//固定大小
    box->setWindowIcon(QIcon(":/my_pictrue/kk.jpg"));

    if(QString(ui->NameEdit->text())=="admin")
    {
        if(QString(ui->PasswdEdit->text())=="123456")
        {
            box->setText("登录成功");//设置提示信息
            box->show();
            close();
        }
        else if(QString(ui->PasswdEdit->text())==0)
        {
            box->setText("请输入密码");
            box->show();
        }
        else
        {
            box->setText("密码错误");
            ui->PasswdEdit->clear();//清空密码框内容
            box->show();
        }
    }
    else
    {
        box->setText("登录失败");
        ui->PasswdEdit->clear();//清空密码框内容
        box->show();
    }
}

运行结果:

qss:

*{
	background-color: rgba(255, 255, 255, 100);
}
QFrame#frame1{
	border-image: url(:/my_pictrue/aa.png);/*图片*/
	background-color: rgba(255, 255, 255, 100);/*背景颜色*/
}
#frame2{
	border-radius:30px;/*设置倒角*/
	background-color: rgba(91, 91, 91, 100);
}
QPushButton#NameBtn{
	background:transparent;
	border-radius:10px;
	font: 9pt "宋体";/*字体大小、形状*/
	color: rgba(255, 255, 255, 120);/*字体颜色*/
}
#PasswdBtn{
	background:transparent;
	border-radius:10px;
	font: 9pt "宋体";
	color: rgba(255, 255, 255, 120);
}
#LogBtn{
	border-radius:10px;
	font: 14pt "宋体";
	background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(46, 121, 164, 255), stop:1 rgba(255, 255, 255, 255));/*渐变色*/
	color: rgba(0, 0, 0, 120);
}
#closeBtn{
	background:transparent;/*背景透明*/
	border-radius:10px;
	font: 14pt "宋体";
	color: rgb(170, 0, 0);
}
#LogBtn:pressed{/*点击按钮*/
	background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(97, 71, 153, 255), stop:1 rgba(255, 255, 255, 255));
	padding-top:5px;/*点击时字体偏移*/
	padding-left:5px;
}
QLabel#AboveName{
	background:transparent;
	border-radius:5px;
	background-color: rgba(255, 255, 255, 120);
}
#AbovePasswd{
	background:transparent;
	border-radius:5px;
	background-color: rgba(255, 255, 255, 120);
}
#Loglab{
	background:transparent;
	border-radius:5px;
}
QLineEdit{
	background:transparent;
	border:none;/*无边框*/
	border-bottom:1px solid rgb(100, 100, 100);
}

思维导图:

本文含有隐藏内容,请 开通VIP 后查看