2023/9/15 -- C++/QT

news2024/9/23 23:32:53

作业:

1> 将工程文件进行注释

2>

03login_box.pro:

QT       += core gui
#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 += \
    main.cpp \
    widget.cpp
#源文件

HEADERS += \
    widget.h
#头文件

FORMS += \
    widget.ui
#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>
#include <QLabel>           //标签库
#include <QPushButton>      //按钮库
#include <QLineEdit>        //文本编辑库

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }  //声明ui界面对应的命名空间
QT_END_NAMESPACE

class Widget : public QWidget       //自己的界面类,继承自QWidegt
{
    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();                    //阻塞等待应用程序
}

 widget.cpp:

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

Widget::Widget(QWidget *parent)             //构造函数
    : QWidget(parent)                       //初始化列表,显式调用QWidget的有参构造
    , ui(new Ui::Widget)                    //给成员申请空间
{
    ui->setupUi(this);                      //给组件申请空间,并设置相关属性

    this->resize(800,600);                  //设置当前界面的尺寸
    this->setWindowTitle("Login");          //设置title
    this->setWindowIcon(QIcon("E:\\QTcreator\\projects\\QT\\day8\\03login_box\\icon\\wodepeizhenshi.png"));         //设置图标
    
    QLabel *lab1 = new QLabel(this);        //设置标签图1
    lab1->resize(800,300);                  //设置其大小
    lab1->setPixmap(QPixmap("E:\\QTcreator\\projects\\QT\\day8\\03login_box\\icon\\logo.png"));         //设置图片
    lab1->setScaledContents(true);          //设置填充属性

    QLabel *lab2 = new QLabel(this);        //设置标签图2
    lab2->resize(40,40);
    lab2->move(180,340);                    //移动标签图2
    lab2->setPixmap(QPixmap("E:\\QTcreator\\projects\\QT\\day8\\03login_box\\icon\\userName.jpg"));
    lab2->setScaledContents(true);

    QLabel *lab3 = new QLabel(this);        //设置标签图3
    lab3->resize(40,40);
    lab3->move(lab2->x(),lab2->y()+80);     //移动标签图3
    lab3->setPixmap(QPixmap("E:\\QTcreator\\projects\\QT\\day8\\03login_box\\icon\\passwd.jpg"));
    lab3->setScaledContents(true);

    QLineEdit *edit1 = new QLineEdit(this);         //设置文本编辑框1
    edit1->resize(400,40);
    edit1->move(lab2->x()+80,lab2->y());            //移动文本编辑框1

    QLineEdit *edit2 = new QLineEdit(this);
    edit2->resize(400,40);
    edit2->move(lab3->x()+80,lab3->y());
    edit2->setEchoMode(QLineEdit::Password);        //设置回显模式
    
    QPushButton *btn1 = new QPushButton(this);      //设置按钮1
    btn1->setIcon(QIcon("E:\\QTcreator\\projects\\QT\\day8\\03login_box\\icon\\login.png"));        //设置图标
    btn1->setText("Login");                         //设置文本
    btn1->resize(100,50);
    btn1->move(edit2->x()+100,edit2->y()+80);

    QPushButton *btn2 = new QPushButton(this);
    btn2->setIcon(QIcon("E:\\QTcreator\\projects\\QT\\day8\\03login_box\\icon\\cancel.png"));
    btn2->setText("Cancel");
    btn2->resize(100,50);
    btn2->move(btn1->x()+180,btn1->y());
}

Widget::~Widget()                           //析构函数
{
    delete ui;
}

效果图:

 

 

 

 

一、默认工程文件中的介绍

1> 工程管理文件.pro

QT       += core gui network
#引入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 += \
    main.cpp \
    mywnd.cpp
#对头文件进行管理
HEADERS += \
    mywnd.h
#对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

2> 头文件

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


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


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


//自定义自己的界面类,公共继承自QWidget,父类中重写了绘制事件处理函数
class MyWnd : public QWidget
{
    Q_OBJECT              //信号与槽的元对象,没有这个对象,信号与槽就不能使用了


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


private:
    Ui::MyWnd *ui;           //可以通过该指针调用ui界面上拖拽出来的组件
};
#endif // MYWND_H

3> 源文件

#include "mywnd.h"
#include "ui_mywnd.h"


//构造函数的定义
MyWnd::MyWnd(QWidget *parent)
    : QWidget(parent)                 //显性调用父类的有参构造完成对子类从父类继承下来成员的初始化工作
    , ui(new Ui::MyWnd)               //给自己类中的指针成员初始化空间,ui界面中拖拽出来的组件,就在这个对象中
{


    ui->setupUi(this);          //调用Ui::MyWnd类里面的成员函数,给拖拽的组件实例化空间,并设置相关属性
}




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

4> 主程序文件

#include "mywnd.h"                  //引入自定义图形化界面类的头文件


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


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);            //使用应用程序类,实例化一个应用程序的对象


    MyWnd w;              //用自定义的图形化界面类实例化一个对象
    w.show();            //调用show函数展示界面,父类提供的,可以展示自己的组件,以自己作为父组件的所有子组件也会被展示出来


    return a.exec();          //阻塞等待应用程序,防止应用程序结束,等待用户操作、等待信号与槽、等待事件发生
}

5> 各个文件之间的调用顺序

二、第一个qt界面

    qDebug() << this->size();            //获取当前界面的尺寸
    qDebug()<<this->width();            //获取当前组件的宽度
    qDebug()<<this->height();             //获取当前组件的高度
    this->resize(1000,800);                 //重新设置尺寸
    this->resize(QSize(500,400));             //使用匿名对象作为函数参数设置当前组件的尺寸
    this->setMaximumSize(1000,800);            //设置最大尺寸
    this->setMinimumSize(200,100);              //设置最小尺寸
    this->setFixedSize(500,400);                 //设置固定尺寸
    qDebug()<<this->windowTitle();             //获取当前组件的窗口标题
    this->setWindowTitle("My QQ");               //设置窗口标题
    this->setWindowIcon(QIcon("D:\\23062C++&QT\\day8\\02First\\qq.png"));     //设置窗口图标
    this->setStyleSheet("background-color:skyblue;");              //设置样式表
    this->setWindowOpacity(0.9);                              //设置窗口透明度
    //this->setWindowFlag(Qt::FramelessWindowHint);          //去掉窗口头部

三、常用类、组件

3.1 信息调试类(QDebug)

//    qDebug() <<"hello world";           //使用方式1:类似于cout
//    qDebug("%s", "good good study");         //使用方式2:类似于printf
//    qDebug() << QString("%1, %2, %3").arg(520).arg('H').arg("hello");   //输出合成的字符串

3.2 按钮类(QPushButton)

1> 该类提供了一个命令按钮

2> 常用函数

    //1、使用无参构造函数,构造一个按钮
    QPushButton *btn1 = new QPushButton;            //无参构造
    //btn1->show();                              //有该函数,但是没有父组件,会单独存在
    btn1->setParent(this);                     //将当前界面作为父组件
    //btn1->setText("按钮1");                      //设置按钮上的文本内容
    qDebug()<<btn1->size();                      //获取按钮的尺寸
    btn1->resize(100,30);                         //重新设置组件尺寸
    qDebug()<<btn1->size();
    btn1->setIcon(QIcon("D:\\23062C++&QT\\day8\\02First\\qq.png"));    //设置图标
    btn1->move(300,0);                          //移动组件位置
    //btn1->setStyleSheet("background-color:red; border-radius:10px;");      //设置样式表
    btn1->setEnabled(false);                             //设置不可用状态


    //2、构造一个按钮,构造时直接指定父组件
    QPushButton *btn2 = new QPushButton(this);
    btn2->setText("按钮2");
    btn2->resize(btn1->size());                  //使用其他组件的尺寸给该组件赋值
    btn2->move(btn1->x(), btn1->y()+50);          //使用其他组件的位置给该组件定位


    //3、构造按钮时直接给定文本内容以及父组件
    QPushButton *btn3 = new QPushButton("按钮3", this);
    btn3->resize(btn1->size());
    btn3->move(btn2->x(), btn2->y()+50);


    //4、构造按钮时直接给定图标、文本内容、父组件
    QPushButton *btn4 = new QPushButton(QIcon("D:\\23062C++&QT\\day8\\02First\\qq.png"), "按钮4", this);
    btn4->resize(btn1->size());
    btn4->move(btn3->x(), btn3->y()+50);

3.3 行编辑器(QLineEdit)

1> 该类提供了一个一行内的文本编辑框

2> 常用函数

    //1、构造一个行编辑器对象,并指定父组件
    QLineEdit *edit1 = new QLineEdit(this);
    edit1->resize(250,30);
    edit1->move(btn1->x()+120, btn1->y());
    edit1->setEchoMode(QLineEdit::Password);        //设置回显模式
    edit1->setMaxLength(6);
    edit1->setPlaceholderText("QQ账号/手机/邮箱");         //设置占位文本
    //edit1->setText("毒毒毒毒");                    //设置文本
    edit1->setAlignment(Qt::AlignCenter);


    //2、构造一个行编辑器,给定初始文本,并指定父组件
    QLineEdit *edit2 = new QLineEdit("嘟嘟嘟", this);
    edit2->move(btn2->x()+120, btn2->y());

3.4 标签类(QLabel)

1> 该类提供了用于展示文本或图片的容器

2> 常用函数

    //1、实例化一个标签,并给定初始文本内容,并指定父组件
    QLabel *lab1 = new QLabel("我是老六", this);
    lab1->resize(200,10);           //重新设置尺寸
    lab1->setStyleSheet("background-color:yellow;");
    qDebug()<<lab1->text();              //获取标签文本内容
    lab1->setAlignment(Qt::AlignCenter);


    lab1->setPixmap(QPixmap("D:\\23062C++&QT\\day8\\02First\\qq.png"));       //设置图片
    lab1->setScaledContents(true);                      //设置内容自适应

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

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

相关文章

Elasticsearch 8.10 中引入查询规则 - query rules

作者&#xff1a;Kathleen DeRusso 我们很高兴宣布 Elasticsearch 8.10 中的查询规则&#xff01; 查询规则&#xff08;query rules&#xff09;允许你根据正在搜索的查询词或根据作为搜索查询的一部分提供的上下文信息来更改查询。 什么是查询规则&#xff1f; 查询规则&…

Linux MyFile

在之前&#xff0c;我们应该都多少接触过了C语言的文件管理&#xff0c;fopen&#xff0c;fclose&#xff0c;fputs....等函数的用法&#xff0c;也分析了系统层面上C语言是如何实现文件管理的。 回顾 上一个文章&#xff0c;我们讲解了十分重要的知识&#xff0c;在文件被打…

组合拳SSRF+redis未授权访问

目录 一、SSRF 二、redis未授权访问 三、组合利用 1.写入Webshell 2.反弹shell 一、SSRF 一台web服务器对其他服务器发起请求&#xff0c;以加载其他服务器的web内容或数据 但因请求参数没有进行严格过滤&#xff0c;攻击者可能会通过SSRF漏洞来访问敏感数据、执行未经授…

Deformable Convolution 可变形卷积

论文&#xff1a;https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf 代码&#xff1a;https://github.com/4uiiurz1/pytorch-deform-conv-v2/blob/master/deform_conv_v2.py 参考博文&#xff1a;可变形卷…

【哈希加密算法】MD5和SHA-1基本介绍和使用!

一、哈希算法 哈希算法&#xff0c;根据碰撞概率&#xff0c;输出的长度越长&#xff0c;就越难产生碰撞&#xff0c;也就越安全。 常用的哈希算法如下&#xff1a; &#xff08;1&#xff09;哈希算法的用途 数据加密&#xff1a;哈希算法可以将原始数据转换成不可逆的加密字…

第二章:25+ Python 数据操作教程(第二十一节PIP连接错误:SSL 证书验证失败解决办法)

在公司网络中安装 python 包时最常见的问题是 SSL 证书验证失败。有时公司会屏蔽网络中的某些网站&#xff0c;因此员工无法访问这些网站。每当他们尝试访问这些网站时&#xff0c;都会显示“由于公司政策&#xff0c;访问被拒绝”。它会导致到达主要 python 网站时出现连接错误…

(面试经典刷题)挑战一周刷完150道-Python版本-第3天(40个题)-I(前10个题)

一、长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 可以是暴…

数据结构与算法(C语言版)P1---算法效率

算法的效率&#xff1a;算法的时间复杂度和空间复杂度 【本节目标】 1.算法效率2.时间复杂度3.空间复杂度4.常见时间复杂度以及复杂oj练习 1、算法效率 1.1、如何衡量一个算法是的好坏 如何衡量一个算法的好坏呢&#xff1f;比如斐波那契数列&#xff1a; long long Fib(…

面试官:我们深入聊聊Java虚拟机吧

哈喽&#xff01;大家好&#xff0c;我是奇哥&#xff0c;一位专门给面试官添堵的职业面试员 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff01; 文章目录 前言面试Java虚拟机内存模型垃圾收集器…

2023年CRM系统成功落地的5个标准

企业做CRM选型时都在思考投入产出比&#xff0c;花费上万元、甚至几十万元和几个月的时间购买和实施CRM&#xff0c;能否为公司带来降本增效的变革&#xff1f;CRM上线后&#xff0c;需要多长时间才能真切地看到效果&#xff1f;评估CRM的使用效果&#xff0c;需要每个企业制定…

【C++STL基础入门】queue基础使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么二、queue的基础使用2.1 queue的构造函数2.2 queue的属性函数 总结 前言 C标准模板库&#xff08;STL&#xff09;提供了一系列强大的容器和算法…

vi/vim编辑器

vi和vim区别 vi 和 vim 是常见的文本编辑器&#xff0c;以下是它们之间的区别&#xff1a; 功能和特性&#xff1a; vi 是最早的版本&#xff0c;是在早期Unix系统中广泛使用的编辑器。vi 相对较简单&#xff0c;功能主要集中在基本的文本编辑操作上&#xff0c;如插入、删除、…

MyBatis: 配置文件解析流程

XmlConfigurationBuilder类来解析配置文件。 调用了build方法&#xff0c;其代码如下&#xff1a; 其中通过parse方法返回一个Configuration对象&#xff0c;在传递给build方法。 parse方法代码如下&#xff1a; 其中调用了parseConfiguration方法&#xff0c; 可以看到其中…

hive 静态分区与动态分区(笔记)

目录 前言&#xff1a; 静态分区&#xff1a; 1.创建分区 2.删除分区 3.在分区中插入数据 4.查看分区表数据 动态分区 &#xff1a; 2.查看v表源数据 3.以emp_name为动态字段数据抽取到employee表 总结 前言&#xff1a; Hive中的分区就是把一张大表的数据按照业务需要…

华为云云耀云服务器L实例评测|华为云上安装监控服务Prometheus三件套安装

文章目录 华为云云耀云服务器L实例评测&#xff5c;华为云上试用监控服务Prometheus一、监控服务Prometheus三件套介绍二、华为云主机准备三、Prometheus安装四、Grafana安装五、alertmanager安装六、三个服务的启停管理1. Prometheus、Alertmanager 和 Grafana 启动顺序2. 使用…

ChatGPT与日本首相交流核废水事件-精准Prompt...

了解更多请点击&#xff1a;ChatGPT与日本首相交流核废水事件-精准Prompt...https://mp.weixin.qq.com/s?__bizMzg2NDY3NjY5NA&mid2247490070&idx1&snebdc608acd419bb3e71ca46acee04890&chksmce64e42ff9136d39743d16059e2c9509cc799a7b15e8f4d4f71caa25968554…

UG时的弹出框:提示没有可用许可证,No such feature exists(-5),

当过多用户使用UG时或UG优化失效时会出现此弹出框。如果该问题发生时&#xff0c;需立即联系管理员&#xff0c;查看许可管理平台&#xff0c;该服务器许可是否占满&#xff0c;如果占满&#xff0c;联系武汉格发管理员&#xff0c;请准备好服务器远程&#xff0c;可以及时查看…

NLP(5)--自编码器

目录 一、自编码器 1、自编码器概述 2、降噪自编码器 二、特征分离 三、自编码器的其他应用 1、文本生成 2、图像压缩 3、异常检测 四、VAE 1、极大似然估计 2、GSM 3、GMM 4、VAE的引出 5、VAE 一、自编码器 1、自编码器概述 自编码器&#xff08;Auto-Encode…

【高阶数据结构】AVL树(C++实现)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

如何将一个字符串转换为驼峰命名法(camel case)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…