2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽

思维导图

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

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

widget.h:

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QDebug>
#include<QPushButton>//按钮类
#include<QLabel>//标签类
#include<QLineEdit>//行编辑器类
#include<QMovie>//动图类
#include <QPainter>
#include <QPixmap>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_loginBtn_clicked();

private:
    Ui::Widget *ui;
    QMovie *mv=new QMovie(":/picture/gou.gif");
};
//重写paintEvent函数
class CircularLabel:public QLabel
{
public:
    CircularLabel(QWidget *parent=nullptr):QLabel(parent){}
    void paintEvent(QPaintEvent *event) override
    {
        QLabel::paintEvent(event);//调用基类的paintEvent以处理标准绘制
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);//抗锯齿
        QPixmap pixmap(":/picture/qq0.jpg");//加载图片
        pixmap=pixmap.scaled(this->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation);
        QPainterPath path;
        path.addEllipse(0,0,this->width(),this->height());//创建一个圆形路径
        painter.setClipPath(path);//设置裁剪路径为圆形
        painter.drawPixmap(0,0,pixmap);//绘制图片
    }
};
#endif // WIDGET_H

main.cpp:

cpp 复制代码
#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    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(":/picture/qq.png"));
    //给动图类mv设置父组件
    mv->setParent(this);
    //给标签logLab1填充动图mv
    ui->logLab1->setMovie(mv);
    //将动图mv设置自适应标签
    ui->logLab1->setScaledContents(true);
    //让动图动起来
    mv->start();
    //给标签logLab2填充图片
    ui->logLab2->setPixmap(QPixmap(":/picture/qqq.jpg"));
    //将标签logLab2图片设置自适应标签
    ui->logLab2->setScaledContents(true);
    //创建一个圆形标签
    CircularLabel *headLab=new CircularLabel(this);
    //移动标签到固定位置
    headLab->move(350,150);
    //重设标签大小
    headLab->resize(111,111);
    //给标签userNameLab填充图片
    ui->userNameLab->setPixmap(QPixmap(":/picture/userName.jpg"));
    //将标签userNameLab图片设置自适应标签
    ui->userNameLab->setScaledContents(true);
    //给标签passwdLab填充图片
    ui->passwdLab->setPixmap(QPixmap(":/picture/passwd.jpg"));
    //将标签passwdLab图片设置自适应标签
    ui->passwdLab->setScaledContents(true);
    //给行编辑器userNameEdit设置占位
    ui->userNameEdit->setPlaceholderText("QQ账号/手机号/邮箱");
    //给行编辑器passwdEdit设置占位
    ui->passwdEdit->setPlaceholderText("密码");
    //给行编辑器passwdEdit设置显示模式  输入该行编辑器时内容不可见
    ui->passwdEdit->setEchoMode(QLineEdit::Password);
    //手动连接系统提供的信号和槽  基于qt4版本  该连接是不友好
    connect(ui->loginBtn,SIGNAL(clicked()),this,SLOT(on_loginBtn_clicked()));
    //手动连接系统提供的信号和自定义的槽函数  基于qt5版本  该连接是友好的
    connect(ui->loginBtn,&QPushButton::clicked,this,&Widget::on_loginBtn_clicked);
}

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


void Widget::on_loginBtn_clicked()
{
    //获取行编辑器userNameEdit和passwdEdit输入的内容并和要求的admin和123456进行比对
    if(ui->userNameEdit->text()=="admin"&&ui->passwdEdit->text()=="123456")
    {
        qDebug() << "登录成功";
        close();//登录成功关闭窗口
    }
    else
    {
        qDebug() << "登录失败";
        ui->passwdEdit->clear();//登录失败清空行编辑器密码一栏
    }
}

widget.ui:

运行结果:

登录成功:

登录失败:

相关推荐
dialect_5 小时前
KMP算法
开发语言·c++·算法
总要学点什么6 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
听风吹等浪起7 小时前
第26章:ViT+InceptionDW+FocalLoss改进|CT骨折影像二分类完整Pytorch实现(含PyQt5推理GUI)
pytorch·qt·分类
ShineWinsu7 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
开开心心_Every8 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c8 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌8 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
小雨爱测9 小时前
Photoshop 实战入门:从界面认知到第一张成品图
ui·photoshop
超级架构师9 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
叼烟扛炮10 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip