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

【QT】 布局器

参考博客:https://blog.csdn.net/Fdog_/article/details/107522283

目录

  • 布局管理器概念
  • 常见的布局管理器及特点
    • 🔵`QHBoxLayout`水平布局
    • 🔵`QVBoxLayout`垂直布局
    • 🔵`QGridLayout`网格布局
    • 🔵`QFormLayout`表单布局
  • QT 高级布局器
    • 🔵`QStackedLayout`堆叠布局
    • 🔵`QDockWidget`停靠布局
    • 🔵分裂器(QSplitter)
    • 🔵`Spacers`(空间间隔器/弹簧)
  • 布局常用方法总结
    • 🔵设置控件比例
    • 🔵设置控件大小策略

布局管理器概念

布局是一种优雅而灵活的方式,可以在其容器中自动排列子小部件。每个小部件通过 sizeHint 和 sizePolicy 属性向布局报告其大小要求,布局相应地分配可用空间。

Qt 共提供了 5 种布局管理器,每种布局管理器对应一个,分别是 QHBoxLayout(水平布局)、QVBoxLayout(垂直布局)、QGridLayout(网格布局)、QFormLayout(表单布局)和 QStackedLayout(分组布局),这些类直接或间接都是由QLayout派生过来的,关系如下

布局管理器不是界面组件,而是界面组件的定位策略。它们也相当于是一个容器,可以将任意容器类型的组件或者布局放在布局管理器中。

常见的布局管理器及特点

布局类名特点
水平布局QHBoxLayout水平方向排列控件
垂直布局QVBoxLayout垂直方向排列控件
网格布局QGridLayout类似 Excel,使用行列管理控件
表单布局QFormLayout左侧是标签,右侧是输入框,适用于表单界面
自由布局QStackedLayout叠放多个控件,每次只显示一个
绝对布局setGeometry()手动设置控件的绝对位置(不推荐)

特点

1️⃣只要使用了布局管理器,控件的大小位置不能再修改,
如果要调整控件大小通过策略, 最大值,最小值调整,添加辅助控件。

2️⃣布局管理器除了可以组件进行布局以外,还有一个重要的用途,就是
使得组件随着窗口的大小变化而变化。

3️⃣分裂器水平布局和分裂器垂直布局,跟水平布局和垂直布局最大的区别:使用分裂器进行布局时,组件随分裂器可以改变大小

布局有关的选项及对应关系


🔵QHBoxLayout水平布局

  • 控件从左到右排列。
  • 窗口变大时,控件会自动扩展
QPushButton *btn1 = new QPushButton("按钮 1");
QPushButton *btn2 = new QPushButton("按钮 2");QHBoxLayout *layout = new QHBoxLayout;  // 水平布局
layout->addWidget(btn1);//按钮添加到布局管理器中
layout->addWidget(btn2);w.setLayout(layout);//设置当前界面(widget)的布局管理器
w.show();

UI Designer 拖拽生成


🔵QVBoxLayout垂直布局

所有控件 从上到下排列,适用于 侧边栏、按钮组等

QVBoxLayout *layout = new QVBoxLayout;  // 垂直布局
layout->addWidget(new QPushButton("按钮 1"));
layout->addWidget(new QPushButton("按钮 2"));
layout->addWidget(new QPushButton("按钮 3"));QWidget *window = new QWidget;
window->setLayout(layout);
window->show();

UI Designer 拖拽生成


🔵QGridLayout网格布局

将控件放置到网格中布局,它本身会从父窗口或父布局中占据尽可能多的界面空间,然后把自己的空间划分为行和列,再把每个控件塞到设置好的一个或多个单元格中。通常情况下
QGridLayout不需要自己添加空白条
QSpacerItem,因为其他功能控件把各自的单元格占据之后,剩下没控件占据的单元格自然就是空的,空的格子默认里面什么都没有,也没有空白条。

QGridLayout *layout = new QGridLayout();
layout->addWidget(new QPushButton("按钮 1"), 0, 0); // (行, 列)
layout->addWidget(new QPushButton("按钮 2"), 0, 1);
layout->addWidget(new QPushButton("按钮 3"), 1, 0);
layout->addWidget(new QPushButton("按钮 4"), 1, 1);window.setLayout(layout);

UI Designer 拖拽生成

此种布局方式无法随着窗口大小而动态改变大小,给窗口设置网格布局即可。


🔵QFormLayout表单布局

常用于 登录界面、设置窗口,左侧是标签,右侧是输入框。

QFormLayout *layout = new QFormLayout;
layout->addRow("姓名:", new QLineEdit);
layout->addRow("密码:", new QLineEdit);
layout->addRow(new QPushButton("登录"));QWidget *window = new QWidget;
window->setLayout(layout);
window->show();

UI Designer 拖拽生成


QT 高级布局器

Qt中的高级布局管理器,包括QStackedLayout、QDockWidget和QSplitter,接下来我们一个·一个学习。

🔵QStackedLayout堆叠布局

  • QStackedLayout 是一种布局管理器,它允许在同一区域显示多个 QWidget,并在它们之间进行切换。在 QStackedLayout
    中,只有一个 QWidget 可见,其他 QWidget 被隐藏。可以使用setCurrentIndex()setCurrentWidget() 函数在 QWidget 之间进行切换。
  • 通过索引或控件指针切换页面
  • 适用于向导界面(Wizard)、选项卡界面(Tab)、动画切换界面
#include <QApplication>
#include <QStackedLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget w;w.setWindowTitle("QStackedLayout测试");QStackedLayout slay;QVBoxLayout vlay(&w);QPushButton *bt = new QPushButton("切换");vlay.addWidget(bt);vlay.addLayout(&slay);slay.addWidget(new QLabel("第一个窗口"));slay.addWidget(new QLabel("第二个窗口"));slay.addWidget(new QLabel("第三个窗口"));slay.addWidget(new QLabel("第四个窗口"));QObject::connect(bt, &QPushButton::clicked, [&]()->void{int curr = slay.currentIndex();curr++;if(curr>=slay.count()) curr=0;slay.setCurrentIndex(curr);});w.show();return a.exec();
}

UI Designer 拖拽生成

  • 对象树(Object Inspector) → 右键 QStackedWidget添加/删除/切换页面
  • 属性编辑器(Property Editor) → 设置 currentIndex 来改变默认页面。
  • 信号和槽(Signals & Slots) → 让 按钮控制 QStackedWidget 页面切换

🔵QDockWidget停靠布局

QDockWidget 是 Qt 提供的一种 可停靠(Dockable)窗口组件,它可以作为 主窗口(QMainWindow)的子窗口,可以拖动、停靠到不同的区域,甚至可以浮动到外部窗口。QDockWidget由一个标题栏和一个可停靠的QWidget组成,标题栏包括一个关闭按钮和一个可停靠按钮。

#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QTextEdit>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow mainWindow;mainWindow.setWindowTitle("QDockWidget 示例");// 创建中心部件(必须设置,否则主窗口无法停靠)QTextEdit *textEdit = new QTextEdit(&mainWindow);mainWindow.setCentralWidget(textEdit);// 创建可停靠窗口QDockWidget *dockWidget = new QDockWidget("停靠窗口", &mainWindow);dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);// 停靠窗口内放置控件QTextEdit *dockTextEdit = new QTextEdit();dockWidget->setWidget(dockTextEdit);// 将 QDockWidget 添加到主窗口mainWindow.addDockWidget(Qt::LeftDockWidgetArea, dockWidget);mainWindow.resize(800, 600);mainWindow.show();return app.exec();
}

UI Designer 拖拽生成

  • 右侧可以查看 Dock Widge 可以设置的属性,在代码中实现也是相同的名字,只需 setXXX 即可

🔵分裂器(QSplitter)

QSplitter(分裂器)Qt 提供的一种特殊布局管理方式,它允许用户通过 拖动分隔条
动态调整控件大小。它与 QHBoxLayout(水平布局)QVBoxLayout(垂直布局)
主要区别在于:

  • 普通布局(QHBoxLayout/QVBoxLayout): 控件的大小通常是
    自动分配的,不能手动调整大小。
  • 分裂器布局(QSplitter):
    控件可以通过 拖动分隔条
    手动调整大小,提供更灵活的 UI 体验。
  • 可以通过setStretchFactor()函数来设置子控件的拉伸系数,从而实现动态调整布局。

使用属性中的handleWidth可调节组件之间的间距。
属性中的opaqueResize默认情况下(打勾),使用鼠标拖动分割子窗口间的边界时,子窗口会动态的改变其大小。然而,如果希望在松开鼠标时才改变其大小,可以设置下面的参数,取消其勾选状态即可


🔵Spacers(空间间隔器/弹簧)

QSpacerItem 主要用于 在控件之间创建“空白空间”,可以:

  1. 推挤控件,让它们靠左、靠右、居中或对齐底部。
  2. 填充空白区域,保持界面美观。
  3. 在窗口大小调整时,动态改变大小,以适应不同的屏幕尺寸。


布局常用方法总结

🔵设置控件比例

像Vertical Layouts(垂直布局),Horizontal Layouts(水平布局),Grid Layouts(网络布局),Form Layouts(窗体布局)可以在这个地方设置控件之间的比例


🔵设置控件大小策略

代码中实现如下

btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

相关文章:

【QT】 布局器

参考博客&#xff1a;https://blog.csdn.net/Fdog_/article/details/107522283 目录 布局管理器概念常见的布局管理器及特点&#x1f535;QHBoxLayout水平布局&#x1f535;QVBoxLayout垂直布局 &#x1f535;QGridLayout网格布局 &#x1f535;QFormLayout表单布局 QT 高级布…...

力扣45.跳跃游戏

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<vector> class Solution {public:int jump(vector<int>& nums) {int ans[10005] ;memset(ans,1e4,sizeof(ans));ans[0]0;for(int i0;i<nums.size();i){for(int j1;j…...

【蓝桥杯】真题 路径(数论+dp)

思路 求最小公倍数LCM问题很好求&#xff0c;这里看似是求图最短路径&#xff0c;实际上由于只有[i,i21]之间存在路径&#xff0c;所以用线性dp效率更高&#xff0c;当然用bfs&#xff0c;dijstra&#xff0c;floyed也可&#xff0c;毕竟是填空题。 code def gcd(a,b):if a …...

敏捷需求分析之INVEST原则

INVEST原则是什么 INVEST 是用户故事的六个核心标准,由敏捷教练 Bill Wake 提出,用于确保用户故事具备可执行性和价值导向性。 1. I - Independent(独立的) 含义:用户故事应独立于其他故事,避免依赖关系。问题:若故事 A 必须等待故事 B 完成才能开发,会导致进度阻塞。…...

Apache Flink技术原理深入解析:任务执行流程全景图

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将…...

UE5小石子阴影在非常近距离才显示的问题

Unreal中采用LandscapeGrass生成的地形&#xff0c;在MovieRenderQueue中渲染时阴影显示距离有问题&#xff0c;在很近的时候才会有影子&#xff0c;怎么解决&#xff1f; 地面上通过grass生成的小石子的阴影只能在很近的时候才能显示出来&#xff0c;需要如下调整 r.Shadow.R…...

WebAssembly实践,性能也有局限性

个人博客原文地址 WebAssembly&#xff08;简称 wasm&#xff09; 是一种旨在突破 Web 性能瓶颈的技术方案。它由 W3C 官方推动&#xff0c;并且得到了主流浏览器的广泛支持。它的核心思想是通过运行其他高性能编程语言&#xff08;比如 C、C、Rust 等&#xff09;来实现复杂功…...

第一天学爬虫

阅读提示&#xff1a;我今天才开始尝试爬虫&#xff0c;写的不好请见谅。 一、准备工具 requests库&#xff1a;发送HTTP请求并获取网页内容。BeautifulSoup库&#xff1a;解析HTML页面并提取数据。pandas库&#xff1a;保存抓取到的数据到CSV文件中。 二、爬取步骤 发送请求…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(11)

1.问题描述&#xff1a; 鸿蒙push右侧图表没有正常展示。 解决方案&#xff1a; .jpg格式文件&#xff0c;头信息必须是这个“jpg&#xff1a;ffd8”。 2.问题描述&#xff1a; 安卓端App在开发者平台申请了Android应用的通知消息自分类权益&#xff0c;鸿蒙应用的自分类权…...

Spring WebSecurityCustomizer 的作用

Spring WebSecurityCustomizer 是 Spring Security 框架中用来 自定义 Web 安全配置 的一个接口。 它的主要作用是在开发中我们能够 精细的控制哪些请求会被 Spring Security 完全忽略&#xff0c;不进行任何安全检查和过滤。 我们可以把它想象成是 Spring Security 大门上的一…...

uniapp动态循环表单校验失败:初始值校验

问题现象 💥 在实现动态增减的单价输入表单时(基于uv-form组件),遇到以下诡异现象: <uv-input>的v-model绑定初始值为数字类型时,required规则失效 ❌数字类型与字符串类型校验表现不一致 🔢技术栈背景 🛠️ 框架:Vue3 + uni-appUI库:uv-ui校验方案:计算属…...

线性代数核心概念与NumPy科学计算实战全解析

前言 学习方法&#xff1a; 思维导图&#xff0c;梳理 多记忆&#xff0c;函数名和功能&#xff0c;参数 学会应用&#xff0c;不要钻牛角尖 一、浅解线性代数 1.1标量 标量是一个只有大小没有方向的量。在数学上&#xff0c;标量通常表示为一个普通的数字&#xff0c;如‌质量…...

如何理解 Apache Iceberg 与湖仓一体(Lakehouse)?

一、什么是湖仓一体&#xff08;Lakehouse&#xff09;&#xff1f; 湖仓一体是一种融合了数据湖的灵活存储能力与数据仓库的高效分析功能的现代数据架构。它通过整合两者的优势&#xff0c;解决了传统架构的局限性&#xff0c;为企业数据处理提供了更全面的解决方案。 数据湖…...

若依框架二次开发——若依集成 JSEncrypt 实现密码加密传输方式

文章目录 一、问题场景二、相关技术介绍1. RSA 加密算法2. JSEncrypt三、实现步骤1. 前端加密处理2. 后端解密处理3. 登录逻辑处理四、测试流程1. 前端测试2. 后端测试3. 运行效果五、总结一、问题场景 在 RuoYi 系统中,默认情况下,用户在登录时会将明文密码直接传输到服务器…...

Rust Web 开发新选择:探索 Hyperlane 轻量级 HTTP 服务器框架

Rust Web 开发新选择&#xff1a;探索 Hyperlane 轻量级 HTTP 服务器框架 在 Web 开发领域&#xff0c;Rust 以其高性能和内存安全性逐渐受到关注。而在众多 Web 框架中&#xff0c;hyperlane 作为一款轻量级、高性能的 HTTP 服务器框架&#xff0c;正悄然成为 Rust 生态中的明…...

初识 模版 和 STL

前言 今天简单和大家分享一下C重要的两个内容&#xff0c;经过之前的学习我们已经了解了C的大致语法&#xff0c;接下来就是C相关的库和一些操作了&#xff0c;他们能极大地缩小我们C语言阶段的代码量&#xff0c;让写代码变得轻松起来。 1.关于模版 <1>泛型编程 我们学…...

加新题了,MySQL 8.0 OCP 认证考试 题库更新

MySQL 8.0 OCP 认证考试 题库更新 MySQL 8.0 Database Administrator 考试科目&#xff1a;1Z0-908 近期发现&#xff0c;MySQL OCP认证考试题库发生变化&#xff0c;出现了很多新题&#xff0c;对此&#xff0c;CUUG专门收集整理了最新版本的MySQL考试原题&#xff0c;并会给…...

26考研——树与二叉树_树、森林(5)

408答疑 文章目录 二、树、森林树的基本概念树的定义和特性树的定义树的特性 基本术语树的基本术语和概念祖先、子孙、双亲、孩子、兄弟和堂兄弟结点的层次、度、深度和高度树的度和高度分支结点和叶结点有序树和无序树路径和路径长度 森林的基本术语和概念森林的定义森林与树的…...

26考研——图_图的基本概念(6)

408答疑 文章目录 一、图的基本概念图的定义非空性非线性结构 顶点和边的表示顶点边 有向图 & 无向图有向图有向图 G 1 G_1 G1​ 的表示 无向图无向图 G 2 G_2 G2​ 的表示 简单图 & 多重图简单图多重图 顶点的度、入度和出度顶点的度有向图的度 路径、路径长度和回路…...

笔试面试01 c/c++

基础知识 什么是数据结构&#xff1f;请简要描述常见的数据结构类型。 数据结构是组织和存储数据的方式&#xff0c;以便于高效访问和修改。常见的数据结构包括&#xff1a; 数组&#xff1a;固定大小的线性数据结构&#xff0c;支持随机访问。 链表&#xff1a;由节点组成的线…...

2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip

一、资料列表 第一课&#xff1a;Deepseek基础入门 第二课&#xff1a;DeepSeek赋能职场 第三课&#xff1a;普通人如何抓住DeepSeek红利 第四课&#xff1a;让科研像聊天一样简单 第五课&#xff1a;DeepSeek与AI幻觉 第六课&#xff1a;基于DeepSeek的AI音乐词曲的创造法 第…...

消息队列(Kafka及RocketMQ等对比联系)

目录 消息队列 一、为什么使用消息队列&#xff1f;消息队列有什么优点/缺点&#xff1f;介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点&#xff0c;如何取舍&#xff1f; 1.公司业务场景是什么&#xff0c;这个业务场景有什么挑战&#xff0c;如果不用MQ有什么麻…...

Go 语言 fmt 模块的完整方法详解及示例

以下是 Go 语言 fmt 模块的完整方法详解及示例&#xff0c;涵盖所有核心功能&#xff1a; 一、输出函数 将数据写入标准输出、文件或字符串。 1. Print / Println / Printf 功能 Print: 写入标准输出&#xff0c;不换行。Println: 写入标准输出并换行。Printf: 格式化写入标…...

Centos 7 安装VNC服务

Centos 7 安装VNC服务 1. 安装 TigerVNC2. 设置 VNC 密码3. 创建并配置 x0vncserver 服务4. 启用并启动服务5. 检查服务状态6. 配置防火墙7. 连接 VNC问题1:出现无法安装可能是镜像源导致的。手动配置镜像源清除 YUM 缓存并重新加载 1. 安装 TigerVNC 确保已安装 TigerVNC 服务…...

3.25-3 request断言

一.request断言 if断言 案例&#xff1a; import requests srequests.Session() url1"http://49.233.201.254:8080/cms/manage/loginJump.do" data1{userAccount:admin,loginPwd:123456} h1{"Content-Type":"application/x-www-form-urlencoded&…...

cmakelist中添加opencv

版本选择 qt的msvc&#xff0c;版本2019 opencv版本 4.5.3 配置了环境变量 x64下的v14中的bin 配置头文件 {"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}","d:\\QT\\6.5.3\\msvc20…...

【003安卓开发方案调研】之ReactNative技术开发安卓

基于2025年最新行业动态和搜索资料&#xff0c;以下是针对国内使用React Native&#xff08;RN&#xff09;开发安卓应用的深度分析&#xff1a; 一、技术成熟度评估 1. 核心架构升级 新架构全面普及&#xff1a;2024年起&#xff0c;React Native的 新架构&#xff08;Fabri…...

面试中如何回答性能优化的问题

性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。 对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用…...

使用cursor开发java案例——springboot整合elasticsearch

安装elasticsearch 打开cursor&#xff0c;输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip&#xff1a;192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 &#xff0…...

CCF-CSP认证题目练习及其题解(4

【问题描述】 涛涛最近要负责图书馆的管理工作&#xff0c;需要记录下每天读者的到访情况。每位读者有一个编号&#xff0c;每条记录用读者的编号来表示。给出读者的来访记录&#xff0c;请问每一条记录中的读者是第几次出现。 【输入形式】 输入的第一行包含一个整数n&#x…...

Chrome 134 版本开发者工具(DevTools)更新内容

Chrome 134 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、隐私与安全面板 旧的 Security 面板已演变为隐私与安全面板&#xff0c;并新增了一个专注于隐私的部分。在该部分中&#xff0c;可以&#xff1a; 在 DevTools 打开时&#xff0c;临时限制第三方 Co…...

12届蓝桥杯—货物摆放

货物摆放 题目描述 小蓝有一个超大的仓库&#xff0c;可以摆放很多货物。 现在&#xff0c;小蓝有 nn 箱货物要摆放在仓库&#xff0c;每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向&#xff0c;每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…...

oracle查询归档日志使用量

1.统计最近30天的数据 SELECT TRUNC(first_time, DD) "日期", SUM(blocks * block_size) / 1024 / 1024 / 1024 "大小(GB)" FROM v$archived_log WHERE first_time > SYSDATE - 30 -- 统计最近30天的数据 GROUP BY TRUNC(first_time, DD) ORDER BY 1 D…...

Redis 发布订阅

Redis 发布订阅 概述 Redis 发布订阅(Pub/Sub)是一种消息传递模式,允许应用在多个客户端之间进行通信。在Redis中,发布订阅允许客户端订阅一个或多个频道,并在这些频道上发布消息。其他订阅了相同频道的客户端会接收到这些消息。 核心概念 频道(Channels) 频道是发…...

歌曲缓存相关功能

1. 核心组件 MusicCacheManager (音乐缓存管理器) 单例模式&#xff1a;确保全局只有一个实例&#xff0c;方便管理。 private static var instance: MusicCacheManager?static func shared() -> MusicCacheManager {if instance nil {instance MusicCacheManager()}ret…...

MySQL学习之用户管理

MySQL学习之用户管理 一、用户1、用户信息2、创建用户3、修改用户密码4、删除用户 二、数据库权限1、MySQL中的权限2、给用户授权3、回收权限 一、用户 1、用户信息 MySQL用户管理&#xff1a; ①、与Linux操作系统类似&#xff0c;MySQL中也有超级用户和普通用户之分。 ②、如…...

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程(持续更新)

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程-思路&#xff08;持续更新&#xff09; 写在前面&#xff1a; 1、A题、C题将会持续更新&#xff0c;陆续更新发布文章 2、赛题交流咨询Q群&#xff1a;1037590285 3、全家桶依旧包含&#xff1a; 代码、…...

算法训练营第二十三天 | 贪心算法(一)

文章目录 一、贪心算法理论基础二、Leetcode 455.分发饼干二、Leetcode 376. 摆动序列三、Leetcode 53. 最大子序和 一、贪心算法理论基础 贪心算法是一种在每一步选择中都采取当前状态下的最优决策&#xff0c;从而希望最终达到全局最优解的算法设计技术。 基本思想 贪心算…...

SpringCloud消息总线:Bus事件广播与配置动态刷新

文章目录 引言一、Spring Cloud Bus基本架构二、配置动态刷新实现2.1 基础配置2.2 刷新流程2.3 定向刷新 三、自定义事件广播3.1 定义自定义事件3.2 注册和监听事件3.3 发布事件 四、高级配置与优化4.1 消息持久化4.2 事件追踪4.3 安全控制 总结 引言 在微服务架构中&#xff…...

家庭网络结构之局域网通信

整个互联网非常复杂&#xff0c;涉及到很多知识&#xff0c;学习互联网不能一蹴而就&#xff0c;所以这里从最简单的家庭网络开始学习 家庭网络一般是通过Modem( 作用&#xff1a;进行数字信号和模拟信号的转换 ) 拨号上网&#xff0c;然后通过家庭路由器&#xff0c;将网络连接…...

突破反爬困境:SDK架构设计,为什么选择独立服务模式(四)

声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的&#xff0c;旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...

java 设置操作系统编码、jvm平台编码和日志文件编码都为UTF-8的操作方式

以下是 Java中设置操作系统编码、JVM平台编码和日志文件编码为UTF-8 的详细步骤和代码示例&#xff1a; 一、设置操作系统编码为UTF-8 1. Windows系统 修改系统区域设置&#xff1a; 进入 控制面板 → 时钟和区域 → 区域。在“管理”选项卡中&#xff0c;点击“更改系统区域…...

SpringBoot:几种常用的接口日期格式化方法

全局时间格式化 通过在配置文件中设置可以实现全局时间格式化。在 Spring Boot 的配置文件 application.properties&#xff08;或 application.yml&#xff09;中添加以下两行配置&#xff1a; #?格式化全局时间字段 spring.jackson.date-formatyyyy-MM-dd?HH:mm:ss #?指…...

解题思路:LeetCode 2711. 对角线上不同值的数量差

解题思路&#xff1a;LeetCode 2711. 对角线上不同值的数量差 在LeetCode的题目2711中&#xff0c;我们需要计算一个矩阵中每个单元格的左上角对角线和右下角对角线上不同值的数量差。这个问题可以通过暴力法解决&#xff0c;但效率较低。本文将介绍一种更高效的解决方案&…...

Jackson实现JSON数据的合并

JSON数据的操作&#xff0c;系列文章&#xff1a; 《Jackson的核心类与API方法&#xff1a;ObjectMapper、JsonNode、ObjectNode、ArrayNode》 《Jackson的使用与创建Jackson工具类》 《Jackson使用ObjectNode对象实现JSON对象数据&#xff08;一&#xff09;&#xff1a;增、删…...

Elasticsearch 倒排索引 和 正排索引

一、倒排索引 倒排索引是 Elasticsearch 实现高效全文搜索的核心技术。它通过将词项与文档 ID 关联&#xff0c;支持快速检索、短语查询、布尔查询和相关性评分。尽管倒排索引在存储和更新方面有一定的开销&#xff0c;但通过词典优化、倒排列表压缩、分片和缓存等技术&#x…...

Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 前面的几篇文章&#xff0c;讲述的主要是Cocos引擎对Shader使用的一些固定规则&#xff0c;这里汇总下&#xff1a; 一、Shader实现基础是OpenGL ES可编程渲染管线&#xff0c;开发者只需关注顶点着色器和…...

【Python】pillow库学习笔记1-Image类

《Python语言程序设计基础 》第3版&#xff0c;嵩天 黄天羽 杨雅婷著&#xff0c;P293 1.pillow库概述 Pillow 库是Python图像处理重要的第三方库。 Pillow库是PIL (Python image library) 库的一个扩展&#xff0c;需要通过pip工具安装。安装PIL库需要注意&#xff0c;安装…...

解决 MySQL 的 sql_mode 中包含 only_full_group_by模式导致group by SQL报错

sql 报错&#xff1a; Cause: java.sql.SQLSyntaxErrorException: Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ev_data_transmission.p.push_type which is not functionally dependent on columns in GROUP BY clause; this…...

【微服务架构】本地负载均衡的实现(基于随机算法)

前言 负载均衡 概念&#xff1a;一种将网络流量或业务请求均匀分配到多个服务器或服务实例上的技术&#xff0c;旨在提高系统的可用性、性能和可伸缩性。作用&#xff1a; 提高性能&#xff1a;通过将请求分散到多个实例上&#xff0c;避免单个实例因请求过多而过载&#xff…...