QT基础 制作简单登录界面

作业:

1、创建一个新项目,将默认提供的程序都注释上意义

01zy.pro代码

QT       += core gui
# QT表示要引入的类库  core:核心库例如IO操作在该库中   gui:图形化界面库
# 如果要使用其他类库中的相关函数,则需要加对于的类库后,才能使用

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# QT超过版本4时,会自动加上 widgets

CONFIG += c++11
# 支持C++11新特性

# 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

widget.h代码

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

#include <QWidget>

//ui_mywnd.h中的命名空间的声明
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }  //将其他文件中的命名空间进行声明
QT_END_NAMESPACE

//自定义的类的声明,公共继承自QWidget:QWidget中封装了有关图形化界面的相关操作的具体实现
//由于继承的是系统提供的类,那么自定义的类中即使没有写任何东西,其类中也有很多成员了
class Widget : public QWidget
{
    Q_OBJECT    //信号与槽的元对象,直接写即可,没有该宏,就不能使用信号与槽

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

private:
    Ui::Widget *ui;  //成员属性,指针
};
#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();
    //a.exec():使用应用程序类对象,调用应用程序的成员函数,保证界面不被关闭,轮询等待界面上的时间发生
    //等待用户操作界面上的组件
    //等待界面上的信号与槽的响应
    //等待事件处理机制的实现
}

widget.cpp代码

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

//构造函数的定义
Widget::Widget(QWidget *parent)
    : QWidget(parent)    //在子类的初始化列表中显式调用父类的有参构造,来完成对子类从父类中继承下来成员的初始化
    , ui(new Ui::Widget)     //给自己的类中的指针成员实例化空间
{
    ui->setupUi(this);   //将ui界面上拖拽的组件展示到this界面上
}

//析构寒湖是的定义
Widget::~Widget()
{
    delete ui;   //释放ui界面申请的组件空间
}

2、使用代码的形式实现登录框

widget.h代码

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QIcon>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMovie>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H

widget.cpp代码

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //1、设置窗口
    this->setFixedSize(600,400);    //设置界面尺寸
    this->setWindowTitle("QQ");    //设置窗口标题
    //设置图标,使用匿名对象完成
    this->setWindowIcon(QIcon("C:/Users/Administrator/Desktop/icon/QQ.png"));

    //设置按钮
    //使用无参构造在堆区申请一个按钮
    QPushButton *btn1 = new QPushButton;
    btn1->setParent(this);  //将当前界面设置成组件的父组件
    btn1->setText("登录");    //设置按钮文本内容
    btn1->resize(80,40);    //重新设置按钮尺寸
    btn1->move(180,320);    //移动当前组件位置
    //设置样式表
    btn1->setStyleSheet("color:white;background-color:skyblue;border-radius:10px;");

    //使用有参构造,构造一个按钮,实例化对象时,顺便给定父组件
    QPushButton *btn2 = new QPushButton(this);
    btn2->setText("注册");
    //使用btn1的尺寸设置当前按钮的尺寸
    btn2->resize(btn1->size());
    //使用btn1的位置,确定btn2的位置
    btn2->move(btn1->x()+btn1->width()+10,btn1->y());
    //设置样式表
    btn2->setStyleSheet("color:white;background-color:skyblue;border-radius:10px;");

    //3、设置行编辑器
    //使用有参构造一个行编辑器
    QLineEdit *edit1 = new QLineEdit(this);
    edit1->setWindowIcon(QIcon("C:/Users/Administrator/Desktop/icon/zhh.png"));
    edit1->resize(250,40);  //重置尺寸
    edit1->move(150,160);
    edit1->setAlignment(Qt::AlignCenter);   //设置文本对齐方式

    edit1->setPlaceholderText("请输入QQ账号");    //设置占位文本

    //使用有参构造一个行编辑器
    QLineEdit *edit2 = new QLineEdit(this);
    edit2->setWindowIcon(QIcon("C:/Users/Administrator/Desktop/icon/pwd.png"));
    edit2->resize(edit1->size());   //重置尺寸
    edit2->move(150,220);  //移动位置
    edit2->setPlaceholderText("请输入QQ密码");    //设置占位文本
    edit2->setAlignment(Qt::AlignCenter);   //设置文本对齐方式
    edit2->setEchoMode(QLineEdit::Password);    //设置回显模式

    QLabel *lab1 = new QLabel(this);
    lab1->setText("账号");
    lab1->move(100,230);

    QLabel *lab2 = new QLabel(this);
    lab2->setText("密码");
    lab2->move(100,170);

    QLabel *lab3 = new QLabel(this);
    //lab3->setStyleSheet("background-color:skyblue;");
    lab3->move(0,0);
    lab3->setFixedSize(600,140);
    //给标签设置动图
    //创建一个movie对象
    QMovie *movie = new QMovie("C:/Users/Administrator/Desktop/icon/bj.gif");
    //将动图对象放入到标签中
    lab3->setMovie(movie);
    //让动图动起来
    movie->start();
    //让标签内容自适应大小
    lab3->setScaledContents(true);

    //给标签设置静态图
    QLabel *lab4 = new QLabel(this);
    lab4->resize(60,60);
    lab4->move(260,80);
    lab4->setPixmap(QPixmap("C:/Users/Administrator/Desktop/icon/tx.jpg"));
    lab4->setScaledContents(true);
}

Widget::~Widget()
{
}

运行结果:

知识梳理:

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

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

相关文章

如何使用ssm实现基于web的学生就业管理系统的设计与实现+vue

TOC ssm726基于web的学生就业管理系统的设计与实现vue 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上…

努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂ROM固件-安卓刷机固件网

努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂ROM固件-安卓刷机固件网 统版本&#xff1a;官方软件作者&#xff1a;热心网友rom大小&#xff1a;911MB发布日期&#xff1a;2018-12-23 努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂RO…

虚幻引擎游戏保存/加载存档功能

函数名功能Does Save Game Exist检查存档是否存在Load Game from Slot加载存档Save Game to Slot保存存档Delete Game in Slot删除存档 Slot Name 是插槽名字 存档都是通过插槽名字来 读取/加载/检查/删除的 先创建一个SaveGame类 , 这个类里可以存放要保存的数据 , 比如 玩家…

CSS 浏览器兼容问题探讨

目录 非 VIP 用户可前往公众号回复“css”进行免费阅读 浏览器介绍 css 选择器兼容介绍 ie6 微型盒子兼容解决方法 ie6双倍margin div中放入一个img元素导致div高度多出几像素 非 VIP 用户可前往公众号回复“css”进行免费阅读 浏览器介绍 在国内,常见的网页浏览…

华为认证HCIA篇--网络通信基础

大家好呀&#xff01;我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分&#xff0c;偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过&#xff0c;如果是新手或小白的话建议还是看一看&#xff0c;先有个印象&#xff0c;好为后续的…

机器学习:opencv--特征检测

目录 前言 一、 Harris 角点检测 1.基本思想 2.代码实现 二、 SIFT&#xff08;尺度不变特征变换&#xff09; 1.代码实现 前言 特征检测是计算机视觉中的一个重要任务&#xff0c;旨在从图像中提取具有辨识度的关键点或区域。这些特征可以用于后续的图像分析、匹配和识别…

25维谛技术面试最常见问题面试经验分享总结(包含一二三面题目+答案)

开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费&#xff01;全文干货。 【免费】25维谛技术面试最常见问题面试经验分享总结&#xff08;包含一二三面题目答案&#xff09;资源-CSDN文库https://download.csdn.net/download/m0_72216164/8979…

设计模式之策略设计模式

一、状态设计模式概念 策略模式&#xff08;Strategy&#xff09; 是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 适用场景 当你想使用对象中各种不同的算法变体&#xff0c; …

【HTTP 和 HTTPS详解】3

HTTP 状态代码 HTTP 状态代码是服务器发送给客户端的三位数字&#xff0c;用于指示客户端请求的结果。它们分为五类&#xff1a;信息性&#xff08;100-199&#xff09;、成功&#xff08;200-299&#xff09;、重定向&#xff08;300-399&#xff09;、客户端错误&#xff08…

算法宝典——二分查找算法

1.认识二分查找 二分查找的时间复杂度:O(logN) 二分查找属于算法中耳熟能详的一类&#xff0c;通常的我们会说只有数组有序才可以使用二分查找&#xff0c;不过这种说法并不完全正确&#xff0c;只要数据具有"二段性"就可以使用二分查找&#xff0c;即我们可以找出一…

贪心的思想

803.区间合并 给定 n 个区间 [li,ri]&#xff0c;要求合并所有有交集的区间。 注意如果在端点处相交&#xff0c;也算有交集。 输出合并完成后的区间个数。 例如&#xff1a;[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式 第一行包含整数 n。 接下来 n 行&#x…

Unity中的功能解释(数学位置相关和事件)

向量计算 Vector3.Slerp&#xff08;起点坐标&#xff0c;终点坐标&#xff0c;t&#xff09;&#xff0c;可是从起点坐标以一个圆形轨迹到终点坐标&#xff0c;有那么多条轨迹&#xff0c;那怎么办 Vector3.Slerp 进行的是沿球面插值&#xff0c;因此并不是沿着严格的“圆形…

【CSS】盒子模型

width 宽度 、height 高度 、padding 内边距 、margin 外边距 ( 外边距合并、子元素外边距塌陷问题 )border 边框border-radius 圆角box-shadow 阴影overflow 溢出float 浮动 ( 父元素塌陷问题 ) 盒子模型&#xff08;Box Model &#xff09;是指在网页设计中&#xff0c;用于描…

Linux云计算 |【第四阶段】RDBMS1-DAY2

主要内容&#xff1a; 常用函数&#xff08;函数分类1&#xff1a;单行、分组&#xff1b;函数分类2&#xff1a;字符、数学、日期、流程控制&#xff09;、分组查询group by、连接查询 一、常用函数 1. 按使用方式分类 ① 单行函数 单行函数&#xff08;Scalar Functions&…

老古董Lisp实用主义入门教程(12):白日梦先生的白日梦

白日梦先生的白日梦 白日梦先生已经跟着大家一起学Lisp长达两个月零五天&#xff01; 001 粗鲁先生Lisp再出发002 懒惰先生的Lisp开发流程003 颠倒先生的数学表达式004 完美先生的完美Lisp005 好奇先生用Lisp来探索Lisp006 好奇先生在Lisp的花园里挖呀挖呀挖007 挑剔先生给出…

构建高可用和高防御力的云服务架构第二部分:SLB负载均衡(2/5)

在现代云服务中&#xff0c;负载均衡&#xff08;Load Balancing&#xff09;是一种关键技术&#xff0c;用于优化资源利用、最小化响应时间、提高系统的可伸缩性和可靠性。负载均衡器位于客户端和服务器之间&#xff0c;根据预设的策略将请求分发到多个服务器上&#xff0c;以…

如何使用ssm实现基于web的山东红色旅游信息管理系统的设计与实现

TOC ssm716基于web的山东红色旅游信息管理系统的设计与实现jsp 绪论 1.1研究背景 从古到今&#xff0c;信息的录入&#xff0c;存储&#xff0c;检索都受制于社会生产力的发展&#xff0c;不仅仅浪费大量的人力资源还需要浪费大量的社会物资&#xff0c;并且不能长时间的保…

计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践

计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践 1. 什么是生成对抗网络&#xff1f; 生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;简称GANs&#xff09;是由Ian Goodfellow等人在2014年提出的一种深度学习模型&#xff0c;主要用于数…

JavaEE: 深入探索TCP网络编程的奇妙世界(三)

文章目录 TCP核心机制TCP核心机制三: 连接管理建立连接(三次握手)断开连接(四次挥手)三次握手/四次挥手 流程简图 TCP核心机制 前一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(二) 书接上文~ TCP核心机制三: 连接管理 建立连接(三次握手),断开连接(四次挥手). 这里的次数…