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

Qt 入门 6 之布局管理

Qt 入门 6 之布局管理

  • 对于一个完整的软件,布局管理时必不可少的。其会让界面中嗯嗯部件呈现一个整齐的排列,也可令其大小随着窗口界面的大小变换而变化
  • Qt 主要提供了QLayout 类及其子类作为布局管理器,他们可以实现常用的布局管理功能,QLayout 类及其子类的关系如下图:

在这里插入图片描述

一. 布局管理系统

  • 提供了强大的机制来自动排列窗口中的所有部件
  • 所有QWidget的子类的实例(对象)都可以使用布局管理器管理位于它们之中的子部件,QWidget::setLayout()函数可以在一个部件上应用布局管理器。
  • 一旦一个部件上设置了布局管理器,那么它会完成以下几种任务:
    - 定位子部件
    - 感知窗口默认大小
    - 感知窗口最小大小
    - 窗口大小变化时进行处理
    - 当内容改变时自动更新:
    - 字体大小、文本或子部件的其他内容随之改变
    - 隐藏或显示子部件
    - 移除一个子部件

1.1 布局管理器

  • QLayout类是布局管理器的基类,是一个抽象基类,继承自QObjectQLayou-tItem类,QLayoutltem类提供了一个供 QLayout操作的抽象项目。QLayout 和QLayoutltem都是在设计自己的布局管理器时才使用的,一般只需要使用QLayout的几个子类即可,它们分别是 QBoxLayout(基本布局管理器)、QGridlayout(栅格布局管理器)、QFormLayout(窗体布局管理器)和 QStackedlayout(栈布局管理器)

  • 下面先来看一个例子。这打开Qt Creator,新建 Qt Widgets应用,项目名称为 mylayout,基类选择 QWidget,类名设为 MyWidget
    在这里插入图片描述

  • 完成后打开mywidget.ui文件,在设计模式中向界面上拖入一个字体选择框 Font Combo Box和一个文本编辑器TextEdit部件。然后单击主界面并按下Ctrl+L快捷键,或者单击设计器上部边栏中的曰图标来对主界面进行垂直布局管理也可以在主界面上右击,在弹出的级联菜单中选择“布局一垂直布局”。这样便设置了顶层布局管理器(因为是对整个窗口设置的布局管理器,所以叫顶层布局管理器),可以看到两个部件已经填满了整个界面。这时运行程序,然后拉伸窗口,两个部件会随着窗口的大小变化而变化,如下图所示。这就是布局管理器的作用

在这里插入图片描述

1.2 基本布局管理器(QBoxLayout)

  • 基本布局管理器QBoxLayout类可以使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放人一个盒子中。它有两个子类QHBoxLayout水平布局管理器和QVBoxLayout垂直布局管理器,编程中经常用到。再回到设计模式中看看布局管理器的属性。先单击主界面,查看它的属性栏,最后面的部分是其使用的布局管理器的属性,如下表所示:
    在这里插入图片描述

  • 下面打破已有的布局,使用代码实现水平布局,在界面上右击,然后在弹出的级联菜单中选择“打破布局”,或者单击设计器上方边栏中的打破布局图标。在mywidget.cpp文件添加头文件#include<QBoxLayout>,并在MyWidget类的构造函数中添加一下代码:

  QHBoxLayout* layout =new QHBoxLayout;         //新建水平布局管理器layout->addWidget(ui->fontComboBox);          //向布局添加部件layout->addWidget(ui->textEdit);layout->setSpacing(40);                       //设置部件间的间隔layout->setContentsMargins(0,0,50,100);       //设置布局管理器到边界的距离,左、上、右、下setLayout(layout);
  • 运行结果如下:
    在这里插入图片描述

1.3 栅格布局管理器(QGridLayout)

  • 栅格布局管理器QGridLayout类使部件在网格中进行布局,它将所有的空间分隔成一些行和列,行和列的交叉处形成了单元格,然后将部件放入一个确定的单元格中先往界面上拖放一个Push Button,然后在mywidget.cpp中添加头文件#include<QGridlayout>,再注释掉前面添加的关于水平布局管理器的代码,添加的如下:
 //栅格布局QGridLayout* layout=new QGridLayout;//添加部件,从第0行0列开始,占据1行2列layout->addWidget(ui->fontComboBox,0,0,1,2);//添加部件,从第0行2列开始,占据1行1列layout->addWidget(ui->pushButton,0,2,1,1);//添加部件,从第1行0列开始,占据1行3列layout->addWidget(ui->textEdit,1,0,1,3);setLayout(layout);
  • 这里主要是设置部件在栅格布局管理器中的位置,将fontComboBox部件设置为占据1行2列,而pushButton部件占据1行1列,这主要是为了将fontComboBox部件和 pushButton部件的长度设置为2:1。这样一来,textEdit部件要想占满剩下的空间就要使它的跨度为3列。这里需要说明,当部件加人到一个布局管理器中,然后将这个布局管理器再放到一个窗口部件上时,这个布局管理器以及它包含的所有部件都会自动重新定义自己的父对象(parent)为这个窗口部件,所以在创建布局管理器和其中的部件时并不用指定父部件。此外,也可以直接在设计模式时使用前面讲过的方法来使用栅格布局管理器
    在这里插入图片描述

1.4 窗口布局管理器(QFormlayout)

  • 窗体布局管理器QFormLayout类用来管理表单的输人部件以及与它们相关的标签。窗体布局管理器将它的子部件分为两列,左边是一些标签,右边是一些输入部件比如行编辑器或者数字选择框等。其实,如果只是起到这样的布局作用,那么用QGridLayout就完全可以做到了,之所以添加QFormLayout类,是因为它有独特的功能。下面看一个例子。
  • 先将前面在MyWidget类的构造函数中自己添加的代码全部注释掉,然后进入设计模式,这里使用另外一种方法来使用布局管理器。从部件栏中找到FormLayout,将其拖入到界面上,然后双击或者在它上面右击并在弹出级联菜单中选择“添加窗体布局行”。 在弹出的“添加表单布局行”对话框中填入标签文字“姓名(&N):”,这样下面便自动填写了“标签名称”、“字段类型”和“字段名称”等,并且设置了伙伴关系。这里使用了 QLineEdit 行编辑器,当然也可以选择其他部件。填写的标签文字中的“(&.N)”必须是英语半角的括号,表明它的快捷键是At+N。设置伙伴关系表示按下At十N时,光标自动跳转到标签后面对应的行编辑器中。单击“确定”键,则会在布局管理器中添加一个标签和一个行编辑器。按照这种方法,再添加3行:性别(&S),使用QCo-moBox;年龄(&A),使用 QSpinBox;邮箱(&M),使用 QLineEdit

在这里插入图片描述

  • 上面添加表单行是在设计器中完成的,其实也可以在代码中使用addRow()函数来完成。完成后运行程序,可以按下快捷键AIt+N,这样光标就可以定位到“姓名”标签后的行编辑器中。
    在这里插入图片描述

1.5 综合使用布局管理器

  • 前边讲到了3种布局管理器,真正使用时一般是将它们综合起来应用

1.综合应用

  • 下边设置综合布局,先将 fontComboBox 和按钮 pushButton 设置书评布局,然后在窗口布局管理器(QFormLayout)和水平布局中间添加一垂直分隔符(Vertical Spacer)用于设置部件之间的间隔,并在属性栏设置其高度100,最后右键整个ui文件选择设置整个界面布局为垂直布局,如下图:
  • 运行后结果和下图效果相似,并且支持缩放、但每个控件不是等比例的

在这里插入图片描述

2. 设置部件大小

  • sizeHint 属性保存了部件的建议大小,而minimumSizeHint 保存了一个建议的最小大小提示。
    • 可以在程序中使用 sizeHint() 函数来获取 sizeHint 的值,使用 minimumSizeHint() 函数获取 minimumSizeHint 的值
    • 如果使用了setMinimumSize() 函数设置了部件的最小大小,那么最小大熊啊提示将会被忽略
  • 大小策略(sizePolicy)属性保存了部件的默认布局行为,在水平和垂直两个方向上分别起作用,控制着部件在布局管理器中的大小变化行为,sizePolicy 属性的所有取值如下表所示:

在这里插入图片描述

  • 下面再来看一下窗体布局管理器中的一些属性,如下表:
    在这里插入图片描述

  • 下面看QWidget 类及其子类部件的设置大小的相关属性:

在这里插入图片描述

  • 最后看一下布局管理器的layoutSizeConstraint 属性,它时用来约束窗口大小的:

在这里插入图片描述

3. 可扩展窗口

  • 依然在前面的程序中进行更改。首先将界面上的pushButton显示文本更改为“显示可扩展窗口”,并在其属性栏选中checkable选项。然后转到它的toggled(bool)信号的槽,更改如下:
void MyWidget::on_pushButton_toggled(bool checked)
{ui->textEdit->setVisible(checked);     //设置文本编辑器的显示和隐藏if(checked)ui->pushButton->setText("隐藏可扩展窗口");elseui->pushButton->setText("显示可扩展窗口");
}
  • 这里使用按钮的按下与否两种状态来设置文本编辑器是否显示,并且相应地更改按钮的文本。为了让文本编辑器在一开始是隐藏的,还要在MyWidget类的构造函数中添加一行代码:
 ui->textEdit->hide();
  • 运行程序结果如下:
    在这里插入图片描述

4. 分裂器(QSplitter)

  • 分裂器QSplitter类提供了一个分裂器部件。和QBoxLayout类似,可以完成布局管理器的功能,但是包含在它里面的部件,默认是可以随着分裂器的大小变化而变化的。比如一个按钮放在布局管理器中,它的垂直方向默认是不会被拉伸的,但是放到分裂器中就可以被拉伸。还有一点不同就是,布局管理器继承自QObject类,而分裂器却是继承自QFrame类,QFrame类又继承自QWidget类,也就是说,分裂器拥有QWid-get类的特性,它是可见的,而且可以像QFrame一样设置边框。
  • 新建QtWidgets应用,项目名称为mysplitter,基类选择QWidget,类名设为MyWidget。建好项目后打开mywid-get.ui文件,然后往界面上拖人4个Push Button,同时选中这4个按钮,右击并在弹出的级联菜单中选择“布局一使用分裂器水平布局”,将这4个按钮放到一个分裂器中。将分裂器拉大点,并在属性栏中设置其frameShape为Box,frameShadow为Raised,lineWidth为5。此时运行程序,效果如下图所示:

在这里插入图片描述

二. 设置伙伴(buddy)

  • 一个标签QLabel 经常用作一个交互式部件的说明,就像在将窗体布局管理器时看到的那样,一个lineEdit 部件前边有一个标签说明这个lineEdit 的作用

  • 为了方便定位,QLabel提供了一个有用的机制,那就是提供了助记符来定位键盘焦点到对应的部件上,而这个部件就叫做这个QLabel的伙伴,其中助记符就是我们所说的加速键/快捷键。使用英文标签时,在字符串的一个字符前边添加“&”符号,就可以指定这个标签的快捷键是 Alt 加上这个字母;对于中文,需要小括号中指定快捷键字母

  • 新建Qt QWidgets应用项目,命名为mybuddy,基类选QWidget。完成后打开mywidget.ui文件,往界面上拖放4个标签Label,再在标签后面依次放上PushButton、CheckBox、LineEdit 和 SpinBox。然后将PushButton前面的标签文本改为“&.Button;”,CheckBox前面的标签文本改为“C&.heckBox:”,LineEdit前面的标签文本改为“行编辑器(&L):”,SpinBox前面的标签文本改为“数字选择框(&N):”。单击设计器上方边栏中的编辑伙伴图标民进入伙伴设计模式,分别将各个标签与它们后面的部件关联起来,如图4-8所示。然后按下F3键回到正常编辑模式,可以看到所有的&符号都不显示了。
    在这里插入图片描述

  • 编译运行程序,按下Alt+B快捷键,可以直接看到按钮被按下前后的状态变化、

三、设置 Tab 顺序

  • 对于一个程序,有时总希望使用Tab 建将焦点从一个部件移动到下一个部件。在设计模式中,设计器提供了 Tab 键的设置功能
  • 在前面程序的设计模式种,按下上方边栏的编辑Tab顺序按钮进入编辑Tab键顺序模式,这时已经显示了各个部件的Tab键顺序,只要单击这个数字就可以更改顺序。
  • 设置好之后,可以运行一下程序测试效果。需要说明,当程序启动时,焦点会在Tab键顺序为1的部件上,这里进行的设置等价于在MyWidget 类的构造函数中使用如下代码:
setTabOrder(ui->lineEdit,ui->spinBox);  //lineEdit在spinBox前面
setTabOrder(ui->spinBox,ui->pushButton);   //spinBox在pushButton前面
setYabOrder(ui->pushButton,ui->checkBox);   //pushButton在checkBox前面

四、Qt Creator中的定位器

  • 定位器位于主界面的下方。使用定位器可以很方便的打开指定文件、定位到文档的指定行、打开一个特定的帮助文档、进行项目中函数的查找等

  • 定位器中提供了多个过滤器来实现不同的功能,按下Ctrl+K快捷键就会在定位器中显示各个过滤器的前缀及其功能,如图所示。使用方法是“前缀符号十空格十要定位的内容”
    在这里插入图片描述

  • 下面举两个简单的例子。在QtCreator中,按下Ctrl+K快捷键打开定位器,这时输入“l 8”(英文字母l和一个空格,然后是数字8),按下Enter 回车键,就会跳转到编辑模式的当前打开文档的第8行。再次按下Ctrl十K快捷键,输人“?qla”,这时已经查找到了 QLabel,如下图所示,按下回车键,就会跳转到帮助模式中,并打开 QLabel类的帮助文档

在这里插入图片描述

相关文章:

Qt 入门 6 之布局管理

Qt 入门 6 之布局管理 对于一个完整的软件&#xff0c;布局管理时必不可少的。其会让界面中嗯嗯部件呈现一个整齐的排列&#xff0c;也可令其大小随着窗口界面的大小变换而变化Qt 主要提供了QLayout 类及其子类作为布局管理器&#xff0c;他们可以实现常用的布局管理功能&…...

Java技术体系的主要产品线详解

Java技术体系的主要产品线详解 Java Card&#xff1a;支持Java小程序&#xff08;Applets&#xff09;运行在小内存设备&#xff08;如智能卡&#xff09;上的平台。 Java ME&#xff08;Micro Edition&#xff09;&#xff1a;支持Java程序运行在移动终端&#xff08;手机、P…...

第四章: 服务集成抽象

Chapter 4: 服务集成抽象 &#x1f31f; 从上一章到本章 在第三章&#xff1a;传输机制中&#xff0c;我们学习了如何通过STDIO和SSE协议让LLM与不同服务器通信。现在想象这样的场景&#xff1a;你的AI助手需要同时操作本地文件和云端数据库。这时问题来了——如何让LLM像操作…...

高精度并行2D圆弧拟合(C++)

依赖库 Eigen3 GLM Ceres-2.1.0 glog-0.6.0 gflag-2.2.2 基本思路 Step 1&#xff1a; RANSAC找到圆弧&#xff0c;保留inliers点&#xff1b; Step 2&#xff1a;使用ceres非线性优化的方法&#xff0c;拟合inliers点&#xff0c;得到圆心和半径&#xff1b; -------…...

【防火墙 pfsense】1简介

&#xff08;1&#xff09; pfSense 有以下可能的用途&#xff1a; 边界防火墙 路由器 交换机 无线路由器 / 无线接入点 从OSI7层模型了解设备在典型网络结构中所处的位置。 &#xff08;2&#xff09;边界防火墙 ->要充当边界防火墙&#xff0c;pfSense 系统至少需要两个接…...

GPT-4o最新图像生成完全指南:10大应用场景与提示词模板

引言 OpenAI于近期推出的全新GPT-4o图像生成功能&#xff0c;代表了AI图像创作领域的重大突破。作为一个原生多模态系统&#xff0c;GPT-4o将文本理解和图像生成无缝整合&#xff0c;为创作者、教育工作者和专业人士提供了前所未有的视觉创作灵活性。本文将分享10个GPT-4o图像…...

32单片机——外部中断

STM32F103ZET6的系统中断有10个&#xff0c;外部中断有60个 1、中断的概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#xff0c;很大程度上提高了单片机处理外部或内部事件的能力 eg&#xff1a;&#xff1a;你打开火&…...

《Pinia 从入门到精通》Vue 3 官方状态管理 -- 进阶使用篇

《Pinia 从入门到精通》Vue 3 官方状态管理 – 基础入门篇 《Pinia 从入门到精通》Vue 3 官方状态管理 – 进阶使用篇 《Pinia 从入门到精通》Vue 3 官方状态管理 – 插件扩展篇 目录 Store 的模块化设计4.1 多模块结构设计✅ 推荐目录结构&#xff08;中大型项目&#xff09; …...

HarmonyOs @hadss/hmrouter路由接入

参考文档&#xff1a;官方文档 在根目录oh-package.json5配置 {"dependencies": {"hadss/hmrouter": "^1.0.0-rc.11"} }加入路由编译插件 hvigor/hvigor-config.json文件 {"dependencies": {"hadss/hmrouter-plugin": &…...

第九节:性能优化高频题-首屏加载优化策略

路由懒加载&#xff1a;component: () > import(‘…’) CDN加速第三方库、Tree-Shaking移除未使用代码 前端首屏加载优化核心策略解析 一、路由懒加载&#xff1a;按需拆分代码块 实现原理 通过动态导入语法 import() 将路由组件拆分为独立代码块&#xff0c;仅在用户访问…...

ESP32_IDF_VScode安装多版本共存

ESP32_IDF_VScode安装多版本共存 一、安装离线版本idf 详情见文章&#xff1a;ESP32_IDF_基于win11的开发环境搭建 二、windows的VScode安装乐鑫插件 三、导入已经安装好的idf&#xff08;将VScode插件和本地安装的IDF绑定的一个关系&#xff09; 1、选择“配置ESP-IDF扩展”…...

JavaScript 的“积木”:函数入门与实践

引言&#xff1a;告别重复&#xff0c;拥抱模块化 想象一下&#xff0c;你在写代码时发现&#xff0c;有几段逻辑几乎一模一样&#xff0c;需要在不同的地方反复使用。你是选择每次都复制粘贴&#xff0c;还是希望能像搭积木一样&#xff0c;把这段逻辑封装起来&#xff0c;需…...

代码注释标记的含义

在代码中&#xff0c;TODO 是一种常用的注释标记&#xff0c;用于标识需要后续处理或完善的任务。它是开发者之间的常见约定&#xff0c;帮助团队协作和任务管理。以下是详细解释&#xff1a; 1. TODO 的核心含义 待办事项&#xff1a;标记代码中需要完成但尚未实现的功能、需…...

深度学习:迁移学习

迁移学习 标题1.什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法&#xff0c;就是把为任务 A 开发 的模型作为初始点&#xff0c;重新使用在为任务 B 开发模型的过程中。迁移学习是通过 从已学习的相关任务中转移知识来改进学习的新任务&#xff0c;虽然大多数…...

Nest集成健康检查

文章目录 前言✅ NestJS 健康检查集成思路&#xff08;标准实践&#xff09;&#x1f4e6; 推荐使用官方包&#xff1a; &#x1f9f1; 结构设计✅ 1. 创建健康模块✅ 2. 集成 nestjs/terminushealth.module.tshealth.controller.ts ✅ 3. 在 AppModule 注册模块 &#x1f50d;…...

第十五届蓝桥杯 2024 C/C++组 拼正方形

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 易错点&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P10898 [蓝桥杯 2024 省 C] 拼正…...

前端出现的一些新技术或者升级的技术汇总

以下是截至2024年第三季度前端领域的最新技术动态与论坛热议焦点&#xff0c;涵盖框架、工具链、性能优化等方向&#xff0c;结合社区讨论和实际案例展开分析&#xff1a; 一、框架演进与争议热点 1. React 19「Actions」引发范式转变 核心变化&#xff1a; 服务端Actions&…...

SQL数据类型

数字类型 1. 整型&#xff08;Integer&#xff09; 整型数据类型用于存储整数值&#xff0c;不包含小数部分。通常用于表示没有小数部分的数字&#xff0c;如年龄、数量、ID 等。 常见的整型数据类型&#xff1a; INT&#xff1a;用于存储常规整数值&#xff0c;通常占用 4 字…...

手机访问电脑端Nginx服务器配置方式

修改当前站点Nginx的配置如下。其中端口号必须是一个比较独特的端口号&#xff0c;比如8001。这样可以跟别的项目区分开来。域名使用0.0.0.0。 server {listen 80;listen 8001;server_name zfmap.cc 0.0.0.0;假设你电脑端的ip地址是192.168.1.101,那么你的手机与你的电脑连在同…...

PyQt6基础_QTabWidget

目录 代码 运行 官方文档 PySide6.QtWidgets.QTabWidget - Qt for Python 代码 class TempWidget(QWidget):def __init__(self):super().__init__()self.tabs QTabWidget()self.tabs.tabBarClicked.connect(self.tabs_tabBarClicked)widget_tab1 QWidget()widget_tab2…...

海思ISP调试记录

1、proc_param 功能&#xff1a;在海思中&#xff0c;proc_param参数用来控制每个多少帧更新一次ISP&#xff0c;默认是30帧。 过短的更新间隔会导致图像参数不稳定&#xff0c;产生闪烁或色彩跳跃4过长的间隔会使3A调整滞后&#xff0c;影响动态场景适应性1海思建议在1080p3…...

以运营为核心的智能劳动力管理系统,破解连锁零售、制造业排班难题

在连锁零售、制造业、物流等劳动力密集型行业中&#xff0c;排班与考勤管理不仅是人力资源管理的核心环节&#xff0c;更是直接影响企业运营效率、成本控制与合规风险的关键场景。尤其在当前经济环境下&#xff0c;企业面临用工成本攀升、政策合规趋严、业务波动频繁等多重挑战…...

缓存穿透、雪崩、击穿深度解析与解决方案

缓存穿透、雪崩、击穿深度解析与解决方案 一、缓存三大核心问题全景解析 1. 问题定位与影响分析 问题类型触发条件典型现象核心风险缓存穿透大量请求访问不存在的键Redis 命中率骤降&#xff08;<10%&#xff09;数据库压力激增&#xff0c;可能宕机缓存雪崩大量缓存键同…...

【AI】基于OllamaSharp与.NET Core API的高效LLM查询实现

本文旨在演示如何通过OllamaSharp NuGet包在.NET Core API中高效查询Ollama大语言模型,重点展示如何通过JSON配置文件动态设置模型参数和服务器地址,实现灵活维护的AI服务架构。 创建.NET Core API项目dotnet new webapi -n OllamaLLMAPI cd OllamaLLMAPI添加OllamaSharp NuG…...

kotlin和MVVM的结合使用总结(二)

MVVM 架构详解 核心组件&#xff1a;ViewModel 和 LiveData 在 Android 中&#xff0c;MVVM 架构主要借助 ViewModel 和 LiveData 来实现。ViewModel 负责处理业务逻辑&#xff0c;而 LiveData 则用于实现数据的响应式更新。 ViewModel 的源码分析 ViewModel 的核心逻辑在 …...

U盘能识别但无法写入数据的原因

1. U 盘物理损坏 原因&#xff1a;U 盘内部存储芯片、电路板或接口接触不良&#xff0c;可能因摔落、高温、频繁插拔等导致。表现&#xff1a;插入电脑能识别盘符&#xff0c;但读写时提示 “磁盘错误”“无法访问” 或操作无反应。解决方法&#xff1a; 尝试用其他设备&#…...

多模态大模型 Qwen2.5-VL 的学习之旅

Qwen-VL 是阿里云研发的大规模视觉语言模型&#xff08;Large Vision Language Model, LVLM&#xff09;。Qwen-VL 可以以图像、文本、检测框作为输入&#xff0c;并以文本和检测框作为输出。Qwen-VL 系列模型性能强大&#xff0c;具备多语言对话、多图交错对话等能力&#xff…...

linux sudo 命令介绍

sudo&#xff08;superuser do&#xff09;是一个用于 Linux 系统的命令&#xff0c;它允许授权用户以其他用户&#xff08;通常是 root 超级用户&#xff09;的安全权限执行命令。 有了 sudo&#xff0c;用户在执行特定的、需要更高权限的操作时&#xff0c;就不需要切换到 r…...

STM32F103系列单片机寄存器操作和标准库操作

关于stm32&#xff0c;标准库很早就学完了&#xff0c;但如果想要更加深入学习计算机硬件&#xff0c;那么学会寄存器操作是非常有必要的。今天从最简单的点灯开始&#xff0c;我们来对比一下二者的不同。 一、寄存器操作和标准库操作中点亮LED的区别 寄存器操作&#xff1a;…...

如何解决PyQt从主窗口打开新窗口时出现闪退的问题

在PyQt5中&#xff0c;当从主窗口打开新窗口时&#xff0c;经常会出现闪退现象&#xff0c;这通常是由于对象生命周期管理不当或事件循环错误等所导致。 1. 确保新窗口实例被正确引用 新窗口的实例若未被主窗口引用&#xff0c;可能会被Python的垃圾回收机制销毁。 错误示例&…...

2025五一杯数学建模竞赛思路助攻预定

2025五一杯数学建模竞赛思路助攻预定&#xff08;思路内容见文末名片&#xff09; 一、概况 数学建模竞赛是一项模拟面对实际问题寻求解决方案的活动&#xff0c;是一次近似 于“真刀真枪”的创新探索性实践训练。在丰富并活跃学生课外生活活动的同 时&#xff0c;数学建模竞…...

Java集合框架解析

一、集合框架概述 1. 集合框架体系结构 Java集合框架&#xff08;Java Collections Framework, JCF&#xff09;位于java.util包中&#xff0c;包含三大核心接口&#xff1a; Collection&#xff1a;单列数据集合的根接口 List&#xff1a;有序可重复集合Set&#xff1a;无序…...

《100天精通Python——基础篇 2025 第1天:从编程语言到计算机基础,开启你的学习之旅》

目录 一、计算机组成原理之概述篇二、编程语言是什么三、编译型语言和解释型语言的区别3.1 编译型语言3.2 解释型语言 四、Python是什么五、Python有哪些优点和缺点&#xff1f;5.1 Python的优点5.2 Python 的缺点 六、学Python能干什么&#xff0c;Python的应用领域有哪些&…...

JavaFX 第三篇 HostServices和Platform

1、HostServices类 介绍这个类主要是使用里面的一个方法 返回类型方法说明voidshowDocument(java.lang.String uri)使用默认浏览器打开一个url地址 /*** description: 程序打开3秒后&#xff0c;打开百度* author: HK* since: 2025/4/24 16:40*/ public class Demo1 extends…...

【Java 8新特性】Stream API 和 Lambda 表达式

一、前言 Java 8 的 Stream API 和 Lambda 表达式 为集合处理带来了函数式编程风格&#xff0c;显著简化了代码并提高了可读性。 二、Lambda 表达式 1.作用 简化匿名内部类的语法&#xff0c;允许将函数作为参数传递。实现函数式接口&#xff08;只有一个抽象方法的接口&…...

Vue 3 相比 Vue 2 的优势

1. 性能优化 更快的渲染&#xff1a; 基于 Proxy 的响应式系统&#xff0c;比 Vue 2 的 Object.defineProperty 更高效&#xff0c;初始化速度和内存占用优化显著。编译时优化&#xff08;如静态树提升、补丁标志等&#xff09;&#xff0c;减少运行时开销。 更小的体积&#…...

深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南

深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南 在现代 Java 应用中,ThreadLocal 被广泛用于线程隔离上下文,比如用户会话、链路追踪等。但随着线程池的普及,ThreadLocal 也暴露出严重局限性,尤其是在异步场景中上下文无法正确传递的问题。 本文从 Thr…...

入门 Go 语言

本专栏的 Go 语言学习参考了B站UP 软件工艺师的视频 本节需要&#xff1a; Go 语言环境VSCode 安装环境 下载 Go 环境&#xff0c;并安装下载 VSCode&#xff0c;安装。在 VSCode 中安装 Go 扩展&#xff1a; 接下来就可以编写 Go 语言了 第一条 Go Go 语言是一种编译型…...

膳食营养诊断活动:科技赋能,共筑全民健康新基石

膳食营养诊断活动&#xff1a;科技赋能&#xff0c;共筑全民健康新基石 一、活动背景&#xff1a;响应营养周号召&#xff0c;开启健康新征程 &#xff08;一&#xff09;2025营养周主题解读 2025年全民营养周的核心主题“吃动平衡&#xff0c;健康体重&#xff0c;全民行动…...

考拉悠然:科技与匠心,以烟草虫情AI监测系统共筑品质未来

李工&#xff0c;一位在卷烟厂辛勤耕耘了二十余载的老工艺师&#xff0c;他的青春和汗水&#xff0c;都挥洒在了这片弥漫着烟草香气的土地上。他像一位老农&#xff0c;精心呵护着每一片烟叶&#xff0c;因为他深知&#xff0c;烟草品质的把控&#xff0c;就是守护着卷烟厂的生…...

k8s基于角色的访问控制(RBAC)

Kubernetes&#xff08;k8s&#xff09;权限管理主要是基于角色的访问控制&#xff08;RBAC&#xff09;&#xff0c;以下是其核心内容&#xff1a; 核心概念 Role 和 ClusterRole Role &#xff1a;定义特定命名空间内的权限规则&#xff0c;用于在某个命名空间内设置访问权限…...

拆解华为Pura X新发现:“仿生”散热与钛合金“骨架”

拆解华为Pura X新发现&#xff1a;“仿生”散热与钛合金“骨架” 原创 黑毛警长008 AR圈 2025年04月24日 09:42 广东 01 引言&#xff1a;AI时代带来折叠屏新挑战 随着华为Pura X的发布&#xff0c;市场上已出现多家机构的拆解分析&#xff0c;但大多聚焦于芯片和电子组件层面…...

Typecho 访客统计插件最新版-前后台统计图均可显示

这是一个为 Typecho 博客系统开发的访客统计插件&#xff0c;基于原版的VistorLogger修改版本。该插件提供了详细的访问统计功能&#xff0c;包括访问国家/地区统计、IP分布等信息&#xff0c;并进行了隐私保护处理。 功能特点 独立页面模板显示访问国家/地区统计&#xff08…...

与智者同行:京东零售技术人的成长书单

我们正处在一个快速变化的时代&#xff0c;信息洪流奔涌而来&#xff0c;如何穿透纷繁的表象&#xff0c;理解世界的复杂性&#xff1f;又如何在充满不确定性的环境中&#xff0c;找到属于自己的方向&#xff1f; 阅读&#xff0c;是最从容的答案&#xff0c;让我们站在智者的…...

matplotlib1-画成对数据图

画图的类型 成对数据&#xff08;Pairwise data&#xff09; 成对形式的数据 (x, y)&#xff1b;表格形式的数据 (var_0, var_1, ..., var_n) &#xff1b;函数形式的数据 f(x) y 1. 绘图-plot(x, y) 以线条或标记的形式将 y 随 x 的变化情况绘制成图表。 2. 散点图-scatt…...

深入理解表单---提交用户与网页交互的重要方式:GET 与 POST 的本质区别与应用实践

在 Web 开发中&#xff0c;表单&#xff08;<form>&#xff09;是用户与网页交互的重要方式&#xff0c;而表单的 method 属性则决定了数据是如何发送到服务器的。本文将带你系统理解 GET 和 POST 请求方式的区别、使用场景与注意事项&#xff0c;并结合示例进行实战分析…...

VIVADO中单bit信号的跨时钟域处理(快时钟到慢时钟)

VIVADO中单bit信号的跨时钟域处理 同步触发器的约束&#xff0c;确保软件布局布线时把同步的触发器放到同一个SLICE中 目录 前言 一、快时钟的脉冲到慢时钟的同步方法一 1、正确结果 2、源时钟脉冲展宽组合逻辑输出不加触发器的风险 3、目的时钟采样组合逻辑输出不加触发器…...

解决 Windows10 下 UWP 应用无法使用本地代理

从Micorsoft Store下载的应用默认不允许使用本地代理(或者说就不允许访问localhost) 但是可以借助于系统自带的 CheckNetIsolation 工具来突破该限制 操作 找出要修改的应用 SID 在注册表 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Cur…...

实验三 进程间通信实验

一、实验目的 1、了解什么是信号。 2、熟悉LINUX系统中进程之间软中断通信的基本原理。 3、理解进程的同步关系。 4、掌握用信号实现进程间的同步操作。 5、了解什么是管道。 6、熟悉UNIX/LINUX支持的管道通信方式。 二、实验内容 1、阅读下列程序&#xff0c;执行程序…...

NHANES指标推荐:TyG-WHtR

文章题目&#xff1a;Can cardiovascular health and its modifiable healthy lifestyle offset the increased risk of all-cause and cardiovascular deaths associated with insulin resistance? DOI&#xff1a;10.1186/s12933-025-02674-z 中文标题&#xff1a;心血管健康…...