Qtday2作业

1.

头文件

widget.h 

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include<QIcon>
#include<QPushButton>
#include<QLineEdit>
#include<QLabel>
#include<QMovie>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QPushButton *loginbutton;
    QPushButton *cancelbutton;
    QLineEdit * Username;
    QLineEdit * pwd;
    QLabel *lab1;
    QLabel *lab2;
    QLabel *logo;
    QMovie  *movie1;
public slots:
    void cancelBtton_slot();   //取消登录的槽函数
    void loginbutton_slot();   //成功的登录的槽函数

signals:
    void jump();            //跳转信号


};
#endif // WIDGET_H

 newwidget

#ifndef NEWWIDGET_H
#define NEWWIDGET_H

#include <QWidget>

namespace Ui {
class newwidget;
}

class newwidget : public QWidget
{
    Q_OBJECT

public:
    explicit newwidget(QWidget *parent = nullptr);
    ~newwidget();
public slots:
    void jump_slot();  //跳转界面的槽函数

private:
    Ui::newwidget *ui;
};

#endif // NEWWIDGET_H

main 

#include "widget.h"
#include "newwidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;

    w.show();
    newwidget s;

    //连接两个界面的信号与槽
    QObject::connect(&w, &Widget::jump, &s, &newwidget::jump_slot);
    return a.exec();
}

 widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    // 固定界面的大小
    this->setFixedSize(800,800);

    // 设置透明度为0.8
    this->setWindowOpacity(0.9);

    // 设置窗口标题
    this->setWindowTitle("新爷聊天室");

    // 设置窗口图标
    this->setWindowIcon(QIcon(":/icon/labixiaoxin.jpg"));

    // 设置输入输出文本框(将密码文本设置成密文)
    Username = new QLineEdit(this);  // 账户
    Username->resize(300,40);  // 设置文本框大小
    Username->move(250,450);
    Username->setPlaceholderText("账户");


    pwd = new QLineEdit(this);  // 密码
    pwd->resize(300,40);
    pwd->move(250,500);
    pwd->setEchoMode(QLineEdit::Password);
    pwd->setPlaceholderText("密码");
    // 设置登录和取消按钮(图标形式)
    loginbutton = new QPushButton(this);
    cancelbutton = new QPushButton(this);
    loginbutton->setText("登录");
    cancelbutton->setText("取消");
    loginbutton->resize(80,30);
    cancelbutton->resize(80,30);
    loginbutton->move(300,550);
    cancelbutton->move(400,550);
    loginbutton->setIcon(QIcon(":/icon/denglu_1.png"));
    cancelbutton->setIcon(QIcon(":/icon/quxiao.png"));




    // 将账户和密码设置成图标形式
    lab1 = new QLabel(this);
    lab2 = new QLabel(this);
    lab1->resize(40,40);
    lab2->resize(40,40);
    lab1->move(200,450);
    lab2->move(200,500);
    lab1->setScaledContents(true);
    lab2->setScaledContents(true);
    lab1->setPixmap(QPixmap(":/icon/denglu.png"));
    lab2->setPixmap(QPixmap(":/icon/denglumima.png"));

    // 设置登录窗口的logo


    movie1 = new QMovie(":/icon/tubiao.gif");
    logo = new QLabel(this);
    logo->resize(700,350);
    logo->move(50,0);
    logo->setMovie(movie1);
    movie1->start();
    logo->setScaledContents(true);

    //基于qt4版本的连接,将取消按钮连接到自定义的槽函数中处理相关逻辑
    connect(cancelbutton,SIGNAL(clicked()),this,SLOT(cancelBtton_slot()));

    //基于qt5链接的登录信号

    connect(loginbutton,&QPushButton::clicked,this,&Widget::loginbutton_slot);









}

Widget::~Widget()
{
}

void Widget::cancelBtton_slot()  //取消登录
{
    this->close();
}
void Widget::loginbutton_slot()  //登录成功
{
    QString username = Username->text();
    QString Pwd = pwd->text();

    if (username == "admin" && Pwd == "888888")
    {

        emit this->jump();
        qDebug()<<"登录成功";
        this->close();
    }else
    {
        qDebug()<<"登录失败,请重新登录";
        pwd->clear();
    }

}


newwidget.cpp

#include "newwidget.h"
#include "ui_newwidget.h"

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

newwidget::~newwidget()
{
    delete ui;
}
void newwidget::jump_slot()
{
    this->show();
}

2.

 工程管理文件

QT       += core gui
#表示引入qt所需要的类库,如核心库,图形化界面库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#如果超过4.0版本,系统会自动加上widigets库
CONFIG += c++11
#该版本的qt支持C++后的语法

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
#管理源文件
SOURCES += \
    main.cpp \
    widget.cpp
#管理头文件
HEADERS += \
    widget.h
#管理ui文件
FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

头文件

#ifndef WIDGET_H
#define WIDGET_H //防止文件重复包含

#include <QWidget>//所需头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }  //将ui界面对应的头文件中的命名空间进行声明
QT_END_NAMESPACE

//自定义类名
class Widget : public QWidget
{
    Q_OBJECT   //信号与槽的元对象

public:
    Widget(QWidget *parent = nullptr);//构造函数的声明
    ~Widget();//析构函数

private:
    Ui::Widget *ui;  //使用ui界面对应头文件中命名空间中的类定义的指针
    //后期如果想要使用ui界面拖拽出来的组件,可以通过该指针找到
    //自己类中定义的组价,后期需要用this指针找到
};
#endif // WIDGET_H

源文件

#include "widget.h"//引入自定义的头文件
#include "ui_widget.h"//引入ui界面的头文件

Widget::Widget(QWidget *parent)
    : QWidget(parent)//调用父类的有参构造
    , ui(new Ui::Widget)//构造出ui界面拖拽的成员,并且将地址赋值给ui指针
{
    ui->setupUi(this);//调用设置界面函数,给ui界面上的组件申请空间
}
//析构函数的定义
Widget::~Widget()
{
    delete ui; //释放ui界面上的组件空间
}

主函数

#include "widget.h"  //将自定义的头文件导入

#include <QApplication>//引用应用程序的头文件

int main(int argc, char *argv[]) //主函数
{
    QApplication a(argc, argv); //使用应用程序类,实例化一个类对象,调用有参构造
    //使用自定义的类实例化的对象
    Widget w;  //调用无参构造函数,实例化一个界面,该界面没有父组件独立存在,别的组件依附于该界面而存在
    w.show();  //将图形化界面展示出来
    return a.exec(); //阻塞等待界面的相关响应工作:用户界面上的操作,信号与槽,事件处理
}

思维导图 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【多线程带来的的风险-线程安全的问题的简单实例-线程不安全的原因】

文章目录 前言线程不安全的5大原因1. 抢占式执行和随机调度2. 多个线程同时修改一个变量(共享数据&#xff09;3. 修改操作不是原子性的4. 内存可见性5. 指令重排序 前言 什么是线程安全&#xff1f; 简单来说&#xff0c;如果多线程环境下代码运行的结果是符合我们预期的&am…

【SpringCloud Alibaba】(一)微服务介绍

此专栏内容皆来自于【冰河】的《SpringCloud Alibaba 实战》文档。 1. 专栏介绍 我们先来看看《SpringCloud Alibaba实战》专栏的整体结构吧&#xff0c;先上图 从上图&#xff0c;大家可以看到&#xff0c;专栏从整体上分为十个大的篇章&#xff0c;分别为 专栏设计、微服务…

macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.5 (22G74) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 本站下载的 macOS Ventura 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也…

全志F1C200S嵌入式驱动开发(GPIO输出)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s本身的外部引脚比较少。所以这个时候,不可避免地,很多引脚的功能就会重叠在一起。这种情况下,我们就要学会取舍了。比如说,如果是学习sd卡的时候,那么spi的…

阿里云NVIDIA A100 GPU云服务器性能详解及租用费用

阿里云GPU服务器租用费用表包括包年包月、一个小时收费以及学生GPU服务器租用费用&#xff0c;阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡&#xff0c;GPU云服务器gn6i可享受3折&#xff0c;阿里云百科分享阿里云GPU服务器租用表、GPU一个小时多少…

拦截Bean使用之前各个时机的Spring组件

拦截Bean使用之前各个时机的Spring组件 之前使用过的BeanPostProcessor就是在Bean实例化之后&#xff0c;注入属性值之前的时机。 Spring Bean的生命周期本次演示的是在Bean实例化之前的时机&#xff0c;使用BeanFactoryPostProcessor进行验证&#xff0c;以及在加载Bean之前进…

最新Ai创作源码ChatGPT商用运营源码/支持GPT4.0+支持ai绘画+支持Mind思维导图生成

本系统使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到本系统&#xff01; 支持GPT3模型、GPT4模型Midjourney专业绘画&#xff08;全自定义调参&#xff09;、Midjourney以图生图、Dall-E2绘画Mind思维导图生成应用工作台&#xff08;Prompt&#xff09;AI绘画广场自定…

STM32—CAN通信

文章目录 一、CAN通信简介1.1 CAN简介1.2 CAN协议特点1.3 CAN通信的帧类型1.4 数据帧结构1.5 CAN的位时序1.6 CAN的仲裁功能 二、STM32F1的CAN2.1 bxCAN简介2.2 bxCAN工作模式2.2.1 初始化模式2.2.2 正常模式2.2.3 睡眠模式2.2.4 静默模式2.2.5 环回模式 2.3 位时序和波特率 三…

leetCode刷题记录3-面试经典150题

文章目录 不要摆&#xff0c;没事干就刷题&#xff0c;只有好处&#xff0c;没有坏处&#xff0c;实在不行&#xff0c;看看竞赛题面试经典 150 题80. 删除有序数组中的重复项 II189. 轮转数组122. 买卖股票的最佳时机 II 不要摆&#xff0c;没事干就刷题&#xff0c;只有好处&…

阿里云部署 ChatGLM2-6B 与 langchain+ChatGLM

1.ChatGLM2-6B 部署 更新系统 apt-get update 安装git apt-get install git-lfs git init git lfs install 克隆 ChatGLM2-6B 源码 git clone https://github.com/THUDM/ChatGLM2-6B.git 克隆 chatglm2-6b 模型 #进入目录 cd ChatGLM2-6B #创建目录 mkdir model #进入目录 cd m…

安全攻击 --- XSS攻击

XSS跨站脚本攻击 &#xff08;1&#xff09;简介 OWASP TOP 10 之一&#xff0c;XSS被称为跨站脚本攻击&#xff08;Cross-Site-Scripting&#xff09;主要基于JavaScript&#xff08;JS&#xff09;完成攻击行为XSS通过精心构造JS代码注入到网页中&#xff0c;并由浏览器解释…

在nginx上部署nuxt项目

先安装Node.js 我安的18.17.0。 安装完成后&#xff0c;可以使用cmd&#xff0c;winr然cmd进入&#xff0c;测试是否安装成功。安装在哪个盘都可以测试。 测试 输入node -v 和 npm -v&#xff0c;&#xff08;中间有空格&#xff09;出现下图版本提示就是完成了NodeJS的安装…

前端开发实习总结参考范文

▼前端开发实习总结篇四 读了三年的大学&#xff0c;然而大多数人对本专业的认识还是不那么透彻&#xff0c;学的东西真正能够学以致用的东西很少&#xff0c;大家都抱怨没有实践的机会&#xff0c;在很多同学心里面对于本专业还是很茫然。直到即将毕业的时候才知道我们以前学…

【Linux后端服务器开发】HTTPS协议

目录 一、加密算法 二、中间人攻击 三、CA认证 一、加密算法 HTTPS协议是什么&#xff1f;HTTPS协议也是一个应用层协议&#xff0c;是在HTTP协议的基础上引入了一个加密层。 HTTP协议内容是按照文本的方式明文传输的&#xff0c;这就导致在传输过程中出现一些被篡改的情况…

ROS1ROS2之CmakeList.txt和package.xml用法详解

前言&#xff1a;目前还在学习ROS无人机框架中&#xff0c;&#xff0c;&#xff0c; 更多更新文章详见我的个人博客主页【前往】 文章目录 1. CMakeLists.txt与package.xml的作用2. 生成CMakeLists.txt2.1 ROS12.2 ROS2 3. CMakeLists.txt编写3.1 ROS13.2 ROS2 4. package.xml…

Ubuntu 20.04 Ubuntu18.04安装录屏软件Kazam

1.在Ubuntu Software里面输入Kazam&#xff0c;就可以找不到这个软件&#xff0c;直接点击install就可以了 2.使用方法&#xff1a; 选择Screencast&#xff08;录屏&#xff09; Fullscreen&#xff08;全屏&#xff09;-----Windows&#xff08;窗口&#xff09;--------Ar…

1、传统锁回顾(Jvm本地锁,MySQL悲观锁、乐观锁)

目录 1.1 从减库存聊起1.2 环境准备1.3 简单实现减库存1.4 演示超卖现象1.5 jvm锁1.6 三种情况导致Jvm本地锁失效1、多例模式下&#xff0c;Jvm本地锁失效2、Spring的事务导致Jvm本地锁失效3、集群部署导致Jvm本地锁失效 1.7 mysql锁演示1.7.1、一个sql1.7.2、悲观锁1.7.3、乐观…

fragment

fragment 在vue2中,组件必须有一个跟标签在vue3中,组件可以没有跟标签,内部会将多个标签包含在一个fragment虚拟元素中好处:减少标签层级,减小内存占用 teltport 什么是teltport teleport是一种能够将我们组件html结构移动到指定位置的技术 像是下面的代码不适用teleport:…

信息系统项目管理师(第四版)教材精读思维导图-第三章信息系统治理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 目录 3.1 IT治理 3.2 IT审计 3.1 IT治理 3.2 IT审计

Java程序设计六大原则设计模式

Java程序设计六大原则 一、单一职责原则&#xff1a; 一个接口或者类只有一个原因引起变化&#xff0c;即一个接口或者类只有一个职责&#xff0c;负责一件事情。&#xff08;此原则同样适用于方法&#xff09; 好处&#xff1a;1、复杂性降低&#xff1b;2、可读性提高&…
最新文章