QtDAY 2

news2024/9/23 12:34:40

代码:

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include <QString>
#include <QTextToSpeech>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

    // 自定义的槽函数
    // 信号与槽::槽函数的声明
    void on_btn_login_clicked();
    void on_btn_cancel_clicked();

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

private:
    Ui::Widget *ui;
    QTextToSpeech *speech;
};


void show_dialog_err(Widget *);
void show_dialog_correct(Widget *);
void show_dialog_ques(Widget *);
#endif // WIDGET_H

源文件:

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

#include <QIcon>
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 窗体
    setWindowIcon(QIcon("D:/壁纸/TEMP/蓝.jpg"));
    setWindowTitle("QQ");

    setFixedSize(QSize(300,400));
    // 组件位置
    ui->l_logo->move(0,0);
    ui->l_logo->resize(300,200);

    ui->l_account->move(30,220);
    ui->l_account->resize(20,20);

    ui->l_passwd->move(30,220+ui->l_account->height()+10);
    ui->l_passwd->resize(20,20);

    ui->le_account->move(60,220);
    ui->le_account->resize(200,20);

    ui->le_passwd->move(60,220+ui->le_account->height()+10);
    ui->le_passwd->resize(200, 20);

    // 组件属性
    ui->l_logo->setPixmap(QPixmap(":/logo.png"));
    ui->l_logo->setScaledContents(true);

    ui->l_account->setPixmap(QPixmap(":/userName.jpg"));
    ui->l_account->setScaledContents(true);
    ui->l_passwd->setPixmap(QPixmap(":/passwd.jpg"));
    ui->l_passwd->setScaledContents(true);

    ui->le_account->setPlaceholderText("请输入账户:");
    ui->le_passwd->setPlaceholderText("请输入密码:");
    ui->le_passwd->setEchoMode(QLineEdit::Password);
//    ui->le_passwd->setFont(QFont())

    ui->btn_login->setIcon(QIcon(":/login.png"));
    ui->btn_cancel->setIcon(QIcon(":/cancel.png"));

    // 播报类
    speech = new QTextToSpeech(this);// 实例化播报员

    // 信号与槽4版本->5版本
    // 连接登录按钮的clicked信号,到槽函数
    connect(ui->btn_login, &QPushButton::clicked, this, &Widget::on_btn_login_clicked, Qt::AutoConnection);
    // 连接取消按钮的clicked信号,到槽函数
    connect(ui->btn_cancel, &QPushButton::clicked, this, &Widget::on_btn_cancel_clicked);

    // 信号与槽c11版本
    connect(ui->btn_login, &QPushButton::clicked, [&](){
        if(ui->le_passwd->text() == "")
        {
            qDebug() << "密码为空";
        }
        if(ui->le_account->text() == "")
        {
            qDebug() << "用户名为空";
        }
    });
}

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

// 信号与槽::槽函数的定义
// 登录按钮对应的槽函数
void Widget::on_btn_login_clicked()
{
    // 播报员
    speech->say("您的用户名是");
    speech->say(ui->le_account->text());

    qDebug() << "用户点击登录按钮";
    if(ui->le_account->text() == "admin")
    {
        // qDebug() << "用户名正确";
        if(ui->le_passwd->text() == "123456")
        {
             qDebug() << "登录成功";
             // 显示登录成功对话框
             show_dialog_correct(this);
        }
        else
        {
             qDebug() << "密码错误";
             ui->le_passwd->setText("");
             // 显示错误对话框
             show_dialog_err(this);
        }
    }
    else
    {
        qDebug() << "用户名错误";
    }
}
// 取消按钮对应的槽函数
void Widget::on_btn_cancel_clicked()
{

    qDebug() << "用户点击取消按钮";
    show_dialog_ques(this);
}


// 显示错误对话框
void show_dialog_err(Widget *obj)
{
    QMessageBox err_msg(QMessageBox::NoIcon,
                        "错误",
                        "账号密码不匹配,是否重新登录",
                        QMessageBox::Ok|QMessageBox::Cancel,
                        obj);
    int ret = err_msg.exec();
    if(ret == QMessageBox::Ok)
    {
        err_msg.close();
    }
    else if(ret == QMessageBox::Cancel)
    {
        err_msg.close();
        obj->close();
    }

    return ;
}
// 显示成功对话框
void show_dialog_correct(Widget *obj)
{
    QMessageBox correct_msg(QMessageBox::NoIcon,
                            "成功",
                            "登录成功",
                            QMessageBox::Ok,
                            obj);
    int ret = correct_msg.exec();
    if(ret == QMessageBox::Ok)
    {
        correct_msg.close();
        obj->close();
    }
    return ;
}
// 显示退出对话框
void show_dialog_ques(Widget *obj)
{
    QMessageBox cancel_msg(QMessageBox::NoIcon,
                            "退出",
                            "是否确定退出登录",
                            QMessageBox::Ok|QMessageBox::Cancel,
                            obj);
    int ret = cancel_msg.exec();
    if(ret == QMessageBox::Ok)
    {
        cancel_msg.close();
        obj->close();
    }
    else if(ret == QMessageBox::Cancel)
    {
        cancel_msg.close();
    }
    return ;
}

 

 

知识整理:

 

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

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

相关文章

【Hello Network】网络编程套接字(二)

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;简单介绍网络的基础概念 网络编程套接字&#xff08;二&#xff09; 简单的TCP网络程序服务端创建套接字服务端绑定服务器监听服务端获取连接服务端处…

Qt Quick Qml-Rectangle案例

Qt Quick - Qml 1.Rectangle //组件 IShadow.qml import QtQuick import QtQuick.ControlsItem {id:rootanchors.fill: parentanchors.margins: -4property color color: "#999999"property int radius: 4Rectangle{width: root.widthheight: root.heightanchors.ce…

原型图都可以用什么软件做?分享这9款给你

设计师在进行原型设计师时&#xff0c;会使用原型图软件&#xff0c;从产生想法到向开发人员提交项目。无论是构建基本线框还是功能齐全的原型&#xff0c;原型图软件都可以为你节省大量的时间和精力。 如果你是这个领域的新手或者想更新你的原型图软件包&#xff0c;请快速看…

iOS App的生命周期

App的生命周期 App从启动到退出的过程中&#xff0c;iOS应用程序不断从系统接收各种事件&#xff0c;如&#xff1a;用户点击了屏幕、用户点击了Home键&#xff0c;并对这些事件进行响应。接受事件是UIApplication对象的工作&#xff0c;但是&#xff0c;响应事件就需要由程序…

Dubbo详解

一、基础知识 1、 RPC RPC【Remote Procedure Call】是指远程过程调用&#xff0c;是一种进程间通信方式&#xff0c;他是一种技术的思想&#xff0c;而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数&#xff0c; 而不用程序员显式编码…

【unity细节】—(Can‘t add script)脚本文件无法拖拽到对象的问题

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐关于脚本文件无法拖拽到对象的问题⭐ 文章目录 ⭐关于脚本文件无法拖拽到对象的…

分治算法(Divide and Conquer)

本文已收录于专栏 《算法合集》 一、简单释义 1、分治算法 字面上的解释是“分而治之”&#xff0c;就是把一个复杂的问题拆分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解&#xff0c;原问题的解即子问题的…

什么是FAQ页面?如何设计一个优秀的FAQ页面?

随着互联网技术的迅猛发展&#xff0c;越来越多的企业开始将在线客户支持服务作为一种重要的业务方式&#xff0c;以提供更好的服务体验。然而&#xff0c;在线客户支持服务除了提供实时的沟通方式外&#xff0c;一个功能齐全、易于使用的FAQ页面也是必不可少的&#xff0c;这可…

Go 语言进阶与依赖管理

作者&#xff1a;非妃是公主 专栏&#xff1a;《Golang》 博客主页&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录 一、语言进阶1. 并发和并行2. 协程(Goroutine…

软件or硬件?硬件的前途到底在哪里?

一、硬件明明比软件更难&#xff0c;国内的硬件技术也不如软件&#xff0c;为什么硬件工程师待遇还不如软件&#xff1f; 1、不需要太高层次的硬件设计&#xff0c;比如大部分小家电企业&#xff0c;简单的电子产品企业&#xff0c;单片机简单外围设计就够了&#xff0c;单片机…

java网络编程——NIO架构

目录 1.什么是NIO 2.NIO结构 3.基于NIO下的聊天系统实现 4.Netty 1.什么是NIO NIO&#xff1a;java non-blocking IO&#xff0c;同步非阻塞IO。 BIO是阻塞IO&#xff0c;即每一个事件都需要分配一个进程给他&#xff0c;如果客户端没有连接上&#xff0c;则一直阻塞等待…

Java基础--->并发部分(1)

文章目录 线程基本概念线程的创建方式线程调度-------常用的方法线程的生命周期和状态并发编程的根本原因Java内存模型(JMM)多线程核心的根本问题volatile关键字保障原子性synchronized和ReentrantLock的区别 线程基本概念 ​ 进程是程序的一次执行过程&#xff0c;是系统运行程…

【Linux】1.4 基本权限

文章目录 一、shell 命令以及运行原理二、Linux 权限的概念三、Linux 权限管理01.文件类型和访问权限&#xff08;事物属性&#xff09;02.文件访问的分类&#xff08;人&#xff09;①用户分类②角色划分 03.文件权限值的表现方法04.文件访问权限的相关设置方法&#xff08;a.…

STC8H8K64U单片机-看门狗配置与讲解

1、看门狗寄存器讲解 &#xff08;bit7&#xff09;WDT_FLAG&#xff1a;看门狗溢出标志&#xff0c;看门狗发生溢出时&#xff0c;硬件自动将此位置1&#xff0c;需要软件清零 &#xff08;bit5&#xff09;EN_WDT&#xff1a;看门狗使能位 0&#x…

被优化了怎么办?他苦学仨月拿到11koffer

网上有个段子叫做“生活就是起起落落落落落落”。人生在世&#xff0c;本就不易&#xff0c;再加上最近大环境影响&#xff0c;各行各业都在内卷&#xff0c;身为芸芸众生的一员&#xff0c;我们也难免受到影响&#xff0c;面临福利裁剪、降薪、甚至被优化的风险。 大环境我们…

面了20家大厂,发现这样介绍项目经验,显得项目很牛...

我在刚刚开始面试的时候&#xff0c;也遇到了这个问题&#xff0c;也是我第一个思考的问题&#xff0c;如何介绍自己的项目&#xff0c;既可以比较全面的让面试官了解这个项目&#xff0c;同时&#xff0c;也不会让面试官觉得废话太多。经过这么多的面试&#xff0c;我发现&…

JavaWeb+JSP+路径问题+跳转(HTML|Servlet|JSP)|这一篇就够了(超详细)

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;老茶icon &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;计…

ChatGPT真能取代程序员吗,看看它怎么解释SQL注入漏洞的问题

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;Beerus|慕课网讲师 背景 本周在《Web安全渗透测试》课程的QQ群中&#xff0c;有同学提问了一个关于网上一个关于SQL注入…

大淘宝技术斩获NTIRE 2023视频质量评价比赛冠军(内含夺冠方案)

近日&#xff0c;CVPR NTIRE 2023 Quality Assessment of Video Enhancement Challenge比赛结果公布&#xff0c;来自大淘宝音视频技术团队的同学组成「TB-VQA」队伍&#xff0c;从37支队伍中脱颖而出&#xff0c;拿下该比赛&#xff08;唯一赛道&#xff09;冠军。此次夺冠是团…

Mysql replace into与on duplicate key update区别

1、replace into REPLACE INTO 首先判断数据是否存在&#xff1b;如果不存在&#xff0c;则插入&#xff1b;如果已存在则更新&#xff08;先删除再插入 根据主键或唯一索引判断记录是否已存在&#xff0c;所以插入数据的表必须要有主键或者唯一索引&#xff01;否则的话&…