【0830 QT作业】QT第一个程序、创建登录框(代码实现)

news2024/12/24 7:43:45

一、QT第一个程序 结构介绍

1.1 QT程序结构

1.2 .pro

QT       += core gui sql network
# QT:工程所需的类库
# +=:作为连接,后面可添加库,以空格隔开
# core:核心库
# gui :图形化界面相关类库
# sql :数据库
# network:网络相关库

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# 版本超过4.0,会加上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

# 管理源文件    若将本处的.cpp删除,则项目中对应的文件也会被删除
SOURCES += \
    main.cpp \     //主函数内存放实例化自定义的类,以及show函数
    mywnd.cpp      //自定义类的构造函数实现(显性调用父类的构造函数,完成子类从父类继承下来的成员的初始化工作)、析构函数实现

# 管理头文件
HEADERS += \
    mywnd.h        //用于存放用到的头文件、定义属于自己的 公共继承自QWidget 的类(类中包含构造函数和析构函数的声明)

# 管理ui设计界面
FORMS += \
    mywnd.ui       //可直接拖拽完成界面设计

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

1.3 类名.h 

功能:用于存放用到的头文件定义属于自己的 公共继承自QWidget 的(类中包含造函数析构函数的声明)

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

#include <QWidget> //QWidget类所在的头文件,父类头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Mywnd; } //命名空间的声明
QT_END_NAMESPACE

//定义属于自己的类 MyWnd是类名,公共继承自QWidget
class Mywnd : public QWidget     //与命名空间中的Mywnd不是同一个类
{
    Q_OBJECT   //信号与槽的元对象

public:
    Mywnd(QWidget *parent = nullptr);    //构造函数的声明,有一个默认参数的形参
    ~Mywnd();                            //析构函数的声明

private:
    Ui::Mywnd *ui;   //实例化一个命名空间ui中的Mywnd类的指针,后期可以通过ui指针找到(访问)ui界面上拖拽出来的组件
};
#endif // MYWND_H

1.4 main.cpp

功能:主函数内 实例化一个自定义的类,以及show函数

#include "mywnd.h"    //图形化界面的头文件

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); //实例化一应用程序的对象a,调用的是有参构造(控制界面不被关闭)

    Mywnd w;   //在栈区实例化自定义类的对象(调用.cpp内的构造函数)(参数默认为nullptr)
    w.show();  //调用show函数,展示图形化界面,该函数是父类提供的,直接用即可(调用绘制事件,图形化界面是绘制上去的)

    return a.exec();   //返回值肯定是整型int   为了界面不被关闭,阻塞等待相关事件发生
                       //等待信号与槽、事件处理、等待用户操作
                       //界面关闭,exec关闭
}

1.5 类名.cpp

功能:自定义类的构造函数(显性调用父类的构造函数,完成子类从父类继承下来的成员的初始化工作)、析构函数

#include "mywnd.h"    //引用自己的头文件
#include "ui_mywnd.h" //ui界面对应的头文件

Mywnd::Mywnd(QWidget *parent)  //Mywnd的构造函数的定义(参数默认为nullptr)
    : QWidget(parent)          //显性调用父类的构造函数,完成对子类从父类继承下来成员的初始化工作
    , ui(new Ui::Mywnd)        //对自己类中的指针成员开辟空间
{
    ui->setupUi(this);         //给拖拽出来的组件实例化空间
                               //调用ui_mywnd.h中的void setupUi函数
}

Mywnd::~Mywnd()       //析构函数的定义
{
    delete ui;        //释放ui指针的内存
}

1.5 类名.ui

功能:通过拖拽完成界面设计

1.6 ui_类名.h

功能:存放通过拖拽生成的组件代码

介绍:在在项目路径中找到 一个文件夹(文件夹内包含 项目构建中途产生的文件),其中.h文件为拖拽组件生成的类,所以在定义工程中的.pro文件定义一个ui命名空间,让命名空间中实例化出一个类,再定义一个ui指针,访问其命名空间类中的ui组件

1.7 QT程序的运行过程

二、创建登录框

2.1 要求制作如下界面

2.2 代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPushButton> //添加一个按钮类头文件
#include<QDebug>      //信息调试类
#include<QLineEdit>   //行编辑器类
#include<QLabel>      //标签类
#include<QIcon>       //图标的头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

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

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

    //1、总体框架搭建
    //①将组件尺寸固定为540,410
    this->setFixedSize(480,400);
    //②设置窗口标题、Icon
    this->setWindowTitle("小桐快聊");
    this->setWindowIcon(QIcon("D:/hqyj/QT/day1/04_homework/icon/wodepeizhenshi.png"));
    
    //2、标签类创建
    //①创建标签,放华清远见
    QLabel *lab1 = new QLabel(this);
    lab1->resize(480,180);
    lab1->setPixmap(QPixmap("D:/hqyj/QT/day1/04_homework/icon/logo.png"));
    lab1->setScaledContents(true);  //设置内容自适应
    //②创建账户
    QLabel *lab2 = new QLabel(this);
    lab2->resize(40,30);
    lab2->move(80,210);
    lab2->setPixmap(QPixmap("D:/hqyj/QT/day1/04_homework/icon/userName.jpg"));
    lab2->setScaledContents(true);
    //③创建密码
    QLabel *lab3 = new QLabel(this);
    lab3->resize(40,30);
    lab3->move(lab2->x(),lab2->y()+70);
    lab3->setPixmap(QPixmap("D:/hqyj/QT/day1/04_homework/icon/passwd.jpg"));
    lab3->setScaledContents(true);  //设置内容自适应
    
    //3、行编辑类创建
    //①创建QQ号码/手机/邮箱
    QLineEdit *edit1 = new QLineEdit(this);       //构造时给定父组件
    edit1->setPlaceholderText("QQ号码/手机/邮箱");  //设置编辑器的占位文本
    edit1->resize(220,40);                        //设置尺寸
    edit1->move(lab3->x()+90,lab2->y());          //移动位置
    //②密码
    QLineEdit *edit2 = new QLineEdit(this);
    edit2->setPlaceholderText("密码");        //设置编辑器的占位文本
    edit2->resize(220,40);                   //设置尺寸
    edit2->move(edit1->x(),edit1->y()+70);   //移动位置
    edit2->setEchoMode(QLineEdit::Password); //设置回显模式
    
    //4、按钮创建
    //①登录(同时定义父组件、文本内容、icon)
    QPushButton *btn1 = new QPushButton(QIcon("D:/hqyj/QT/day1/04_homework/icon/login.png"),
                                        "登录",this);
    btn1->resize(90,40);
    btn1->move(230,edit2->y()+70);
    //②取消(同时定义父组件、文本内容、icon)
    QPushButton *btn2 = new QPushButton(QIcon("D:/hqyj/QT/day1/04_homework/icon/cancel.png"),
                                        "取消",this);
    btn2->resize(90,40);
    btn2->move(btn1->x()+100,btn1->y());
}

Widget::~Widget()

{
    delete ui;
}

2.3 运行结果

             

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

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

相关文章

火热的大模型AIGC对数据中心存储趋势有什么影响?

随着人工智能和大数据技术的不断发展&#xff0c;业内AIGC&#xff08;人工智能、图形处理和云计算&#xff09;和大模型的发展趋势正在对数据中心存储发展方向产生深远的影响&#xff0c;主要集中对数据量和高性能计算的诉求。 大模型的普及要求数据中心存储具备更大的容量。大…

报错 - net::ERR_ABORTED 500 (Internal Server Error)

报错&#xff1a;net::ERR_ABORTED 500 (Internal Server Error) 根据提示找到对应文件 解决&#xff1a;检查代码&#xff0c;根据高亮颜色判断&#xff0c;发现箭头函数漏了一个>。 报错&#xff1a;Uncaught TypeError: Assignment to constant variable. 原因&#x…

计算机毕设之Python的高校成绩分析(含文档+源码+部署)

本系统阐述的是一个高校成绩分析系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构。…

【C++】SLT——Vector详解

本片要分享的是关于STL中Vector的内容&#xff0c;Vector的内容于string非常相似&#xff0c;只要会使用string那么学习Vector时会非常流畅。 目录 1.vector介绍 2.vector的简单实用 2.1.简单的无参构造 ​编辑2.2.简单带参构造 2.3.迭代器区间初始化 2.4.vector的遍历 …

c++学习之vector的实现

在学习实现vector之前我们会看到对于库中的vector的实现&#xff0c;这里并非使用在学习string那样的定义方式&#xff0c;而是利用迭代器&#xff0c;也就是指针来实现的&#xff0c;这在功能的实现时极大的方便了我们。 那么我们就模仿库这样的方式实现我们呢经常会用到的一些…

Vision Transformer(vit)原理分析以及特征可视化

目录 Vit简介 Vit model结构图 vit输入处理 图像分块 class token与position的添加 特征提取 vit代码 Vit简介 Vision Transformer&#xff08;ViT&#xff09;是一种基于Transformer架构的深度学习模型&#xff0c;用于图像识别和计算机视觉任务。与传统的卷积神经网络…

【spring】一文带你弄懂Spring Bean的生命周期(超详细,超级通俗易懂!!)

目录 首先让我们来回顾一下Spring中的Bean是什么 Bean的生命周期 然后让我们由浅及深的对Bean的创建过程进行了解 首先来看最核心的五步骤 然后让我们逐层递进&#xff0c;学习一下七步骤版本吧 现在我们就可以进一步了解十步骤的版本&#xff08;完整的生命周期&#xff…

Java“牵手”1688商品列表数据,关键词搜索1688商品数据接口,1688API申请指南

1688商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取1688商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问1688商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

【Axure高保真原型】多图表动态切换

今天和大家分享多图表动态切换的原型模板&#xff0c;点击不同的图标可以动态切换对应的表&#xff0c;包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图&#xff1b;而且图表数据可以在左侧表格中动态维护&#xff0c;包括增加修改和删除&#xff0…

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看?(二)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

信息化发展10

消费互联网基本属性 消费互联网具有的属性包括&#xff1a; 1 &#xff09; 媒体属性&#xff1a; 由自媒体、社会媒体以及资讯为主的门户网站。 2&#xff09; 产业属性&#xff1a; 由在线旅行和为消费者提供生活服务的电子商务等其他组成。 数字中国概览示意图 在党的十九…

设计模式行为模式-访问者模式

文章目录 介绍基本原理1. 定义访问者模式2. 角色及其职责2.1 元素&#xff08;Element&#xff09;2.2 具体元素&#xff08;ConcreteElement&#xff09;2.3 访问者&#xff08;Visitor&#xff09;2.4 具体访问者&#xff08;ConcreteVisitor&#xff09;2.5 对象结构&#x…

D-Link DCS 密码泄露漏洞

0x01 前言 本次测试仅供学习使用&#xff0c;如若非法他用&#xff0c;与本文作者无关&#xff0c;需自行负责&#xff01;&#xff01;&#xff01; 0x02 漏洞描述 D-link DCS是一款成像色彩为彩色 是一款网络摄像机。D-link DCS系统存在密码泄露漏洞&#xff0c;攻击者通过…

什么牌子的电容笔比较好?适合学生党的电容笔推荐

如今&#xff0c;几乎人手一部iPad平板&#xff0c;它能帮大家解决许多工作、学习方面的问题&#xff0c;例如在工作中整理文件&#xff0c;制作一些简单的PPT。因此&#xff0c;给iPad平板配上一个好的电容笔就显得尤为重要了。在此&#xff0c;我向各位安利一些又好用又便宜的…

【数据结构】多叉树转换为二叉树-c++代码实现-POJ 3437 Tree Grafting

文章目录 写这个题目的原因寻找提交网址题目解决思路AC代码成功AC 写这个题目的原因 1、今天在看王道考研数据结构的课&#xff08;虽然我要保研&#xff0c;但是因为这些看保研面试的时候会问&#xff0c;所以看一下嘞orz&#xff09;&#xff0c;看到了这个多叉树转换为二叉…

微信黑名单怎么恢复好友?1分钟教你找回消失的“他”

微信的【黑名单】功能可以屏蔽掉一些令大家分心或者浪费时间的人。这个功能有利于减少干扰、保护隐私&#xff0c;并且还能大大提高用户的社交体验。 但是&#xff0c;有时候大家可能会因为发生冲突而将对方暂时拉入黑名单。在问题得到解决后却又希望恢复与他的联系。那么&…

Seata整合nacos,Postgresql 为DB存储

Seata整合nacos,Postgresql 为DB存储 环境 详情环境可参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 我这里 <spring.cloud.alibaba-version>2021.1</spring.cloud.alibaba-version>所有选择seata版本为 1…

模拟实现应用层协议

模拟实现应用层协议 文章目录 模拟实现应用层协议应用层再谈协议 序列化和反序列化 网络版计算器自定义协议利用Json进行序列化和反序列化json库的安装条件编译 应用层 应用层&#xff08;Application layer&#xff09;是OSI模型的第七层。应用层直接和应用程序接口并提供常见…

CountDownLatch详解——深入探究CountDownLatch源码

这篇文章将会详细介绍CountDownLatch这个并发类&#xff0c;通过深入底层源代码讲解其具体实现。 /*** A synchronization aid that allows one or more threads to wait until* a set of operations being performed in other threads completes.*/ 上面是CountDownLatch这个…

对SAE的测评报告

对SAE的测评报告&#xff1a; 很高兴在这里跟大家分享我对SAE产品的测评体验&#xff0c;以下我将通过实验以及本期话题的问题这两个方面带领大家走进SAE&#xff1a; 产品介绍&#xff1a; Serverless应用引擎SAE是一款极简易用、自适应弹性的容器化应用平台。它提供全托管…