Qt Widget核心属性

news2024/9/22 13:24:12

文章目录

    • 前言
    • enabled
    • geometry
    • windowTitle
    • windowIcon
    • windowOpacity
    • cursor
    • font
    • toolTip
    • focusPolicy
    • styleSheet

前言

Qt中的各种控件,都是继承自QWidget类,了解这个类的属性方法之后,后续的控件也通用

enabled

enabled描述了一个控件是否处于“可用”状态

和“可以”相对的概念叫“禁用”

“禁用”状态指的是该控件不能接收任何用户输入的事件了,并且外观上是灰色的;此外,如果一个控件被禁用,那么它的子元素也将被禁用

AIP说明
isEnabled()获取控件可用状态
setEnabled设置控件是否可用,true表示可用,false表示禁用

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    void handle();

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

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#include<QtDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton *button = new QPushButton(this);
    button->setText("按钮");
    //设置按钮处于禁用状态
    button->setEnabled(false);

    connect(button, &QPushButton::clicked, this, &Widget::handle);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handle()
{
    qDebug() << "handle()";
}

image-20240906194452372

也可以通过一个按钮来切换另一个按钮的状态

image-20240906194908805

在同一个界面当中,要求不同的控件objectName不能重复,这样后续就能通过ui->objectName访问到对应的控件。

这个自动生成的objectName是有点规律的,控件类型 + 下划线 + 数字,这个以数字方式命名,不是一个好习惯,我们可以修改

GIF 2024-9-6 20-01-53

geometry

这个属性可用认为是四个属性的统称:x、y、width、height

image-20240906201113744

API说明
geometry()获取控件的位置和尺寸,返回结果是一个QRect(矩形),包含了x、y、width、height,其中(x,y)是左上角的坐标
setGeometry(QRect)
setGeometry(int x, int y, int width, int height)
设置控件的位置和尺寸,可用直接设置一个QRect,也可以分四个属性单独设置

move只是修改位置,geometry既可以修改位置、也可以修改尺寸

通过四个方向键按钮,来控制target

image-20240906202242468

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_up_clicked()
{
    //获取target本质的geometry
    QRect rect = ui->pushButton_target->geometry();

    //可用直接打印
    qDebug() << rect;

    //设置y轴
    rect.setY(rect.y() - 5);
}

void Widget::on_pushButton_down_clicked()
{
    QRect rect = ui->pushButton_target->geometry();

    qDebug() << rect;

    rect.setY(rect.y() + 5);
}


void Widget::on_pushButton_left_clicked()
{
    QRect rect = ui->pushButton_target->geometry();

    qDebug() << rect;

    rect.setX(rect.x() - 5);
}

void Widget::on_pushButton_right_clicked()
{
    QRect rect = ui->pushButton_target->geometry();

    qDebug() << rect;

    rect.setX(rect.x() + 5);
}

执行发现,只是调整了左上角的位置,左上角改变的同时,高度和宽度也改变了

GIF 2024-9-6 20-37-46

如果想实现“平移”的效果,尺寸保存不变,就不用修改QRect,可用通过QRect基于setGeometry第二个版本的函数重新设置位置即可:

void Widget::on_pushButton_up_clicked()
{
    //获取target本质的geometry
    QRect rect = ui->pushButton_target->geometry();

    //可用直接打印
    qDebug() << rect;

    //设置y轴
    //rect.setY(rect.y() - 5);

    //以上都是局部变量,获取target,将矩形设置进去
    //ui->pushButton_target->setGeometry(rect);

    ui->pushButton_target->setGeometry(rect.x(), rect.y()-5, rect.width(), rect.height());
}

//...

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可用基于此,做一个简单的小程序:

image-20240906210621340

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

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
srand(time(0)); //设置随机数种子
}

Widget::~Widget()
{
delete ui;
}


void Widget::on_pushButton_accept_clicked()
{
ui->label->setText("老板大气");
}

void Widget::on_pushButton_reject_clicked()
{
//挪走按钮
//生成随机数

//获取当前窗口尺寸
//    int width = this->geometry().width();
//    int height = this->geometry().height();

//    //生成位置
//    int x = rand() % width;
//    int y = rand() % height;

//    ui->pushButton_reject->move(x, y);
}

//pressed 点击鼠标之后就触发
void Widget::on_pushButton_reject_pressed()
{
int width = this->geometry().width();
int height = this->geometry().height();

//生成位置
int x = rand() % width;
int y = rand() % height;

ui->pushButton_reject->move(x, y);
}

GIF 2024-9-6 21-07-19

关于window frame的影响,可以看此篇文章:Qt中window frame的影响

windowTitle

API说明
windowTitle()获取控件窗口的标题
setWindowTitle(const QString& title)设置控件的窗口标题

windowTitle属性是属于QWidget,而QWidget是一个广泛的概念,例如一个按钮、一个输入框,都属于QWidget

windowTitle属性只针对顶层窗口这样的QWidget才有效

image-20240907094511089

当前设置了窗口标题,也给按钮设置了标题,窗口标题正常显式,按钮没有显式、也没有报错。

此时“没有报错”,是不太科学的

windowIcon

windowIcon表示窗口的图标,下面这些就是窗口的图标

image-20240907103653826

想要改变窗口图标,可以采用下面的API:

API说明
windowIcon()获取控件窗口图标,返回QIcon对象
setWindowIcon(const QIcon& icon)设置控件的窗口图标

这个也是针对顶层窗口使用的

#include "widget.h"
#include "ui_widget.h"
#include<QIcon>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QIcon icon("./logo.jpg");
    this->setWindowIcon(icon);
}

Widget::~Widget()
{
    delete ui;
}

Tips1:

之前一般都是在堆上创建对象,而这里QIcon对象直接在栈上创建。

这是因为要确保当前对象的生命周期是足够的,要通过Qt对象树来释放;

而QIcon自身是一个比较小的对象,创建出来之后要设置到某个QWidget里面,QIcon对象本身释放与否,不需要图标的显示;

另外QIcon也不支持对象树机制,无法给它指定父对象

Tips2:

这里的路径读取,采用了/作为分隔符,这是因为C++中\是转义字符,会影响读取

如果想使用\作为分隔符,C++11引入raw string,这里面的字符串就表示不包含任何转义字符R(“C:\ProgramFiles\xxx\xx.jpg”)

Tips3:

设置路径一般采用相对路径,因为程序可能是要给别人使用的,无法确保我们的路径和用户的路径一致。

这个图片要放到运行程序的路径下:

image-20240907110004924

如果用户将图片不小心弄没了,这还是比较麻烦。Qt里面引入了qrc机制,从根本上解决这两个问题:

  1. 确保图片所在路径在目标用户机器上存在
  2. 确保图片不会丢失

qrc机制讲解:Qt qrc机制

运行之后,窗口的图标就改变了

image-20240907105736174

windowOpacity

windowOpacity可以设置窗口透明度

API说明
windowOpacity()获取控件的不透明数值
返回float,取值为[0.0, 1.0],其中0.0表示全透明,1.0表示完全不透明
setWindowOpacity()设置控件的不透明数值
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_add_clicked()
{
    float opacity = this->windowOpacity();
    if(opacity >= 1.0)
    {
        return;
    }
    qDebug() << opacity;
    opacity += 0.1;

    this->setWindowOpacity(opacity);
}

void Widget::on_pushButton_sub_clicked()
{
    float opacity = this->windowOpacity();
    if(opacity <= 0.0)
    {
        return;
    }
    qDebug() << opacity;
    opacity -= 0.1;

    this->setWindowOpacity(opacity);
}

GIF 2024-9-7 15-41-28

事件运行的时候,查看输出信息,窗口透明度的变化,并不是精确的

image-20240907154307438

这是因为浮点数在内存中存储,要根据IEEE 754标准,规定浮点数要使用二进制位科学计数法的方法来表示,一个浮点数分为3部分:

  1. 符号位
  2. 有效数字
  3. 指数部分

使用二进制表示有效数字部分,第一位0.5(2-1)、第二位0.25(2-2)、第三位0.125(2-3)…

由于长度有限,就无法精确表示0.1这样的数字,所以就显示出了这些有误差的数字

具体方面,可以看此篇文章:数据的存储

我们代码当中加了判定条件,看opacity是否在[0.0, 1.0]这个区间,其实不加也是可以的,因为超出范围的设置不进去,setWindowOpacity内部做了处理。

GIF 2024-9-7 16-02-49

验证发现,确实setWindowOpacity内部做出了处理,但是实际开发当中,还是建议加上,出于于“防御性编程”的角度考虑,double check

cursor

修改鼠标光标的样式,指向不同控件,有不同效果

API说明
cursor()获取当前widget的cursor属性,返回QCursor对象
当鼠标悬停在该widget上时,就会回显出对应的形状
setCursor(const QCursor& cursor)设置该widget光标的形状,仅在鼠标停留在该widget上时生效
QGuiApplication::setOverrideCursor(const QCursor& cursor)设置全局光标的形状,对整个程序中所以的widget都会生效
覆盖上面的setCurosr设置的内容

可以通过图形化界面的方式直接设置:

image-20240907161956410

通过代码方式:

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

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

    QCursor cursor(Qt::WaitCursor); //等待光标
    ui->pushButton->setCursor(cursor);
}

Widget::~Widget()
{
    delete ui;
}

GIF 2024-9-7 16-22-56

这些都是Qt内置的光标形状:

image-20240907162403470

这些内置的光标图片,看着稍微有点古老,Qt允许我们通过自定义图片来设置光标。

和设置窗口图标操作相似,准备好图片,然后导入到qrc文件

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

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

    //访问图片文件
    QPixmap pixmap(":/ikun.png");

    //构造光标对象
    //图片左上角为原点, 找到10,10这个位置,为鼠标真正点击的位置
    QCursor cursor(pixmap, 10, 10);

    //设置光标
    this->setCursor(cursor);
}

Widget::~Widget()
{
    delete ui;
}

如果图片太大/小,可采用QPixmap通过的scaled函数,对图片进行缩放

QPixmap pixmap(":/ikun.png");
pixmap = pixmap.scaled(50, 50);

GIF 2024-9-7 16-45-03

光标网站推荐:iconfont-阿里巴巴矢量图标库

font

API说明
font()获取当前widget的字体信息,返回QFont对象
setFont(const QFont& font)设置当前widget的字体信息

关于QFont:

属性说明
family字体家族
例如“楷体”、“宋体”、“微软雅黑”等
pointSize字体大小
weight字体粗细
以数值方式表示粗细程度,取值范围为[0, 99],数值越大,越粗
bold是否加粗
设置为true,相当于weight为75;设置为false,相当于weight为50
italic是否倾斜
underline是否带下划线
strikeOut是否带删除线

上述属性具体怎么设置,在实际开发中,会有专门的美工/设计/UED来确定

可以通过图形化设置:

image-20240907171924841

这样修改很方便,但是不够灵活,因为程序运行的时候,可能需要修改字体,这时候就需要代码来操作了

代码设置:

#include "widget.h"
#include "ui_widget.h"
#include<QLabel>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QLabel *label = new QLabel(this);
    label->setText("这是一段文本");


    //设置字体
    //创建字体对象
    QFont font;
    font.setFamily("仿宋");
    font.setPixelSize(30);
    font.setBold(true);
    font.setItalic(true);
    font.setUnderline(true);
    font.setStrikeOut(true);
    //设置进label当中
    label->setFont(font);
}

Widget::~Widget()
{
    delete ui;
}

image-20240907172612498

toolTip

一个GUI程序,界面比较复制,各种控件比较多,这些控件具体是干嘛的,可能就不是很清楚。

toolTip机制就可以当把鼠标悬停到这个控件的时候,就会弹出提示。

API说明
setToolTip设置toolTip
鼠标悬停在该widget上时,会有提示说明
setToolTipDuring设置toolTip提示时间,单位ms
时间到之后toolTip自动消失

图形化界面设置:

image-20240907173345762

代码设置:

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

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

    ui->pushButton_yes->setToolTip("这是yes按钮");
    ui->pushButton_yes->setToolTipDuration(3000);

    ui->pushButton_no->setToolTip("这是no按钮");
    ui->pushButton_no->setToolTipDuration(3000);
}

Widget::~Widget()
{
    delete ui;
}

image-20240907173734589

focusPolicy

设置控件获取焦点的策略

所谓的“焦点”,指的就是能选中这个元素,接下来的操作,都在针对该焦点元素进行的。

例如点击一个文本框,接下来键盘输入的内容,都是针对这个文本框的

一般来说,获取控件焦点主要通过2种方式:

  1. 鼠标点击
  2. 键盘tab

Qt通过了api,可以控制获取焦点的行为

API说明
focusPolicy()获取该widget的focusPolicy
返回Qt::FocusPolicy
setFocusPolicy(Qt::FocusPolicy)设置widget的focusPolicy

Qt::FocusPolicy是⼀个枚举类型,取值如下:

  • Qt::NoFocus:控件不会接收键盘焦点
  • Qt::TabFocus:控件可以通过Tab键接收焦点
  • Qt::ClickFocus:控件在⿏标点击时接收焦点
  • Qt::StrongFocus:控件可以通过Tab键和⿏标点击接收焦点 (默认值)
  • Qt::WheelFocus: 类似于 Qt::StrongFocus , 同时控件也通过⿏标滚轮获取到焦点 (新增的选项, ⼀般很少使⽤).

通过图形化设置的,默认就是StrongFocus

GIF 2024-9-7 17-54-54

这里就可以修改:

image-20240907175642545

styleSheet

这个叫做样式标,通过CSS设置widget的样式

CSS:层叠样式表,在前端当中,设置网页样式的方式。Qt参考CSS,弄了自己的一套QSS

样式:描述界面具体是什么样子

image-20240907180740844

通过代码实现日间、夜间模式的切换:

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

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

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_light_clicked()
{
    //设置窗口样式
    this->setStyleSheet("background-color: white;");
    //设置输入框样式
    ui->plainTextEdit->setStyleSheet("background-color: white; color: black");
    //设置按钮样式
    ui->pushButton_light->setStyleSheet("color: black;");
    ui->pushButton_dark->setStyleSheet("color: black;");

}

void Widget::on_pushButton_dark_clicked()
{
    //设置窗口样式
    this->setStyleSheet("background-color: black;");
    //设置输入框样式
    ui->plainTextEdit->setStyleSheet("background-color: black; color: white");
    //设置按钮样式
    ui->pushButton_light->setStyleSheet("color: white;");
    ui->pushButton_dark->setStyleSheet("color: white;");

}

GIF 2024-9-7 18-23-14

这个恢复成日间模式,和原始的不一样

计算机当中的颜色表示用RGB表示,一般并不会直接用whitered这些直接表示

我们可以采用取色器(截图或者画图板),获取当前的颜色:

image-20240907182838659

然后设置进去即可:

image-20240907183052405

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

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

相关文章

未来工作趋势:零工小程序在共享经济中的作用

经济在不断发展的同时&#xff0c;科技也在飞速发展。零工经济作为一种新兴的工作模式&#xff0c;正在全球范围内迅速崛起。特别是在中国&#xff0c;随着数字经济的蓬勃发展和共享经济模式的深入推广&#xff0c;零工小程序在促进就业、提升资源利用效率方面显示出了巨大的潜…

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知&#xff0c;2024年AMC10美国数学竞赛的报名还有两周&#xff0c;正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间&#xff0c;认真备考&#xff0c;最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢&#xff1f;做真题&#xff0c;吃透真题和…

FreeRTOS学习笔记—②RTOS的认识及任务管理篇

由于正在学习韦东山老师的RTOS课程&#xff0c;结合了网上的一些资料&#xff0c;整理记录了下自己的感悟&#xff0c;用于以后自己的回顾。如有不对的地方请各位大佬纠正。 文章目录 一、RTOS的优势二、RTOS的核心功能2.1 任务管理2.1.1 任务的创建2.1.2 任务的删除*2.1.3 任…

Windows系统安装node.js环境并创建本地服务使用内网穿透发布至公网

目录 前言 1.安装Node.js环境 2.创建node.js服务 3. 访问node.js 服务 4.内网穿透 4.1 安装配置cpolar内网穿透 4.2 创建隧道映射本地端口 5.固定公网地址 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Windows系统安装node.js环…

Arch - 架构安全性_认证(Authentication)的标准和实现

文章目录 OverView认证的标准认证的基础认证的范围认证的标准与实践HTTP认证框架Web认证&#xff08;表单认证&#xff09;WebAuthn标准认证流程示例&#xff1a;WebAuthn 小结 认证的实现JAASSpring Security 和 Shiro小结 OverView 即使只限定在“软件架构设计”这个语境下&…

MonoHuman: Animatable Human Neural Field from Monocular Video 精读

一、共享双向变形模块 1. 模块的核心思想 共享双向变形模块的核心目标是解决从单目视频中生成不同姿态下的3D人体形状问题。因为视频中的人物可能处于各种动态姿态下&#xff0c;模型需要能够将这些不同姿态的几何形状进行变形处理&#xff0c;以适应标准的姿态表示并生成新的…

# VMware 共享文件

VMware tools快速安装 VMware 提供了 open-vm-tools&#xff0c;这是 VMware 官方推荐的开源工具包&#xff0c;通常不需要手动安装 VMware Tools&#xff0c;因为大多数 Linux 发行版&#xff08;包括 Ubuntu、CentOS 等&#xff09;都包含了 open-vm-tools&#xff0c;并且已…

FreeRTOS内部机制学习02(消息队列深度学习)

文章目录 队列的核心以及好处队列的核心队列的好处 深入源码了解队列机制深入队列读取操作深入队列写入操作读写队列出超时时间 信号量深入信号量获取以及释放操作 互斥量互斥量和信号量的不同深入源码看优先级继承是怎么操作到的 队列的核心以及好处 队列的核心 队列的核心就…

如何打造高效办公楼物业管理系统?Java SpringBoot+Vue架构详解,实现智能化管理,提升工作效率

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

GraphPad Prism 10 for Mac/Win:高效统计分析与精美绘图的科学利器

GraphPad Prism 10 是一款专为科研工作者设计的强大统计分析与绘图软件&#xff0c;无论是Mac还是Windows用户&#xff0c;都能享受到其带来的便捷与高效。该软件广泛应用于生物医学研究、实验设计和数据分析领域&#xff0c;以其直观的操作界面、丰富的统计方法和多样化的图表…

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存中没有命中&#xff0c;会去数据库中查询&#xff0c;而数据库中也没有该数据&#xff0c;并且每次查询都不会命中缓存&#xff0c;从而每次请求都直接打到了数据库上&#xff0c;这会给数据…

认知杂谈53

今天分享 有人说的一段争议性的话 I I 1.自助者天助 首先呢&#xff0c;咱得好好琢磨琢磨“自助者天助”这句话。这话说起来好像有点高深莫测的感觉&#xff0c;其实啊&#xff0c;道理特别简单。 就是说要是你自己都不乐意努力&#xff0c;那老天爷也不会平白无故地来帮你…

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机&#xff0c;暗影精灵8plus电竞主机&#xff0c;安装ubuntu后wifi怎么都搜不到热点&#xff0c;前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统&#xff0c;我用无线网连接了一下&am…

【每日刷题】Day113

【每日刷题】Day113 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 91. 解码方法 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 098. 不同路径 - 力扣&#xff08;…

服务器流量监控工具vnStat的简单使用以及关于Linux的软中断信号(signal)的一点内容

一、服务器流量监控工具vnStat的简单使用 vnStat是为Linux和BSD设计的基于控制台的网络流量监控工具&#xff0c;通过它可以非常方便在命令行查看流量统计情况。它可以保留某个或多个所选择的网络接口的网络流量日志。为了生成日志&#xff0c;vnStat使用内核提供的信息。换句话…

2024年必看的4款录屏新星,谁才是你的菜?

嘿&#xff0c;小伙伴们&#xff0c;你们的职场好帮手来啦。今天我们要说说办公室里经常被忽略但实际上超有用的东西——录屏软件。现在大家都用数字化工具办公了&#xff0c;不管是做教学视频、记录会议&#xff0c;还是直播玩游戏&#xff0c;录屏软件都是必不可少的。可是市…

FRP内网穿透使用常见问题

本文解答一些关于FRP内网穿透的常见问题 FRP简介 FRP是一款开源的高性能反向代理应用&#xff0c;支持多种协议的内网穿透。它允许用户在外网环境中访问位于内网中的服务器和服务&#xff0c;如Web服务器、MySQL数据库、以及其他基于TCP/UDP的应用程序。FRP以其灵活的配置选项…

C++实现俄罗斯方块(Windows控制台版)

C实现俄罗斯方块&#xff08;Windows控制台版&#xff09; 在油管上看到一个使用C控制台编写的俄罗斯方块小游戏&#xff0c;源代码200多行&#xff0c;B站上也有相关的讲解视频&#xff0c;非常不错&#xff0c;值得学习。 B站讲解视频地址为&#xff1a;【百万好评】国外技术…

Unet改进27:添加DGCST|Vision Transformer与DGSM模块集成在一起的创新结构

本文内容:在不同位置添加DGCST 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 随着移动计算技术的快速发展,在移动设备上部署高效的目标检测算法成为计算机视觉的一个关键研究领域。本研究的重点是优化YOLOv7算法,以提高其在移动平台上的运行效率和速度…

【Linux】传输层协议——UDP

零、传输层的作用是负责数据能够从发送端传输到接收端 一、再来认识一下端口号 端口号&#xff08;Port&#xff09;标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中&#xff0c;用“源IP”&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”…