QT信号与槽/窗口组件优化/使用QT制作QQ登录界面

news2025/1/13 10:04:46

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

mywidget.cpp

#include "mywidget.h"

Mywidget::Mywidget(QWidget *parent)
    : QWidget(parent)
{
    /********制作一个QQ登录界面*********************/
    this->resize(535,415);//设置登录窗口大小
    this->setFixedSize(535,415);//固定窗口大小
    this->setWindowTitle("QQ");//设置窗口标题
    this->setWindowIcon(QIcon(":/pictrue/QQ.png"));//设置窗口图标
    this->setStyleSheet("background-color:white");//背景设置成白色
    this->setWindowFlag(Qt::FramelessWindowHint);//隐藏窗口,设置为纯净窗口
    QLabel *lab1=new QLabel(this);//动态图标签
    lab1->resize(535,135);//动态标签大小
    QMovie *mv=new QMovie(":/pictrue/QQ3.gif");//设置一个动态图对象指针接收动态图
    lab1->setMovie(mv);//将动图设置到lab1标签中
    mv->start();//让动图动起来
    lab1->setScaledContents(true);//让图片自适应标签设置大小
    QLabel *lab2=new QLabel(this);//qq图标签
    lab2->resize(94,50);//qq标签大小
    lab2->setPixmap(QPixmap(":/pictrue/94x50.png"));
    lab2->setScaledContents(true);//让图片自适应标签设置大小
    QPushButton *btn1=new QPushButton("?",this);//设置按钮
    btn1->resize(20,20);//设置按钮大小
    btn1->move(440,0);//设置按钮位置
    btn1->setStyleSheet("background-color:rgb(14,114,240)");//设置按钮背景颜色
    QPushButton *btn2=new QPushButton("-",this);//设置最小化按钮
    btn2->resize(20,20);//设置按钮大小
    btn2->move(460,0);//设置按钮位置
    btn2->setStyleSheet("background-color:rgb(14,114,240)");//设置按钮背景颜色
    QPushButton *btn3=new QPushButton("x",this);//设置退出按钮
    btn3->resize(20,20);//设置按钮大小
    btn3->move(480,0);//设置按钮位置
    btn3->setStyleSheet("background-color:rgb(14,114,240)");//设置按钮背景颜色
    QLabel *lab3=new QLabel(this);//qq头像图标签
    lab3->setFixedSize(80,80);//qq标签大小
    lab3->setStyleSheet("background-color:white;border-radius:40px");//将标签设置为圆形
    QPixmap *pte=new QPixmap(":/pictrue/QQ.png");//加载图片
    QPixmap pix(pte->width(),pte->height());//创建新的qpixmap,作为新的裁剪容器
    pix.fill(Qt::transparent);//设置图片透明
    QPainter painter(&pix);//进行绘制
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);//抗锯齿效果
    int radius=pte->width() > pte->height() ? pte->height()/2 : pte->width()/2;//设置裁剪半径
    QPainterPath path;//裁剪区域
    //path.addEllipse(pte->rect().center(),70,62);//绘制裁剪区域大小
    path.addEllipse(pte->rect().center(),radius+8,radius);//绘制裁剪区域大小.微调裁剪范围
    painter.setClipPath(path);//只显示图片裁剪后的区域
    painter.drawPixmap(pix.rect(),*pte);//将源图片内容绘制到创建的pix上,非裁剪内容不显示
    //lab3->setPixmap(QPixmap(":/pictrue/QQ.png"));
    lab3->move(228,95);//设置头像位置
    lab3->setScaledContents(true);//让图片自适应标签设置大小
    lab3->setPixmap(pix);
    QLabel *lab4=new QLabel(this);//账号图标
    lab4->resize(24,36);//标签大小
    lab4->setPixmap(QPixmap(":/pictrue/24x36.png"));
    lab4->move(120,220);//设置位置
    lab4->setScaledContents(true);//让图片自适应标签设置大小
    edit1=new QLineEdit(this); //账户输入行编辑器
    edit1->resize(260,24);//设置行编辑大小
    edit1->move(144,225);//设置位置
    edit1->setPlaceholderText("QQ号码/手机/邮箱");//设置占位
    QPushButton *btn4=new QPushButton("<>",this);//设置历史切换按钮
    btn4->resize(20,24);//设置按钮大小
    btn4->move(404,225);//设置按钮位置
    QLabel *lab5=new QLabel(this);//密码图标
    lab5->resize(24,36);//标签大小
    lab5->setPixmap(QPixmap(":/pictrue/24xxx36.png"));
    lab5->move(120,254);//设置位置
    lab5->setScaledContents(true);//让图片自适应标签设置大小
    edit2=new QLineEdit(this); //密码输入行编辑器
    edit2->resize(260,24);//设置行编辑大小
    edit2->move(144,266);//设置位置
    edit2->setPlaceholderText("密码");
    edit2->setEchoMode(QLineEdit::Password);//设置显示模式
    QPushButton *btn5=new QPushButton("::",this);//设置鼠标输入按钮
    btn5->resize(20,24);//设置按钮大小
    btn5->move(404,266);//设置按钮位置
    QPushButton *btn6=new QPushButton(QIcon(":/pictrue/19x19.png")," 自动登录",this);//勾选自动登录按钮
    btn6->resize(100,21);//设置按钮大小
    btn6->move(121,300);//设置按钮位置
    QPushButton *btn7=new QPushButton(QIcon(":/pictrue/19x19.png")," 记住密码",this);//记住密码按钮
    btn7->resize(100,21);//设置按钮大小
    btn7->move(231,300);//设置按钮位置
    QPushButton *btn8=new QPushButton("找回密码",this);//找回密码按钮
    btn8->resize(80,21);//设置按钮大小
    btn8->move(344,300);//设置按钮位置
    QPushButton *btn9=new QPushButton("登录",this);//登录按钮
    btn9->resize(301,45);//设置按钮大小
    btn9->move(123,340);//设置按钮位置
    btn9->setStyleSheet("background-color:rgb(8,189,253);border-radius:4px");//设置按钮颜色
    QPushButton *btn10=new QPushButton("注册账号",this);//注册账号按钮
    btn10->resize(80,21);//设置按钮大小
    btn10->move(15,390);//设置按钮位置
    QPushButton *btn11=new QPushButton(QIcon(":/pictrue/30x30.png"),"",this);//扫二维码登录按钮
    btn11->resize(30,30);//设置按钮大小
    btn11->move(490,381);//设置按钮位置
    /*****************设置按钮功能******************************************/
    connect(btn3,SIGNAL(clicked()),this,SLOT(quitbtn()));//btn3点击关闭窗口
    connect(btn2,SIGNAL(clicked()),this,SLOT(showmin()));//btn2点击最小化窗口
    //connect(edit1,SIGNAL(editingFinished()),this,SLOT(verifyuser()));//获取行编辑器账户内容
    connect(edit2,SIGNAL(editingFinished()),this,SLOT(verifyuser()));//获取行编辑器密码
}

Mywidget::~Mywidget()
{
}


void Mywidget::quitbtn(){//内外定义关闭函数
    this->close();
}
void Mywidget::showmin(){//内外定义最小化函数
    this->showMinimized();
}
void Mywidget::verifyuser(){//内外验证账户函数
    QString username=edit1->text();
    QString userpasswd=edit2->text();
    //QMessageBox *box= new QMessageBox(this);
    if(username=="admin"&&userpasswd=="123456"){
        QMessageBox ::question(this,tr("系统提示"),tr("登录成功!"),QMessageBox::Ok,QMessageBox::Ok);//对话框提示登录成功
        this->close();
    }else{
       QMessageBox ::question(this,tr("系统提示"),tr("登录失败!"),QMessageBox::Ok,QMessageBox::Ok);//对话框提示登录失败
       edit1->clear();
       edit2->clear();//清空行编辑器
    }
}

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QIcon>//图标类
#include <QMovie> //动图类
#include <QLabel> //标签类
#include <QPushButton> //按钮类
#include <QLineEdit> //行编辑器
#include <QPixmap>
#include <QPainter>//绘制类
#include <QDebug>
#include <QMessageBox>//消息对话框
class Mywidget : public QWidget
{
    Q_OBJECT

public:
    Mywidget(QWidget *parent = nullptr);
    ~Mywidget();
private:
    QLineEdit *edit1;
    QLineEdit *edit2;
public slots:
    void quitbtn();//声明一个退出槽函数
    void showmin();//声明一个最小化函数
    void verifyuser();//声明验证用户账号密码
};
#endif // MYWIDGET_H

main.cpp

#include "mywidget.h"

#include <QApplication>

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

运行结果示例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1827714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024.6.14 作业 xyt

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c…

【面试干货】Integer 和 int 的区别

【面试干货】Integer 和 int 的区别 1、基本类型与包装类型2、内存占用3、自动装箱与拆箱4、null 值5、常量池6、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Integer 和 int 是两种不同类型的变量&#xff0c;…

在k8s中部署Elasticsearch高可用集群详细教程

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Elasticsearch简介 2、为什么在k8s中部署elasti…

【团队成长】2024-24周周报-第一次组会人员分工48期推文预告

大家好&#xff01;我们是IndustryOR 团队&#xff0c;致力于分享业界落地的算法技术。欢迎关注微信公众号/知乎/CSDN【运筹匠心】 。 记录人&#xff1a;张哲铭&#xff0c;算法专家&#xff0c;某互联网大厂 【团队成长/个人成长】系列的推文会以 【工作周报】 的方式记录Ind…

视频信号发生器上位机

在液晶屏测试、电视机信号测试、视频处理器测试中&#xff0c;经常需要使用视频信号发生器&#xff0c;市场上专业的视频信号发生器通常需要大几千元&#xff0c;多则上万元&#xff0c;而且设备测试仪器是一套硬件&#xff0c;没有办法像软件一样复制传播。所以我开发了一套基…

机器视觉:工业镜头的主要参数

工业镜头是图像采集系统的重要光学设备。它的作用是将目标物体的像成在相机的感光面上。 一、工业镜头原理 镜头是对光线进行调制和变换&#xff0c;使目标能够成像到相机的感光芯片上。将不同折射率的硝材加工成高精度的曲面&#xff0c;再把这些曲面进行组合后设计成能够满…

LogicFlow 学习笔记——2. LogicFlow 基础 实例

LogicFlow 实例 创建实例 每一个流程设计界面&#xff0c;就是一个 LogicFlow 的实例。 <template><div id"container"></div><!-- 用于显示 LogicFlow 图表的容器 --> </template> <script>// 创建 LogicFlow 实例const lf …

中文版svn怎么忽略文件

个人需求&#xff1a; 不上传dist&#xff0c;dist.7z&#xff0c;node_modules等文件夹 实际操作&#xff1a; 前言&#xff1a;在上传svn为避免操作失败导致丢失文件的情况&#xff0c;保险起见&#xff0c;先备份代码 1&#xff1a;右键点击 2&#xff1a;点击新建 – 其…

C++初学者指南第一步---4.基本类型

C初学者指南第一步—4.基本类型 文章目录 C初学者指南第一步---4.基本类型1.变量声明2.快速概览Booleans 布尔型Characters 字符型Signed Integers 有符号整数Unsigned Integers 无符号整数Floating Point Types 浮点数类型 3.Common Number Representations 常用的数字表示常用…

C++访问Private,Protecd的一些方法总结

前言 在编写C程序中 我们偶尔会碰到这样的三种特殊修改变量值的需求&#xff1a; [1]在不修改类原本的实现下&#xff0c;访问修改类的Private变量 [2]在不修改类原本的实现下&#xff0c;修改类的Protected变量 Private变量访问 public类模版函数特化 这种办法利用了类模…

密码学-密码协议之零知识证明

一、前言 零知识证明实际上一种密码协议&#xff0c;该协议的一方称为证明者(Prover)&#xff0c;通常用P表示&#xff0c;协议的另一方是验证者(Verifier)&#xff0c;一般用V表示。零知识证明是指P试图使V相信某个论断是正确的&#xff0c;但却不向V提供任何有用的信息&…

springboot与flowable(7):流程变量

一、启动时添加流程变量 拿第一个流程图举例&#xff0c;创建一个新的流程定义。 Testvoid contextLoads() {DeploymentBuilder deployment repositoryService.createDeployment();deployment.addClasspathResource("process01/FirstFlow.bpmn20.xml");deployment.…

MFC工控项目实例之三theApp变量传递对话框参数

承接专栏《MFC工控项目实例之二主菜单制作》 用theApp变量传递对话框参数实时改变iPlotX坐标轴最小值、最大值。 1、新建IDD_SYS_DATA对话框&#xff0c;类名SYS_DATA。 三个编辑框IDC_EDIT1、IDC_EDIT2、IDC_EDIT3变量如图 2、SEAL_PRESSURE.h中添加代码 #include "re…

【单片机毕业设计选题24008】-基于单片机的寝室系统设计

系统功能: 1. 采用STM32最小系统板控制&#xff0c;将采集到温湿度光照等传感器数据显示在OLED上 2. 通过离线语音模块开关灯&#xff0c;风扇&#xff0c;门。 3. 监测到MQ2烟雾后触发报警。 4. 语音&手动&定时控制窗帘。 5. 按键开启布防模式&#xff0c;布防后…

java课设

项目简介:射击生存类小游戏 项目采用技术: 游戏引擎: Unity编程语言: Java图形处理: NVIDIA PhysX (物理引擎), HDRP (High Definition Render Pipeline)音效与音乐: FMOD, Wwise版本控制: Git 功能需求分析: 角色控制&#xff1a;玩家能够使用键盘和鼠标控制角色移动、瞄准…

【python基础实例】从文件命名中提取特定信息(数字、字母等)

【python基础实例】从文件命名中提取特定信息&#xff08;数字、字母等&#xff09; 在处理文件和数据时&#xff0c;我们经常需要从文件名中提取特定的信息&#xff0c;如日期、序号或项目标识符。Python提供了强大的字符串处理功能&#xff0c;可以轻松完成这些任务。本文将…

HttpOpenRequest 函数偶尔会引起崩溃的坑

通常我们会像下面一样调用&#xff1a; HINTERNET HttpOpenRequestA([in] HINTERNET hConnect,[in] LPCSTR lpszVerb,[in] LPCSTR lpszObjectName,[in] LPCSTR lpszVersion,[in] LPCSTR lpszReferrer,[in] LPCSTR *lplpszAcceptTypes,[in] DWORD dwFlags,[…

linux 部署瑞数6实战(维普,药监局)第一部分

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx 本文章未经许可禁止转载&…

1.22 LeetCode总结(基本算法)_位运算

进制的概念 进制即进位计数制&#xff0c;是利用固定的数字符号和统一的规则的带进位的计数方法。 任何一种进位计数制都有一个基数&#xff0c;基数为 X 的进位计数制称为 X 进制&#xff0c;表示每一个数位上的数运算时都是逢 X 进一。 504. 七进制数 手法1&#xff1a;当…

Qt自定义日志输出

Qt自定义日志输出 简略版&#xff1a; #include <QApplication> #include <QDebug> #include <QDateTime> #include <QFileInfo> // 将日志类型转换为字符串 QString typeToString(QtMsgType type) {switch (type) {case QtDebugMsg: return "D…