QT的介绍和优点,以及使用QT初步完成一个登录界面

QT介绍

  • QT主要用于图形化界面的开发,QT是基于C++编写的一套界面相关的类库,进程线程库,网络编程的库,数据库操作的库,文件操作的库…
  • QT是一个跨平台的GUI图形化界面开发工具

QT的优点

  • 跨平台,具有较为完备的图形开发库,所能想到的图形的实现基本都有,比window的MFC的库更强大
  • 接口的封装性好,易上手,学习QT框架对学习计算机图形框架有很重要的参考意义
  • QT内部基本上有一套自己的简易好用的内存回收机制,对提高C++水平有帮助
  • 有很好的社区环境,市场份额在缓慢上升
  • 轻量级的开发环境,可以做嵌入式开发

练习

完成一个登录界面的界面组件设置

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton> //按钮组件头文件
#include <QLabel> //标签组件头文件
#include <QLineEdit> //行编辑器组件头文件
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置窗口
    this->resize(540,410); //设置窗口大小
    this->setWindowTitle("奕书聊天室");//设置窗口标题
    this->setWindowIcon(QIcon("C:\\Users\\W\\Desktop\\icon\\wodepeizhenshi.png"));
    //设置登录按钮组件
    QPushButton *btn1 = new QPushButton(QIcon("C:\\Users\\W\\Desktop\\icon\\login.png"),
                                               "登录",
                                               this);//设置按钮组件的图标,文本内容,和让其在当前界面显示
    btn1->move(240,340);  //设置按钮组件的位置
    btn1->resize(80,40);  //设置按钮组件的大小
   // btn1->setEnabled(false); //设置按钮不可点击
    //设置取消按钮组件
    QPushButton *btn2 = new QPushButton(QIcon("C:\\Users\\W\\Desktop\\icon\\cancel.png"),
                                               "取消",
                                               this);//设置按钮组件的图标,文本内容,和让其在当前界面显示
    btn2->move(340,340);
    btn2->resize(80,40);
   // btn2->setEnabled(false);
    //设置LOGO
    QLabel *lab1 = new QLabel(this);
    lab1->setPixmap(QPixmap("C:\\Users\\W\\Desktop\\1.png"));
    lab1->resize(540,180);
    lab1->setScaledContents(true);
    //设置行编辑器 账号
    QLineEdit * edit1 = new QLineEdit(this);
    edit1->resize(220,40);
    edit1->move(180,220);
    edit1->setPlaceholderText("QQ号码/手机/邮箱");//设置占位符
    //edit1->setEchoMode(QLineEdit::Password);
    //设置行编辑器 密码
    QLineEdit * edit2 = new QLineEdit(this);
    edit2->resize(220,40);
    edit2->move(180,280);
    edit2->setPlaceholderText("密码");//设置占位符
    edit2->setEchoMode(QLineEdit::Password);//设置密文显示
    //设置账号的LOGO
    QLabel *lab2 = new QLabel(this);
    lab2->setPixmap(QPixmap("C:\\Users\\W\\Desktop\\icon\\userName.jpg"));
    lab2->resize(50,40);
    lab2->move(edit1->x()-85,edit1->y());
    lab2->setScaledContents(true); //设置图片内容自适应
    //设置账号的LOGO
    QLabel *lab3 = new QLabel(this);
    lab3->setPixmap(QPixmap("C:\\Users\\W\\Desktop\\icon\\passwd.jpg"));
    lab3->resize(50,40);
    lab3->move(edit2->x()-85,edit2->y());
    lab3->setScaledContents(true); //设置图片内容自适应
}
MainWindow::~MainWindow()
{
    delete ui;
}


在这里插入图片描述
对QT编写文件进行注释理解
.pro文件

QT       += core gui
#在进行编程时QT工程需要的库 core是核心库,gui是图形化界面相关的库

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

#用来管理源文件(Sources下的文件)
SOURCES += \  
    main.cpp \
    mywindow.cpp

#用来管理头文件(Headers下的文件)
HEADERS += \
    mywindow.h

#用来管理ui文件(Froms下的文件)
FORMS += \
    mywindow.ui

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

.h文件

#ifndef MYWINDOW_H
#define MYWINDOW_H //防止头文件重复

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

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

//定义属于自己的类,Mywindow是类名,公共继承于QWidget
class Mywindow : public QWidget
{
    Q_OBJECT //信号与槽的元对象

public:
    Mywindow(QWidget *parent = nullptr); //声明构造函数,并定义一个默认参数
    ~Mywindow();  //声明析构函数

private:
    Ui::Mywindow *ui; //通过ui指针查找ui界面中的组件
};
#endif // MYWINDOW_H

mywindow.cpp文件

#include "mywindow.h"  //头文件
#include "ui_mywindow.h"  //ui界面对应的头文件

//构造函数的定义
Mywindow::Mywindow(QWidget *parent)
    : QWidget(parent)  //显性调用父类的构造函数完成子类从父类继承的成员的初始化
    , ui(new Ui::Mywindow) //对类中的指针成员开辟空间
{
    ui->setupUi(this); //为ui界面中拖拽出来的组件开辟空间
}

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


main.cpp文件

#include "mywindow.h" //头文件

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);  //实例化一个应用程序的对象,调用有参构造
    
    Mywindow w; //在栈区实例化一个类对象
    
    w.show(); //调用show函数展示界面,是父函数提供的QWidget
    
    return a.exec();//为了阻塞界面不被关系,等待相关事情的发生
                    //等待信号与槽、事件处理、等待用户操作
}

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

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

相关文章

leetcode做题笔记107. 二叉树的层序遍历 II

给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 思路一&#xff1a;递归调换顺序 int** levelOrderBottom(struct TreeNode* root, int* returnSize, i…

技术干货 —— 手把手教你通过缓存提升 API 性能

许多开发者都希望能够彻底搞清楚 API 的工作方式&#xff0c;以及如何利用缓存 API 请求来提升业务&#xff0c;但是当这个需求进入实现阶段时&#xff0c;许多人就会发现手头并没有合适的工具和恰当的方法&#xff0c;所以我们今天就为大家做一个全面的讲解&#xff1a; ① 几…

数据结构(Java实现)-字符串常量池与通配符

字符串常量池 在Java程序中&#xff0c;类似于&#xff1a;1&#xff0c; 2&#xff0c; 3&#xff0c;3.14&#xff0c;“hello”等字面类型的常量经常频繁使用&#xff0c;为了使程序的运行速度更快、更节省内存&#xff0c;Java为8种基本数据类型和String类都提供了常量池。…

【数据结构】栈---C语言版(详解!!!)

文章目录 &#x1f438;一、栈的概念及结构&#x1f344;1、栈的概念定义&#x1f344;2、动图演示&#x1f332;入栈&#x1f332;出栈&#x1f332;整体过程 &#x1f438;二、栈的实现&#x1f438;三、数组结构栈详解&#x1f34e;创建栈的结构⭕接口1&#xff1a;定义结构…

R语言中缺失值的处理

目录 一.寻找缺失值 1.complete.cases() 2.manyNAs 二.缺失值的处理 1.直接删除 2.填补缺失值 一.寻找缺失值 1.complete.cases() #会展现缺失值 algae[!complete.cases(algae),] 2.manyNAs > manyNAs(algae) [1] 62 199 #表示第62条和第199条都有很多缺失值>m…

Systrace分析App性能学习笔记

学习Gracker Systrace系列文章&#xff0c;总结使用Systrace分析App性能的方法。推荐想通过Systrace学习Framework的同学&#xff0c;去看原文。 文章目录 概述Systrace使用流程Systrace 文件生成图形方式(不推荐)命令行方式 Systrace分析快捷键使用帧状态线程状态查看线程唤醒…

Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移

首先思考一个问题&#xff1a;如果 Dubbo 应用使用 ZooKeeper 作为注册中心&#xff0c;现在需要切换到新的 ZooKeeper 实例&#xff0c;如何做到流量无损&#xff1f; 本文提供解决这个问题的一种方案。 场景 有两个基于 Dubbo 的微服务应用&#xff0c;一个是服务提供者&…

RT-Thread 内核移植

内核移植 内核移植就是将RTT内核在不同的芯片架构、不同的板卡上运行起来&#xff0c;能够具备线程管理和调度&#xff0c;内存管理&#xff0c;线程间同步等功能。 移植可分为CPU架构移植和BSP&#xff08;Board support package&#xff0c;板级支持包&#xff09;移植两部…

四轴飞行器的电池研究(MatlabSimulink仿真)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

《TCP/IP网络编程》阅读笔记--基于Windows实现Hello Word服务器端和客户端

目录 1--Hello Word服务器端 2--客户端 3--编译运行 3-1--编译服务器端 3-2--编译客户端 3-3--运行 1--Hello Word服务器端 // gcc hello_server_win.c -o hello_server_win -lwsock32 // hello_server_win 9190 #include <stdio.h> #include <stdlib.h> #i…

一般不用buildroot来编译uboot和kernel

Buildroot 是一个流行的嵌入式 Linux 系统构建工具&#xff0c;它可以帮助开发者自动化地构建完整的嵌入式 Linux 系统&#xff0c;包括文件系统、内核以及各种用户空间应用程序。虽然 Buildroot 在构建嵌入式系统方面非常强大且易于使用&#xff0c;但一般情况下&#xff0c;它…

蓝牙发展现状

目录 一、产品分类1、Bluetooth经典2、Bluetooth低能耗(LE)3、二者差异 二、出货量三、未来需要加强的方向四、技术行业细分五、学习资料1、蓝牙官网2、大神博客——于忠军 一、产品分类 1、Bluetooth经典 Bluetooth Classic无线电&#xff0c;也被称为Bluetooth 基本速率/增强…

windows11 利用vmware17 安装ky10-server-x86操作系统

下载相关软件和镜像 vmware17 下载 下载页面 Download VMware Workstation Pro ky10server-x86镜像下载 官网 国产操作系统、银河麒麟、中标麒麟、开放麒麟、星光麒麟——麒麟软件官方网站 (kylinos.cn) 选择对应版本去下载 安装 选择镜像&#xff0c;点击下一步 磁盘设置要…

macOS上制作arm64的jdk17镜像

公司之前一直用的openjdk17的镜像&#xff0c;docker官网可以直接下载&#xff0c;但是最近对接的一个项目&#xff0c;对方用的是jdk17&#xff0c;在对接的时候有加解密异常的问题&#xff0c;为了排查是不是jdk版本的问题&#xff0c;需要制作jdk17的镜像。docker官网上的第…

Spark-Core核心算子

文章目录 一、数据源获取1、从集合中获取2、从外部存储系统创建3、从其它RDD中创建4、分区规则—load数据时 二、转换算子(Transformation)1、Value类型1.1 map()_1.2 mapPartitions()1.3 mapPartitionsWithIndex(不常用)1.4 filterMap()_扁平化&#xff08;合并流&#xff09;…

Docker部署RustDesk Server 设置开机自启

三、Docker安装 Docker官方和国内daocloud都提供了一键安装的脚本&#xff0c;使得Docker的安装更加便捷。 官方的一键安装方式&#xff1a; curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 国内 daocloud一键安装命令&#xff1a; curl -sSL https://…

测试验证平台

测试验证平台 1.功能说明&#xff1a; 模拟智能终端车端数据采集及上报的功能&#xff0c;提供数据管理平台的模拟和验证功能。 2.系统组成&#xff1a; 系统示意图 功能要求&#xff1a; 本地电脑实现Imx6配置功能&#xff0c;能够通过运行不同的脚本&#xff0c;模拟不…

Java“牵手”京东商品详情数据,京东API接口申请指南

京东平台商品详情接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取京东商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口&#xff0c;通过…

说说Flink双流join

分析&回答 Flink双流JOIN主要分为两大类 一类是基于原生State的Connect算子操作另一类是基于窗口的JOIN操作。其中基于窗口的JOIN可细分为window join和interval join两种。 基于原生State的Connect算子操作 实现原理&#xff1a;底层原理依赖Flink的State状态存储&…

大学物理 之 安培环路定理

文章目录 前言什么是安培环路定理安培环路定理有什么作用 深入了解深入学习 前言 什么是安培环路定理 安培环路定理的物理意义在于描述了电流和磁场之间的相互作用&#xff0c;以及如何在一个封闭的回路中分析这种相互作用。 简单的来说 , 用环路定理来解决在磁场中B对任意封…
最新文章