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

2023-09-15 20:51:46

作业:

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);                      //设置内容自适应

更多推荐

Llama.cpp工具main使用手册

Llama.cpp提供的main工具允许你以简单有效的方式使用各种LLaMA语言模型。它专门设计用于与llama.cpp项目配合使用。推荐:用NSDT编辑器快速搭建可编程3D场景Llama.cpp的工具main提供简单的C/C++实现,具有可选的4位量化支持,可实现更快、更低的内存推理,并针对桌面CPU进行了优化。该程

【C++】构造函数初始化列表 ④ ( 构造函数 和 析构函数 调用顺序分析 )

文章目录一、构造函数和析构函数调用顺序说明1、构造函数调用顺序2、析构函数调用顺序3、拷贝构造函数也可以定义初始化列表二、构造函数和析构函数调用顺序代码分析1、构造函数调用顺序2、代码示例-构造/析构函数调用顺序分析构造函数初始化列表总结:初始化列表可以为类的成员变量提供初始值;初始化列表可以调用类的成员变量类型的构造

SpringBoot之静态资源规则与定制化

文章目录前言一、静态资源访问二、静态资源访问前缀三、webjar资源处理的默认规则四、welcome与favicon功能1.欢迎页支持欢迎页处理规则2.自定义Favicon五、补充总结前言本文主要介绍关于SpringBoot中Web开发的简单功能。一、静态资源访问只要静态资源放在类路径下:called/static(o

linux ssh 禁止指定用户通过ssh登录

Linux禁止用户或IP通过SSH登录限制用户SSH登录1.只允许指定用户进行登录(白名单):在/etc/ssh/sshd_config配置文件中设置AllowUsers选项,(配置完成需要重启SSHD服务)格式如下:AllowUsersaliyuntest@192.168.1.1#允许aliyun和从192.168.

洞察2023:中国心室辅助装置行业竞争格局及市场份额

本文核心数据:代表性企业排名;代表性企业优势分析等1、中国心室辅助装置行业竞争梯队人工心脏(ArtificialHeart,AH)是机械辅助类器械的代表,用于替代或辅助心脏泵血功能。按照功能可分为心室辅助装置(VentricularAssistDevice,VAD)、全人工心脏(TotalArtificialHeart

Linux系统之安装uptime-kuma服务器监控面板

Linux系统之安装uptime-kuma服务器监控面板一、uptime-kuma介绍1.1uptime-kuma简介1.2uptime-kuma特点二、本次实践环境介绍2.1环境规划2.2本次实践介绍2.3环境要求三、检查本地环境3.1检查本地操作系统版本3.2检查系统内核版本3.3检查系统是否安装Node.js四、

【计算机网络】IP协议第二讲(Mac帧、IP地址、碰撞检测、ARP协议介绍)

IP协议第二讲1.IP和Mac帧2.碰撞检测2.1介绍2.2如何减少碰撞发生2.3MTU2.4一些补充3.ARP协议3.1协议介绍3.2报文格式分析1.IP和Mac帧IP(InternetProtocol)和MAC(MediaAccessControl)帧是计算机网络中两个不同层次的概念,它们在网络通信中扮演不同的角色

sed简单使用

sed(StreamEditor)流编辑器,对标准输出或文件逐行进行处理语法格式第一种形式:stdout|sed[option]"patterncommand"第二种形式:sed[option]"patterncommand"filesed的选项选项含义-n只打印模式匹配行-e直接在命令行进行sed编辑,默认选项-f编

质数距离(C++筛素数模板题)

给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2−C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。同时,你还需要找到距离最远的两个相邻质数D1和D2(即D1−D2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。输入格式每行输入两个整数L和U,其中L

JavaScript速成课--面向对象程序设计

目录一.类的定义和实例化1.类的定义2.类的实例化二.访问和添加对象的属性和方法1.访问对象的属性和方法2.向对象添加对象属性和方法三.继承1.原型实现继承2.构造函数实现继承3.重新定义继承父类的方法一.类的定义和实例化在JavaScript中没有声明类的关键字,也没有对类访问的权限控制,JavaScript中使用函

力扣刷题:正则表达式匹配、

今日刷题一、正则表达式匹配题目链接:https://leetcode.cn/problems/regular-expression-matching/给你一个字符串s和一个字符规律p,请你来实现一个支持‘.’和‘*’的正则表达式匹配。‘.’匹配任意单个字符‘*’匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串

热文推荐