当前位置: 首页 > news >正文

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

思维导图

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

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

widget.h:

#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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void my_slot1();void my_slot2();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:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

widget.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填充动图mvui->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(my_slot1()));//手动连接系统提供的信号和自定义的槽函数  基于qt5版本  该连接是友好的connect(ui->loginBtn,&QPushButton::clicked,this,&Widget::my_slot2);
}Widget::~Widget()
{delete ui;
}void Widget::my_slot1()
{//获取行编辑器userNameEdit和passwdEdit输入的内容并和要求的admin和123456进行比对if(ui->userNameEdit->text()=="admin"&&ui->passwdEdit->text()=="123456"){qDebug() << "登录成功";close();}
}
void Widget::my_slot2()
{//获取行编辑器userNameEdit和passwdEdit输入的内容并和要求的admin和123456进行比对if(ui->userNameEdit->text()!="admin"||ui->passwdEdit->text()!="123456"){qDebug() << "登录失败";ui->passwdEdit->clear();}
}

widget.ui:

运行结果:

登录失败:

 登录成功:

 

相关文章:

  • [设计模式Java实现附plantuml源码~行为型]协调多个对象之间的交互——中介者模式
  • 标题:从预编译到链接:探索C/C++程序的翻译环境全貌
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • PotPlayer+Alist挂载并播放网盘视频
  • mplfinance 使用make_addplot做复杂股票走势图
  • dell r740服务器黄灯闪烁维修现场解决
  • 167基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序
  • vant-search确定按钮变成了“换行”文字
  • 05.STLvector、list、stack、queue
  • (done) 两个矩阵 “相似” 是什么意思?
  • 多维时序 | Matlab实现基于VMD-DBO-LSTM、VMD-LSTM、LSTM的多变量时间序列预测
  • Rust ?运算符 Rust读写txt文件
  • ChatGPT高效提问—prompt实践(白领助手)
  • Unity3D xLua开发环境搭建详解
  • 玩转网络抓包利器:Wireshark常用协议分析讲解
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 分享的文章《人生如棋》
  • 4. 路由到控制器 - Laravel从零开始教程
  • Angular Elements 及其运作原理
  • Angular2开发踩坑系列-生产环境编译
  • CEF与代理
  • git 常用命令
  • JS数组方法汇总
  • js正则,这点儿就够用了
  • Laravel Telescope:优雅的应用调试工具
  • leetcode讲解--894. All Possible Full Binary Trees
  • oschina
  • TypeScript实现数据结构(一)栈,队列,链表
  • use Google search engine
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue--数据传输
  • 力扣(LeetCode)357
  • 使用API自动生成工具优化前端工作流
  • 终端用户监控:真实用户监控还是模拟监控?
  • $.each()与$(selector).each()
  • (独孤九剑)--文件系统
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五)MySQL的备份及恢复
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET Core 中的路径问题
  • .Net Memory Profiler的使用举例
  • .Net Remoting常用部署结构
  • .Net 代码性能 - (1)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • /etc/fstab和/etc/mtab的区别
  • @JsonFormat与@DateTimeFormat注解的使用
  • @WebService和@WebMethod注解的用法
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [APIO2012] 派遣 dispatching
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [codevs 1515]跳 【解题报告】
  • [Design Pattern] 工厂方法模式