当前位置: 首页 > news >正文

【C++ Qt】布局管理器


每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”

🤔绪论​:
在Qt开发中,界面布局的合理设计是提升用户体验的关键。早期,开发者常采用绝对定位的方式摆放控件,即通过计算坐标并使用setGeometry或move方法逐一定位。然而,这种方法不仅复杂且不精确,难以适应窗口大小的变化,尤其在界面内容繁杂时,计算难度显著增加。
为解决这一问题,Qt引入了布局管理器机制,通过QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)和QFormLayout(表单布局)等工具,实现了控件的自动排列与窗口大小的自适应调整。布局管理器不仅简化了界面设计流程,还提高了布局的灵活性和可维护性,成为Qt开发中不可或缺的一部分。本文将详细介绍这些布局管理器的使用方法与技巧,助力开发者高效构建Qt界面。
————————
早关注不迷路🎠,话不多说安全带系好,发车啦(建议电脑🖥️观看)。

🐱‍🐉布局管理器

  之前使⽤ Qt 在界⾯上创建的控件, 都是通过 “绝对定位” 的⽅式来设定的。也就是每个控件所在的位置, 都需要计算坐标, 最终通过 setGeometry 或者 move ⽅式摆放过去。这种方式虽然不错,但这种设定⽅式其实并不⽅便

  • 手动布局非常复杂,而且不精确、并且无法对窗口的大小自适应
  • 尤其是界⾯如果内容⽐较多, 不好计算
  • ⽽且⼀个窗⼝⼤⼩往往是可以调整的, 按照绝对定位的⽅式, 也⽆法⾃适应窗⼝⼤⼩。
  • 因此 Qt 引⼊ “布局管理器” (Layout) 机制, 来解决上述问题.

当然,布局管理器并非 Qt 独有。其他的 GUI 开发框架,像 Android,前端等也有类似的机制。

Qt中提供了很多种布局管理器

  1. 垂直布局
  2. 水平布局
  3. 网格布局(行列)
  4. 表单布局

⛰️垂直布局 QVBoxLayout

使⽤ QVBoxLayout 表⽰垂直的布局管理器(V 就是 vertical 的缩写)

核⼼属性🎈

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上⽅边距
layoutBottomMargin下⽅边距
layoutSpacing相邻元素之间的间距

实操1📄

  1. 目的:创建3个按钮,使用垂直布局管理器管理起来
  2. 创建三个按钮通过构造填写文本(布局管理器作为父元素,后续只需通过该布局管理器进行添加操作即可)
  3. 创建布局管理器对象
  4. 将三个按钮添加布局管理器中(addWidget)这样三个按钮以及布局管理都是在对象树上的
  5. 将布局管理器设置到窗口上(setLayout
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建三个按钮QPushButton* b1 = new QPushButton("按钮1");QPushButton* b2 = new QPushButton("按钮2");QPushButton* b3 = new QPushButton("按钮3");QVBoxLayout* layout = new QVBoxLayout();layout->addWidget(b1);layout->addWidget(b2);layout->addWidget(b3);this->setLayout(layout);
}Widget::~Widget()
{delete ui;
}

此时拖拽窗口,按钮就会自适应窗口
在这里插入图片描述

更多细节🔥

  1. 注意:在代码中,当你调用QWidget::setLayout()时,只能设置一个布局管理器,但允许嵌套多个布局管理器。这个布局管理器会成为Widget的直接布局管理器。

  2. 在代码中创建多个layout时,它们会嵌套在第一个生成的Layout上。

    1. layout 标签表示的是布局管理器的本体外面会自动创建出了一个Widget
    2. 每个layout里面就可以包含若干个item(也就是如按钮的控件)
  3. 也可以先拖拽其他控件,然后再套上layout

  4. 框选住刚刚拖拽的控件,然后点击再左上角(如下图)就能放到layout中
    在这里插入图片描述

水🌊平布局 QHBoxLayout

使⽤ QHBoxLayout 表⽰垂直的布局管理器(H 是 horizontal 的缩写)

核⼼属性 🎈
(和 QVBoxLayout 属性是⼀致的)

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上⽅边距
layoutBottomMargin下⽅边距
layoutSpacing相邻元素之间的间距

实操1📄

  1. 创建出三个按钮,按钮1/2/3
  2. 创建QHBoxLayout对象
  3. 将按钮添加到layout中(addWidget)
  4. 再将layout设置到this上(setLayout)
  5. 还能通过layoutLeftMargin…等设置边距
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//    //创建三个按钮
//    QPushButton* b1 = new QPushButton("按钮1");
//    QPushButton* b2 = new QPushButton("按钮2");
//    QPushButton* b3 = new QPushButton("按钮3");//    QVBoxLayout* layout = new QVBoxLayout();
//    layout->addWidget(b1);
//    layout->addWidget(b2);
//    layout->addWidget(b3);
//    this->setLayout(layout);QPushButton* b1 = new QPushButton("按钮1");QPushButton* b2 = new QPushButton("按钮2");QPushButton* b3 = new QPushButton("按钮3");//创建一个v布局管理器QHBoxLayout* layout = new QHBoxLayout();//将按钮添加到布局管理器中layout->addWidget(b1);layout->addWidget(b2);layout->addWidget(b3);setLayout(layout);layout->setMargin(200);//边距layout->setSpacing(50);//内部控件见的距离
}Widget::~Widget()
{delete ui;
}

实操2 🗒️

布局管理器之间,也能嵌套布局管理器(如下图:垂直布局内部嵌套水平布局):
在这里插入图片描述

  1. 创建垂直布局管理器 QVBoxLayout对象
  2. 设置到窗口里面:setLayout
  3. 添加两个按钮进去addWidget
  4. 创建一个水平的布局管理
    1. 也添加两个按钮进去
  5. 把水平布局管理器添加到垂直布局管理器内部(addLayout)
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//    //创建三个按钮
//    QPushButton* b1 = new QPushButton("按钮1");
//    QPushButton* b2 = new QPushButton("按钮2");
//    QPushButton* b3 = new QPushButton("按钮3");QVBoxLayout* vLayout = new QVBoxLayout();this->setLayout(vLayout);QPushButton* b1 = new QPushButton("按钮1");QPushButton* b2 = new QPushButton("按钮2");//创建一个v布局管理器QHBoxLayout* hLayout = new QHBoxLayout();//将按钮添加到布局管理器中hLayout->addWidget(b1);hLayout->addWidget(b2);QPushButton* b4 = new QPushButton("按钮4");QPushButton* b5 = new QPushButton("按钮5");vLayout->addWidget(b4);vLayout->addWidget(b5);vLayout->addLayout(hLayout);
}Widget::~Widget()
{delete ui;
}

在这里插入图片描述

🏁⽹格布局 QGridLayout

  Qt 中还提供了 QGridLayout ⽤来实现⽹格布局的效果。可以达到 M * N 的这种⽹格的效果

核⼼属性🎈

整体和 QVBoxLayout 以及 QHBoxLayout 相似. 但是设置 spacing 的时候是按照垂直⽔平两个⽅向来设置的

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上⽅边距
layoutBottomMargin下⽅边距
layoutHorizontalSpacing相邻元素之间⽔平⽅向的间距
layoutVerticalSpacing相邻元素之间垂直⽅向的间距
layoutRowStretch⾏⽅向的拉伸系数
layoutColumnStretch列⽅向的拉伸系数

实操1 🗒️

  1. 创建4个按钮 按钮1/2/3/4

  2. 创建一个QGridLayout网格布局对象

  3. 添加将按钮添加进去addWidget,其中传递过程中还需要设置 行、列

  4. 将网格布局管理器设置到窗口中 setLayout

  5. 因为是行列的添加按钮的位置,所以可以随意的放到网格中

    1. 将4个按钮都放到同一行(就相当于水平布局)
      在这里插入图片描述

    2. 同理放到同一列(就相当于垂直布局)
      在这里插入图片描述

    3. 甚至也还可以斜着布局
      在这里插入图片描述

  6. 任意调整⾏列, 即可看到不同的效果但注意的是如果设置的是⼀个很⼤的值, 但是这个值和上⼀个值之间并没有其他的元素那么并不会在中间腾出额外的空间

  7. 此处设置的行数和列数,只是用来决定控件之间的相对位置,谁先谁后

#include "widget.h"
#include "ui_widget.h"
#include <QGridLayout>
#include <QPushButton>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建GridLayout布局管理器QGridLayout* grid = new QGridLayout();//创建4按按钮QPushButton* b1 = new QPushButton("按钮1");QPushButton* b2 = new QPushButton("按钮2");QPushButton* b3 = new QPushButton("按钮3");QPushButton* b4 = new QPushButton("按钮4");//水平布局
//    grid->addWidget(b1,0,0);
//    grid->addWidget(b2,0,1);
//    grid->addWidget(b3,0,2);
//    grid->addWidget(b4,0,3);//    //垂直布局
//    grid->addWidget(b1,0,0);
//    grid->addWidget(b2,1,0);
//    grid->addWidget(b3,2,0);
//    grid->addWidget(b4,3,0);//斜着布局grid->addWidget(b1,0,0);grid->addWidget(b2,1,1);grid->addWidget(b3,2,2);grid->addWidget(b4,3,300);setLayout(grid);
}Widget::~Widget()
{delete ui;
}

了解下拉伸系数🍜:

  1. 刚刚创建的布局管理器,里面控件的尺寸都是均等的
  2. 当需要创建出尺寸不同的是,就可以设置拉伸系数
  3. 拉伸系数就相当于设置控件之间尺寸的比例

实操:

在这里插入图片描述

  1. 创建 6个 按钮1 ~ 6,使用网格布局 2 * 3 的方式排列(ui拖拽)
    在设置水平拉伸系数
  2. setColumnStretch:按照1:1:2的比例进行放置
    在这里插入图片描述

当拉伸系数设为设为0,就不参与拉伸,那么按钮的大小就是固定值

设置垂直⛰️拉伸系数的问题

当我们设置垂直拉伸系数,发现其实并没有效果
这是因为QSizePolicy的限制(默认是Ignored的):

  1. QSizePolicy::Ignored : 忽略控件的尺⼨,不对布局产⽣影响
  2. QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值,布局时不会超过该值。
  3. QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值,布局时不会⼩于该值。
  4. QSizePolicy::Preferred : 控件的理想尺⼨为固定值,布局时会尽量接近该值。
  5. QSizePolicy::Expanding : 控件的尺⼨可以根据空间调整,尽可能占据更多空间。
  6. QSizePolicy::Shrinking : 控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间
  1. 所以按钮设置 setSizePolicy 的尺⼨策略为 QSizePolicy::Expanding,让其可以拉伸展开(需要同时设置垂直和水平)

这样就能完成垂直的策略

//将三列中比例为 1:1:3ui->gridLayout->setColumnStretch(0,1);ui->gridLayout->setColumnStretch(1,1);ui->gridLayout->setColumnStretch(2,3);//将行的比例为 1:3ui->gridLayout->setRowStretch(0,1);ui->gridLayout->setRowStretch(1,3);//设置策略ui->pushButton->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//将行列的延展设置为自动扩展ui->pushButton_2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//将行列的延展设置为自动扩展ui->pushButton_3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//将行列的延展设置为自动扩展ui->pushButton_4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//将行列的延展设置为自动扩展ui->pushButton_5->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//将行列的延展设置为自动扩展ui->pushButton_6->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//将行列的延展设置为自动扩展

在这里插入图片描述

表⌚单布局 QFormLayout

类似一种填表,填调查问卷的样式,一般是 N 行 2 列

直接上实操:

  1. 设置3行2列的表单,并设置到窗口中
  2. 创建3个label,并作为第一列
  3. 创建3个输入框作为第二列
  4. 将上述控件添加到表单中addRow(Column1,Column2,...)(添加到行中)
  5. 创建一个提交按钮,并同样放到表单中
    在这里插入图片描述
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QLineEdit>
#include <QFormLayout>
#include <QLabel>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建 layoutQFormLayout* layout = new QFormLayout();this->setLayout(layout);// 创建三个 labelQLabel* label1 = new QLabel("姓名");QLabel* label2 = new QLabel("年龄");QLabel* label3 = new QLabel("电话");// 创建三个 lineEditQLineEdit* lineEdit1 = new QLineEdit();QLineEdit* lineEdit2 = new QLineEdit();QLineEdit* lineEdit3 = new QLineEdit();// 创建⼀个提交按钮QPushButton* btn = new QPushButton("提交");// 把上述元素添加到 layout 中layout->addRow(label1, lineEdit1);layout->addRow(label2, lineEdit2);layout->addRow(label3, lineEdit3);layout->addRow(NULL, btn);
}Widget::~Widget()
{delete ui;
}

Spacer 空⽩🐏

使⽤布局管理器的时候, 可能需要在控件之间, 添加⼀段空⽩

  • 就可以使⽤ QSpacerItem 来表⽰,通过添加这个控件来达到空白的效果

核⼼属性🎈:

属性说明
width宽度
height⾼度
hData⽔平⽅向的 sizePolicy
• QSizePolicy::Ignored : 忽略控件的尺⼨,不对布局产⽣影响。
• QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值,布局时不会超过该值。
• QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值,布局时不会⼩于该值。
• QSizePolicy::Preferred : 控件的理想尺⼨为固定值,布局时会尽量接近该值。
• QSizePolicy::Expanding : 控件的尺⼨可以根据空间调整,尽可能占据更多空间。
• QSizePolicy::Shrinking : 控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间。
vData垂直⽅向的 sizePolicy 选项同上

实操 让两个按钮中间有一定的空白

  1. 创建QHBoxLayout,并设置到创建中
  2. 创建两个按钮,并添加到水平布局中
    默认情况如下: 在这里插入图片描述
  3. 图按钮中间并没有空隙,现在想要让他空开一点:
    1. 就可以使用 spacer 使两个按钮之间存在空白
    2. 通过 addSpacerItem进行添加 spacer 控件
  4. QSpacerItem构造的的时候设置宽高
  5. 通过添加空间的顺序确定spacer的位置
    在这里插入图片描述
    若放到前面则:
    在这里插入图片描述

当然在ui文件中也是有的:
在这里插入图片描述

小总结🪢:

前面的每个控件本质都是可扩展的,每个控件都是Qt内置的一个类,咱们在代码中都可以基于这个类,继承出自定义的子类,在这个自定义的子类中,又可以添加许多的属性和方法,实现自己的需求场景,还可以在子类中,把多个控价组合到一起


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量C++ Qt细致内容,早关注不迷路。

相关文章:

【C++ Qt】布局管理器

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” &#x1f914;绪论​&#xff1a; 在Qt开发中&#xff0c;界面布局的合理设计是提升用户体验的关键。早期&#xff0c;开发者常采用绝对定位的方式摆放控件&#xff0c;即通…...

Windows系统永久暂停更新操作步骤

目录 Windows系统永久暂停更新操作步骤 打开运行窗口进入注册表编辑器 导航路径图示 新建并配置DWORD值 新建值操作图示数值设置图示 在系统设置中应用暂停 暂停选项图示 注意事项 打开运行窗口 按下键盘上的 Win键 R 组合键&#xff0c;调出“运行”对话框。 进入组策略编…...

Java IO流进阶实战详解(含文件读写、拷贝、加密、字符集)

本文基于 Java 原生 IO 流&#xff0c;从最基础的字节流到字符流&#xff0c;再到实战案例&#xff08;如文件夹拷贝、文件加密等&#xff09;进行逐步深入讲解。适合有一定 Java 基础、希望掌握文件读写操作的。 一、前言 Java IO&#xff08;输入输出&#xff09;是我们日常…...

JavaScript【7】BOM模型

1.概述&#xff1a; BOM&#xff08;Browser Object Model&#xff0c;浏览器对象模型&#xff09;是 JavaScript 中的一个重要概念&#xff0c;它提供了一系列对象来访问和操作浏览器的功能和信息。与 DOM&#xff08;Document Object Model&#xff09;主要关注文档结构不同&…...

STM32F10xx 参考手册

6. 什么是寄存器 本章参考资料&#xff1a;《STM32F10xx 参考手册》、《STM32F10xx数据手册》、 学习本章时&#xff0c;配合《STM32F10xx 参考手册》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。…...

使用instance着色

本节我们学习使用instance着色器进行着色 //拾取var handler new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);handler.setInputAction(function(movement){console.log(movement);var pickedObject viewer.scene.pick(movement.position);if(Cesium.defined(picke…...

MySQL——4、表的约束

表的约束 1、空属性2、默认值3、列描述4、zerofill5、主键6、自增长7、唯一键8、外键9、综合案例 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性…...

Datawhale PyPOTS时间序列5月第3次笔记

下游任务的两阶段(two-stage) 处理 下载数据并预处理的程序&#xff1a; # ------------------------------- # 导入必要的库 # ------------------------------- import numpy as np import torch from benchpots.datasets import preprocess_physionet2012 from pypots.imp…...

初探Reforcement Learning强化学习【QLearning/Sarsa/DQN】

文章目录 一、Q-learning现实理解&#xff1a;举例&#xff1a;回顾&#xff1a; 二、Sarsa和Q-learning的区别 三、Deep Q-NetworkDeep Q-Network是如何工作的&#xff1f;前处理&#xff1a;Convolution NetworksExperience Replay 一、Q-learning 是RL中model-free、value-…...

计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 12.曲面细分

1. 曲面细分 曲面细分着色器&#xff08;Tessellation Shader&#xff09;是OpenGL 4.0及以上版本引入的一种可编程着色器阶段&#xff0c;用于在GPU上对几何体进行细分&#xff0c;将粗糙的多边形网格自动细分为更平滑、更精细的曲面。它主要用于实现高质量的曲面渲染&#x…...

8天Python从入门到精通【itheima】-14~16

目录 第二章学习内容总体预览&#xff1a; 14节-字面量&#xff1a; 1.学习目标&#xff1a;​编辑 2.Python中6大常用数据类型&#xff1a; 3.实现&#xff1a;整数、浮点数、字符串类型的数据输出 4.字面量的定义&#xff1a; 5.小节总结 15节-注释&#xff1a; 1.le…...

Spring Boot 项目的计算机专业论文参考文献

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

linux线程基础

1. 什么是线程 进程是承担系统资源分配的基本实体&#xff0c;而线程&#xff08;Thread&#xff09;是进程内的一个执行单元&#xff0c;是CPU调度的基本单位。一个进程可以包含多个线程&#xff0c;这些线程共享进程的地址空间和资源&#xff08;如文件描述符、全局变量等&a…...

进阶-数据结构部分:3、常用查找算法

飞书文档https://x509p6c8to.feishu.cn/wiki/LRdnwfhNgihKeXka7DfcGuRPnZt 顺序查找 查找算法是指&#xff1a;从一些数据之中&#xff0c;找到一个特殊的数据的实现方法。查找算法与遍历有极高的相似性&#xff0c;唯一的不同就是查找算法可能并不一定会将每一个数据都进行访…...

JavaScript 中的 for...in 和 for...of 循环详解

在 JavaScript 中&#xff0c;for...in 和 for...of 是两种常用的循环结构&#xff0c;但它们有着不同的用途和行为。很多初学者容易混淆这两者&#xff0c;本文将详细解析它们的区别、适用场景以及注意事项。 目录 for…in 循环 基本用法遍历对象属性注意事项 for…of 循环 …...

【汇总】影视仓接口地址,影视仓最新配置接口【2025.5】

&#x1f4e6; TVBOX接口分类与制作加载指南 结合参考资料&#xff0c;整理TVBOX接口的核心分类、制作方法及加载技巧&#xff0c;助你快速上手&#xff01; &#x1f310; 一、接口分类 &#x1f30d; 网络接口&#xff08;远程URL&#xff09; 特点&#xff1a;动态加载在线J…...

vue引用cesium,解决“Not allowed to load local resource”报错

vue引用cesium&#xff0c;解决“Not allowed to load local resource”报错TOC 工具 vscode node &#xff1a;v22.14.0npm &#xff1a;10.9.2vue&#xff1a;vue/cli 5.0.8 一、创建一个 Vue 3 项目 1.创建名为cesium_test的项目&#xff1a; vue create cesium_test2.…...

阿里云服务器跑模型教程

首先打开阿里云官网点击免费试用 选择250工时/月的免费仨月新人试用套餐 点击右上角主账号 选择人工智能平台PAI 然后选择交互式建模(DSW) 选择新建实例 起个名字 然后点击确定 点击打开 进入到命令行工具 下载MINIConda和对应的pytorch还有相关依赖库文件即可 然后上传…...

JavaScript入门【2】语法基础

1.JavaScript的引⼊⽅式(使用): 1.方式1:行内引用: 此种方式是将<font style"color:rgb(38,38,38);">JavaScript代码作为HTML标签的属性值使⽤,示例如下:</font><html lang"en"> <head><meta charset"UTF-8"><…...

调用DeepSeek系列模型问答时,输出只有</think>标签,而没有<think>标签

问题&#xff1a;调用DeepSeek系列模型问答时&#xff0c;输出结果缺少只有标签&#xff0c;而没有标签&#xff1f; DeepSeek官方有关说明 这里设置成这样是为了保证让模型的生成是以"<think>\n"开头的&#xff0c;然后开始思考过程&#xff0c;避免模型没…...

python:gimp 与 blender 两个软件如何协作?

GIMP&#xff08;GNU Image Manipulation Program&#xff09;和 Blender 是两个不同领域的开源工具&#xff0c;但它们在数字创作流程中常协同使用&#xff0c;以下是它们的主要联系和互补性&#xff1a; 1. 功能互补&#xff1a;2D 与 3D 的结合 GIMP 是专业的 2D 图像处理工…...

MMDetection环境安装配置

MMDetection 支持在 Linux&#xff0c;Windows 和 macOS 上运行。它需要 Python 3.7 以上&#xff0c;CUDA 9.2 以上和 PyTorch 1.8 及其以上。 MMDetection 至今也一直更新很多个版本了&#xff0c;但是对于最新的pytorch版本仍然不支持&#xff0c;我安装的时候仍然多次遇到m…...

【springboot+vue3的前后端分离项目实现支付宝的沙箱支付】

【springbootvue3的前后端分离项目实现支付宝的沙箱支付】 以下是基于SpringBoot Vue前后端分离项目实现支付宝沙箱支付的完整解决方案&#xff0c;包含关键代码和调试技巧 一、项目架构设计 二、后端实现&#xff08;SpringBoot&#xff09; 1. 添加依赖 <!-- pom.xml…...

基于Llama3的开发应用(二):大语言模型的工业部署

大语言模型的工业部署 0 前言1 ollama部署大模型1.1 ollama简介1.2 ollama的安装1.3 启动ollama服务1.4 下载模型1.5 通过API调用模型 2 vllm部署大模型2.1 vllm简介2.2 vllm的安装2.3 启动vllm模型服务2.4 API调用 3 LMDeploy部署大模型3.1 LMDeploy简介3.2 LMDeploy的安装3.3…...

MySQL只操作同一条记录也会死锁吗?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL只操作同一条记录也会死锁吗?】面试题。希望对大家有帮助&#xff1b; MySQL里where条件的顺序影响索引使用吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;死锁通常发生在多…...

Linux的静态库 共享库 进程 主函数的参数

1、库文件 库文件 库是一组预先编译好的方法的集合&#xff1b; Linux系统储存的位置一般在/lib和/usr/lib中 库的头文件放在/usr/include 库分类&#xff1a;静态库&#xff08;libxxx.a&#xff09;共享库&#xff08;libxxx.so&#xff09; 静态库 &#xff08;1&#…...

软件设计师考试结构型设计模式考点全解析

结构型设计模式考点全解析 一、分值占比与考察趋势分析&#xff08;75分制&#xff09; 设计模式近5年平均分值考察频率趋势分析适配器模式3-5分高频保持稳定桥接模式2-3分中频略有上升组合模式4-6分高频持续重点装饰器模式3-4分高频稳定考察代理模式5-7分高频逐年增加外观模…...

Java-Objects类高效应用的全面指南

Java_Objects类高效应用的全面指南 前言一、Objects 类概述二、Objects 类的核心方法解析2.1 requireNonNull系列方法&#xff1a;空指针检查的利器2.2 equals方法&#xff1a;安全的对象比较2.3 hashCode方法&#xff1a;统一的哈希值生成2.4 toString方法&#xff1a;灵活的对…...

PostGIS实现栅格数据入库-raster2pgsql

raster2pgsql使用与最佳实践 一、工具概述 raster2pgsql是PostGIS提供的命令行工具,用于将GDAL支持的栅格格式(如GeoTIFF、JPEG、PNG等)导入PostgreSQL数据库,支持批量加载、分块切片、创建空间索引及金字塔概览,是栅格数据入库的核心工具。 二、核心功能与典型用法 1…...

专题四:综合练习(组合问题的决策树与回溯算法)

以leetode77题为例 题目分析&#xff1a; 给一个数字n&#xff0c;你可以在1到n中选k个数字进行组合&#xff0c;注意包括1和n&#xff0c;而且通过观察实例 1&#xff0c;2和2&#xff0c;1是一样的&#xff0c;所以我们画决策树的时候&#xff0c;只需要从当前位置往后列举…...

从神经架构到万物自动化的 AI 革命:解码深度学习驱动的智能自动化新范式

目录 一、深度学习与 AI 自动化概述 二、深度学习核心技术解析 2.1 常见深度学习架构 2.2 关键算法 三、AI 自动化实践案例 3.1 图像分类自动化 3.2 自然语言处理自动化 —— 文本情感分析 ​编辑 五、自动化系统设计与实现 5.1 端到端自动化框架 5.2 自动化测试框架…...

3.5/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Burden, trends, projections, and spatial patterns of lip and oral cavity cancer in Iran: a time-series analysis from 1990 to 2040 DOI&#xff1a;10.1186/s12889-025-22202-8 中文标题&#xff1a;伊朗唇癌和口腔癌的负担、趋势、预测和空间模式…...

智慧校园(含实验室)智能化专项汇报方案

该方案聚焦智慧校园(含实验室)智能化建设,针对传统实验室在运营监管、环境监测、安全管控、排课考勤等方面的问题,依据《智慧校园总体框架》等标准,设计数字孪生平台、实验室综合管理平台、消安电一体化平台三大核心平台,涵盖通信、安防、建筑设备管理等设施,涉及 395 个…...

玩转 AI · 思考过程可视化

玩转 AI 思考过程可视化 我们在开发 AI 的思维链 / 处理流时&#xff0c;难免遇到耗时较长的流程&#xff0c;如果遇到处理过慢的&#xff0c;用户什么也看不到可能丧失使用兴趣&#xff0c;对于这种情况&#xff0c;一个巧妙的产品思维就是呈现处理进度。 示例 其实完成这个页…...

hysAnalyser 从MPEG-TS导出ES功能说明

摘要 hysAnalyser 是一款特色的 MPEG-TS 数据分析工具。本文主要介绍了 hysAnalyser 从MPEG-TS 中导出选定的 ES 或 PES 功能(版本v1.0.003)&#xff0c;以便用户知悉和掌握这些功能&#xff0c;帮助分析和解决各种遇到ES或PES相关的实际问题。hysAnalyser 支持主流的MP1/MP2/…...

[YOLO模型](4)YOLO V3的介绍

文章目录 YOLO V3一、模型思想二、模型性能三、改进的地方1. 三种scale2. scale变换经典方法3. 残差连接4. 核心网络架构(1) 结构(2) 输出与先验框关系 5. Logistic分类器替代Softmax 四、总结 YOLO V3 一、模型思想 作者 Redmon 又在 YOLOv2 的基础上做了一些改进&#xff1a…...

期望是什么:(无数次的均值,结合概率)21/6=3.5

https://seeing-theory.brown.edu/basic-probability/cn.html 期望是什么:(无数次的均值,结合概率)21/6=3.5 一、期望(数学概念) 在概率论和统计学中,**期望(Expectation)**是一个核心概念,用于描述随机变量的长期平均取值,反映随机变量取值的集中趋势。 (一…...

Stacking(堆叠):集成学习中的“超级英雄团队”

在机器学习的世界里&#xff0c;如果要找一个类似漫威“复仇者联盟”的存在&#xff0c;那么**Stacking&#xff08;堆叠&#xff09;**无疑是最佳候选人。就像钢铁侠、美国队长和雷神各自拥有独特的能力&#xff0c;但只有当他们组队时才能发挥出惊人的战斗力&#xff0c;Stac…...

手写tomcat:基本功能实现(3)

TomcatRoute类 TomcatRoute类是Servlet容器&#xff0c;是Tomcat中最核心的部分&#xff0c;其本身是一个HashMap&#xff0c;其功能为&#xff1a;将路径和对象写入Servlet容器中。 package com.qcby.config;import com.qcby.Util.SearchClassUtil; import com.qcby.servlet…...

nt!MiRemovePageByColor函数分析之脱链和刷新颜色表

第0部分&#xff1a;背景 PFN_NUMBER FASTCALL MiRemoveZeroPage ( IN ULONG Color ) { ASSERT (Color < MmSecondaryColors); Page FreePagesByColor[Color].Flink; if (Page ! MM_EMPTY_LIST) { // // Remove the first entry on the zeroe…...

时间筛掉了不够坚定的东西

2025年5月17日&#xff0c;16~25℃&#xff0c;还好 待办&#xff1a; 《高等数学1》重修考试 《高等数学2》备课 《物理[2]》备课 《高等数学2》取消考试资格学生名单 《物理[2]》取消考试资格名单 职称申报材料 2024年税务申报 5月24日、25日监考报名 遇见&#xff1a;敲了一…...

3D个人简历网站 4.小岛

1.模型素材 在Sketchfab上下载狐狸岛模型&#xff0c;然后转换为素材资源asset&#xff0c;嫌麻烦直接在网盘链接下载素材&#xff0c; Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克网盘&a…...

第十一课 蜗牛爬树

上次作业 同学们课后可以尝试找一下30以内&#xff0c;哪个整数有最多的因数呢&#xff1f; 这个整数有多少个因数呢&#xff1f; 最好使用程序来进行判断哦 int main() {int max_num 1; // 记录因数最多的数int max_count 1; // 记录最大因数个数for (int num 2; num <…...

字体样式集合

根据您提供的字体样式列表&#xff0c;以下是分类整理后的完整字体样式名称&#xff08;不含数量统计&#xff09;&#xff1a; 基础样式 • Regular • Normal • Plain • Medium • Bold • Black • Light • Thin • Heavy • Ultra • Extra • Semi • Hai…...

Spring MVC 如何处理文件上传? 需要哪些配置和依赖?如何在 Controller 中接收上传的文件 (MultipartFile)?

Spring MVC 处理文件上传主要依赖于 MultipartResolver 接口及其实现。最常用的实现是 CommonsMultipartResolver&#xff08;基于 Apache Commons FileUpload&#xff09;和 StandardServletMultipartResolver&#xff08;基于 Servlet 3.0 API&#xff09;。 以下是如何配置…...

探索C++对象模型:(拷贝构造、运算符重载)成员函数的深度解读(中篇)

前引&#xff1a;在C的面向对象编程中&#xff0c;对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据&#xff0c;还是资源管理如何自动化&#xff0c;其底层机制均围绕两个关键概念展开&#xff1a;拷贝复制、取地址重载成员函数。它们如同对象的“隐形守护者”&…...

[逆向工程]C++实现DLL注入:原理、实现与防御全解析(二十五)

[逆向工程]C实现DLL注入&#xff1a;原理、实现与防御全解析&#xff08;二十五&#xff09; 引言 DLL注入&#xff08;DLL Injection&#xff09;是Windows系统下实现进程间通信、功能扩展、监控调试的核心技术之一。本文将从原理分析、代码实现、实战调试到防御方案&#x…...

gcc/g++常用参数

1.介绍 gcc用于编译c语言&#xff0c;g用于编译c 源代码生成可执行文件过程&#xff0c;预处理-编译-汇编-链接。https://zhuanlan.zhihu.com/p/476697014 2.常用参数说明 2.1编译过程控制 参数作用-oOutput&#xff0c;指定输出名字-cCompile&#xff0c;编译源文件生成对…...

51单片机课设基于GM65模块的二维码加条形码识别

系统组成 主控单元&#xff1a;51单片机&#xff08;如STC89C52&#xff09;作为核心控制器&#xff0c;协调各模块工作。 扫描模块&#xff1a;GM65条码扫描头&#xff0c;支持二维码/条形码识别&#xff0c;通过串口&#xff08;UART&#xff09;与单片机通信。 显示模块&a…...

物联网赋能7×24H无人值守共享自习室系统设计与实践!

随着"全民学习"浪潮的兴起&#xff0c;共享自习室市场也欣欣向荣&#xff0c;今天就带大家了解下在物联网的加持下&#xff0c;无人共享自习室系统的设计与实际方法。 一、物联网系统整体架构 1.1 系统分层设计 层级技术组成核心功能用户端微信小程序/H5预约选座、…...