【C++ Qt】快速上手 显⽰类控件(Label、LCDNumber、ProcessBar、CalendarWidget)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”
绪论:
本文围绕Qt中常用的显示类控件展开,重点讲解了 QLabel(文本/图片显示)、QLCDNumber(数字显示)、QProgressBar(进度条) 和 QCalendarWidget(日历控件) 的核心属性、使用场景及代码实例,帮助快速上手Qt界面开发中的基础显示功能。
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。
显示类控件
Label
QLabel 可以⽤来显⽰⽂本和图⽚
属性 | 说明 |
---|---|
text | QLabel 中的⽂本 |
textFormat | ⽂本的格式: Qt::PlainText 纯⽂本(最普通的文本) Qt::RichText 富⽂本(⽀持 html 标签、内容更丰富的文本、就类似word工具) Qt::MarkdownText markdown 格式 (提供各种特殊符号表示各种的样式 / 格式) Qt::AutoText 根据⽂本内容⾃动决定⽂本格式 |
pixmap | QLabel 内部包含的图⽚. |
scaledContents | 设为 true 表⽰内容⾃动拉伸填充 QLabel 、设为 false 则不会⾃动拉伸(让图片自动填充满) |
alignment | 对⻬⽅式。可以设置⽔平和垂直⽅向如何对⻬(靠左/靠右/居中…) |
wordWrap | 设为 true 内部的⽂本会⾃动换⾏. 设为 false 则内部⽂本不会⾃动换⾏ |
indent | 设置⽂本缩进。⽔平和垂直⽅向都⽣效. |
margin | 内部⽂本和边框之间的边距。不同于于 indent, 但是是上下左右四个⽅向都同时有效. ⽽ indent 最多只是两个⽅向有效(具体哪两个⽅向有效取决于 alignment ) |
openExternalLinks | 是否允许打开⼀个外部的链接. (当 QLabel ⽂本内容包含 url 的时候涉及到) |
buddy | 给 QLabel 关联⼀个 “伙伴” , 这样点击 QLabel 时就能激活对应的伙伴 例如:伙伴如果是⼀个 QCheckBox, 那么该 QCheckBox 就会被选中 |
代码实例
设置文本格式:
- ui文件中拖拽三个 label 控件
- 构造函数中设置label的文本格式(textFormat)
- 第一个:纯文本(setTextFormat)、setText:这是一段纯文本
- 第二个:富文本…、使用
<b>xxxxx</b>
加粗标签 - 第三个:markdown、使用 # 设置标题
比较简单源码就不放了(如下)
设置图片QPixmap
- 拖拽label、使用qrc机制,添加图片
- 将QLabel设置和窗口一样大,并且把QLabel左上角设置到窗口的左上角这里
- 将label的geometry的x y设置成 0 0 并且获取窗口的宽高给到label(直接this->width、… 即可)
- 直接写死某个数值,称为 “硬编码”(要保证数值不改变)
- label添加图片:创建QPixmap对象构造图片路径
- 将该对图片象设置(setpixmap)到label中、其中可能还会填不满因为要保证图片大小足够大
- 若不够大可以通过scaledContents进行拉伸填充
源码如下:
#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->setGeometry(0,0,this->width(),this->height());//获取窗口的宽和高给到labellabel->setScaledContents(true);QPixmap pixmap(":/1.jpg");label->setPixmap(pixmap);
}Widget::~Widget()
{delete ui;
}
但可能还会有点问题,因为是在构造函数中设置的尺寸,所以这个尺寸设置是一次性的,若窗口再次发生改变(修改窗口大小)QLabel中的图片就不会变化了
解决办法
- 首先了解概念:Qt中的操作会有两类概念:信号、事件
- 当用户拖拽修改窗口大小的时候,就会触发resize事件(resizeEvent)、从A拖到B的过程的他是 连续的一系列的触发 resizeEvent 事件
- 可以让 Widget 窗口类,重写父类QWidget的resizeEvent虚函数,该函数在鼠标拖动窗口尺寸时会被返回调用执行,所以重写该函数,当父类调用该函数时就会调用到子类中的重写的该函数(多态~)
- 重写(声明+定义)void resizeEvent(QResizeEvent* event)
- 此时的event就会窗口的实时大小
- 所以对于label的大小就能通过event对象获取高度和宽度动态的改变
附:其中QResizeEvent不能直接使用,需要添加头文件 #
include <QResizeEvent>
源码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
#include <QDebug>
#include <QResizeEvent>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setGeometry(0,0,this->width(),this->height());ui->label->setScaledContents(true);//设置自动拉伸QPixmap pixmap(":/1.jpg");ui->label->setPixmap(pixmap);//设置图片
}Widget::~Widget()
{delete ui;
}void Widget::resizeEvent(QResizeEvent * event)
{qDebug() << event->size();//打印查看当前窗口大小ui->label->setGeometry(0,0,event->size().width(),event->size().height());//ui->label->setGeometry(0,0,this->width(),this->height());
}
⽂本对⻬, ⾃动换⾏, 缩进, 边距
-
构建几个label,设置边框:QFrame
- 通过设置边框 frameShape:Box
-
构造函数中设置 label 的不同属性
-
Text:“这是一段文本”
-
Alignment:
- Qt::AlignHCenter(水平居中)
- Qt::AlignVCenter(垂直居中)
- AlignRight(靠右对齐)
- AlignTop(靠上对齐)…
-
自动换行(WordWrap):
-
自动换行:
-
不换行:
-
-
设置缩进
-
Text:文本
-
Indent:50(单位:像素)
-
注意:此处的缩进即使文本换行了,后面的也仍然会缩进,而非首行缩进
-
若要实现首行缩进可以使用:CSS(QSS)中 text-indent 属性实现首行缩进
-
-
设置边距
- Margin:边距(单位:像素)
- 其中上下左右都会设置到,其中当边距过大可能会导致文本无法显示(如下图,并且还保持缩进)
-
QLabel 伙伴
- ui文件中拖拽两个 RadioButuon:选项1/2 、和两个label 快捷键
- 并设置快捷键:设置方法在文本后面添加 (&A),A代表某个键位的值 如上&T
- 将label通过Buddy进行设置和RadioButuon的关联
- QLabel中的文本可以指定快捷键
- 但功能较弱,必须 在文本中使用 & 跟上字符来表示快捷键(不过加上括号会更好理解点!)
-
LCD Number
QLCdNumber是一个专门用来显示数字的控件,类似“老式计算机”的效果
属性 | 说明 |
---|---|
intValue | QLCDNumber 显⽰的数字值(int). |
value | QLCDNumber 显⽰的数字值(double) 和 intValue 是联动的. 例如给 value 设为 1.5, intValue 的值就是 2 另外, 设置 value 和 intValue 的⽅法名字为 display , ⽽不是 setValue 或者 setIntValue . |
digitCount | 显⽰⼏位数字 |
mode | 数字显⽰形式. 1.QLCDNumber::Dec :⼗进制模式,显⽰常规的⼗进制数字。 2. QLCDNumber::Hex :⼗六进制模式,以⼗六进制格式显⽰数字。 3. QLCDNumber::Bin :⼆进制模式,以⼆进制格式显⽰数字。 4. QLCDNumber::Oct :⼋进制模式,以⼋进制格式显⽰数字。 只有⼗进制的时候才能显⽰⼩数点后的内容. |
segmentStyle | 设置显⽰⻛格. 1. QLCDNumber::Flat :平⾯的显⽰⻛格,数字呈现在⼀个平坦的表⾯上。 2. QLCDNumber::Outline :轮廓显⽰⻛格,数字具有清晰的轮廓和阴影效果。 3. QLCDNumber::Filled :填充显⽰⻛格,数字被填充颜⾊并与背景区分开。 |
smallDecimalPoint | 设置⽐较⼩的 ⼩数点. |
其中注意在设置value和intValue的方法名字为 display,而不是setValue/setIntValue(这种设计是不太好的所以自己设计时就尽量保持一致)
实例:倒计时 QTimer的使用
- ui文件中拖拽上 LCD Number
- 设置显示初始值:10,然后要实现每秒钟 -1 的效果
- C++标准库中没有提供定时器的实现,boost里面提供了对应的功能
- Qt中也封装了对应的定时器(结合信号槽机制)
- QTimer 这个类对象,就会自动不断 产生 timeout 信号
- 可以通过start方式来开启定时器
- 并且参数中设定触发timeout信号的周期,
- 结合connect,把这个 timeout 信号绑定到槽函数中
- 就可以执行持续触发槽函数,从而修改LCDNumber中的数字的逻辑
- 将QTimer对象写成 类成员变量,并构造到对象树中
- 把 QTimer 的 timeout 信号和咱们自己的槽函数(handle)进行连接
- 启动定时器,参数是触发timeout的周期,单位是 ms
- 编写handle槽函数(定义在Widget的类函数)
- 先拿到LCDNumber中的数字,通过ui找到lcdNumber在获取数字(intvalue)
- 判断value是否小于0
- 若小于则调用stop,停止定时器
- 每次将lcdNumber的value中的值设置(display) - 1
源码:
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lcdNumber->display(10);//注意是displaytimer = new QTimer(this);//注意不要使用成 QTimetimer->start(1000);//发送信号的时间 10000connect(timer,&QTimer::timeout,this,&Widget::handle);}Widget::~Widget()
{delete ui;
}void Widget::handle(){int v = ui->lcdNumber->intValue();if(v > 0){ui->lcdNumber->display(v - 1);//注意是display}else{timer->stop();//暂定}
}
不使用Qtime来实现:
- 拖拽LCDNumber
- 获取 lcd 对象中的 intvalue(整形)
- 循环判断value值(若小于0则直接退出)
- 内部使用C++11的 std::this_thread::sleep_for(std::chrono::seconds(1)) 进行休眠1s
- 每次设置value-1
- 但写在 widget 构造函数中并没有效果,因为显示在构造后面(具体如下图)
所需要需要修改:
- 使用thread(这是操作系统提供的api)
- 内部使用lambda表达式
- 实现和上面一样
- 但这样写也会出现错误,因为界面有一个专门的线程负责维护更新(主线程、main函数所在的线程),对于GUI来说,内部包含了许多隐藏状态,Qt为了保证修改界面的过程中,线程是不会收到影响的,Qt禁止了其他线程直接修改界面
因为:
- 对于一个图形化界面会有许多的变量,进很容易出现线程安全,所以就要求所有对界面的修改操作必须在主线程中完成!!
- 对于Qt的槽函数来说,默认情况下,槽函数都是由主线程调用的,所以使用槽函数修改界面是没问题的
- a.exec 就会时主线程进入“事件循环”,一直循环,每执行一次循环,都会有固定的事情要操作(其中的槽函数调用就是通过这里完成)
ProgressBar进度条
使⽤ QProgressBar 表⽰⼀个进度条
一些核心属性:
属性 | 说明 |
---|---|
minimum | 进度条最⼩值 |
maximum | 进度条最⼤值 |
value | 进度条当前值 |
alignment | ⽂本在进度条中的对⻬⽅式: Qt::AlignLeft : 左对⻬ Qt::AlignRight : 右对⻬ Qt::AlignCenter : 居中对⻬ Qt::AlignJustify : 两端对⻬ |
textVisible | 进度条的数字是否可⻅. |
orientation | 进度条的⽅向是⽔平还是垂直 |
invertAppearance | 是否是朝反⽅向增⻓进度 |
textDirection | ⽂本的朝向. |
format | 展⽰的数字格式. %p :表⽰进度的百分⽐(0-100) 、 %v :表⽰进度的数值(0-100)、 %m :表⽰剩余时间(以毫秒为单位) 、 %t :表⽰总时间(以毫秒为单位) |
实例:进度条
让个这个进度条的进度跟随时间增长(每隔100ms 进度条数值增长1)
- 拖拽ProgressBar到界面上
- 创建Qtimer 成员变量 timer
- 构造函数中:
- new上空间并且挂上对象树
- 连接connect连接槽函数
- 将 timer 对象和 handle 进行连接,通过 Qtimer::timeout 信号进行触发
- 创建handle成员函数
- 注意启动timer定时器(100ms)
- handle函数:
- 获取当前进度条的当前数值,通过ObjectName调用value获取
- 判断若value >= 100
- 代表进度条满了就可以停止定时器了
- 并直接返回
- 每次 让value值增加1
源码:
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer();timer->start(100);//设置100ms周期的持续发送timeout信号//设置槽函数,让其实现ProcessBar的递增connect(timer,&QTimer::timeout,this,&Widget::handle);
}Widget::~Widget()
{delete ui;
}void Widget::handle(){//1. 获取process的值int value = ui->progressBar->value();ui->progressBar->setValue(value+1);//每次进来都让其+1if(value >= ui->progressBar->maximum()){//若够了或者timer->stop();//停止信号}}
其中在widget.h中用到了QTimer,却可以不用该文件中声明头文件,是因为在其他文件中声明,所以就能使用(在.h中不添加、在.cpp中添加)
- 因为在Qt内部提供了体术技巧:Qt中有一个专门的头文件,这个头文件包含了Qt中所有类的前置声明
- 这个头文件,一般不会直接接触到,但是包含了其他Qt的头文件,都会间接包含到这个头文件中,当然这并不代表你可以不写头文件,你必须在某个文件中添加头文件
为啥要提供这种技巧?
主要是解决编译速度的问题~
- 因为C/C++代码编译速度是较慢的
- 因为include头文件的文本替换是比较慢的~
- 因此尽可能减少头文件的个数,就能有效编译时间,Qt 使用 class 前置声明的方式尽量减少头文件的包含(这样某个文件中定义了该头文件其他文件就不需要再包含了)
一些互联网大厂,甚至会有专门的“编译集群”(分布式编译)
使用QSS将进度条改成红色的
QSS机制可以使用 styleSheet 通过样式来修改进度条的颜⾊.
- 实现方法点击processBar控件右侧属性找到 styleSheet / 右击控件选择 “编辑样式表”
- 内部样式设置
QProgressBar::chunk {background-color: #FF0000;} 1. QProgressBar::chunk:代表指定控件,选择器针对那个控件生效 2. {} 内部填写样式
其中注意的是:进度条具体的进度设置一般是根据时间任务类型灵活设置的(这里就简单的实现了)
例如:要读取某个文件,就可以先获取该文件的总大小,每读取一部分数据(就可以算出读了多少数据段)进行更新进度条的数值
Calendar Widget
核⼼属性
属性 | 说明 |
---|---|
selectDate | 当前选中的⽇期 |
minimumDate | 最⼩⽇期 |
maximumDate | 最⼤⽇期 |
firstDayOfWeek | 每周的第⼀天(也就是⽇历的第⼀列) 是周⼏ |
gridVisible | 是否显⽰表格的边框 |
selectionMode | 是否允许选择⽇期 |
navigationBarVisible | ⽇历上⽅标题是否显⽰ |
horizontalHeaderFormat | ⽇历上⽅标题显⽰的⽇期格式 |
verticalHeaderFormat | ⽇历第⼀列显⽰的内容格式 |
dateEditEnabled | 是否允许⽇期被编辑 |
重要信号
信号 | 说明 |
---|---|
selectionChanged(const QDate&) | 当选中的⽇期发⽣改变时发出 |
activated(const QDate&) | 当双击⼀个有效的⽇期或者按下回⻋键时发出,形参是⼀个QDate类型,保存了选中的⽇期 |
currentPageChanged(int, int) | 当年份⽉份改变时发出,形参表⽰改变后的新年份和⽉份 |
实例
- ui文件中拖拽 calendar Widget、label
- 通过label中显示选择的日期
- 通过selectionChanged信号进行获取用户选中的日期,创建信号槽函数
- 槽函数编写:
- 获取选中日期 (selectDate)放到QDate对象中
- 将label中的文本修改为了 date 时间(需要配合QDate::toString转换成字符串)
void Widget::on_calendarWidget_selectionChanged()
{
// qDebug() << ui->calendarWidget->selectedDate();QDate date = ui->calendarWidget->selectedDate();ui->label->setText(date.toString());
}
本章完。预知后事如何,暂听下回分解。
如果有任何问题欢迎讨论哈!
如果觉得这篇文章对你有所帮助的话点点赞吧!
持续更新大量C++ Qt细致内容,早关注不迷路。
相关文章:
【C++ Qt】快速上手 显⽰类控件(Label、LCDNumber、ProcessBar、CalendarWidget)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本文围绕Qt中常用的显示类控件展开,重点讲解了 QLabel(文本/图片显示)、QLCDNumber(数字显示࿰…...
Docker和K8s面试题
1.Docker底层依托于linux怎么实现资源隔离的? 基于Namespace的视图隔离:Docker利用Linux命名空间(Namespace)来实现不同容器之间的隔离。每个容器都运行在自己的一组命名空间中、包括PID(进程)、网络、挂载…...
shell--数组、正则表达式RE
1.数组 1.1定义 什么是数组? 数组也是一种变量,常规变量只能保存一个值,数组可以保存多个值 1.2 分类 普通数组:只能用整数作为数组的索引--0 下标 有序数组(普通数组):(index)索引(为整数,从0开始) 关联数组:可以使用字符串作为数组的索引 1.3 普通数组 引用: ec…...
java 使用 POI 为 word 文档自动生成书签
poi 版本:4.1.0 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><…...
redis+lua+固定窗口实现分布式限流
用key的过期时间替代固定窗口的时间戳 -- KEYS[1]: 限流的key -- ARGV[1]: 限流窗口大小(秒) -- ARGV[2]: 限流阈值local key KEYS[1] local window tonumber(ARGV[1]) local limit tonumber(ARGV[2])-- 尝试获取当前计数 local current redis.call…...
什么是SQL92标准,有什么特点和影响?
一、SQL92简介 SQL92标准是1992年由美国国家标准协会(ANSI)和国际标准化组织(ISO)联合制定的数据库语言标准,正式名称为"SQL:1992"或ISO/IEC 9075:1992。他是关系型数据库管理系统(R…...
Flink Checkpoint 与实时任务高可用保障机制实战
在实时数仓体系中,数据一致性和任务稳定性是核心保障。本文围绕 Flink Checkpoint 机制,深入讲解高可用保障的最佳实践和工程实现。 一、业务背景与痛点 在金融风控、营销实时推荐、智能监控等场景中,实时数仓的每一条数据都至关重要。常见的业务痛点包括: 断点恢复困难:…...
WebRtc08:WebRtc信令服务器实现
如何使用socket.io发送消息 发送消息 // 给本次连接发送消息 socket.emit()// 给某个房间内所有人发送消息 io.in(room).emit()// 除了自己以外,给某个房间的所有人发消息 socket.to(room).emit();// 除本连接外,给所有人发消息 socket.broadcast.emit…...
基于 SpringBoot 与 Redis 的缓存预热案例
文章目录 “缓存预热” 是什么?项目环境搭建创建数据访问层预热数据到 Redis 中创建缓存服务类测试缓存预热 “缓存预热” 是什么? 缓存预热是一种优化策略,在系统启动或者流量高峰来临之前,将一些经常访问的数据提前加载到缓存中…...
Python对比两张CAD图并标记差异的解决方案
以下是使用Python对比两张CAD图并标记差异的解决方案,结合图像处理和CAD结构分析: 一、环境准备与库选择 图像处理库:使用OpenCV进行图像差异检测、颜色空间转换和轮廓分析。CAD解析库:若为DXF格式,使用ezdxf解析实体…...
LINUX427 冒险位 粘滞位 chmod 权限
为什么不同用户能查看的文件夹不同 思索 是因为不同文件夹的权限不同吗?感觉不是 权限不就是只有rwx权限吗? o 对对对 和0GU有关 O 组内的其他用户应该 O是其他用户 不是组内用户 文件创建应该设置了r权限 但是root为什么看到的好像不一样 root 这些…...
10 DPSK原始对话记录
10 DPSK原始对话记录 前言 编程之余,在 Vscode 的 Cline 插件界面中和 ai (dpsk v3-0324) 聊起了天,得到了一个有意思的回答。就像ai有自我意识一样。在此记录。 实际对话内容 时间范围:2025-04-27 23:37:22 - 23:44:17 对话模式:PLAN MODE [23:37:22] 用户提问 “你…...
实现一个瀑布流布局
1、纯CSS实现 实现方式:借助column-count属性来创建 4 列的布局,并使用 column-gap 设置列间距。每个 .img-container 使用 break-inside: avoid 来防止图片被分割。 来看一下完整的代码: <!DOCTYPE html> <html lang"en&qu…...
Linux:进程间通信->共享内存
1. 共享内存的概念 System V共享内存,是一个高效的进程间通信IPC机制,允许多个进程共享同一块物理内存区实现快速的数据交换。如下图所示 这两个进程分别通过页表映射到这一块共享内存中 2. 共享内存的函数 shmget 功能: 创建新的共享内存…...
《Crawl4AI 爬虫工具部署配置全攻略》
《Crawl4AI 爬虫工具部署配置全攻略》 摘要 :在数据驱动的智能时代,高效爬虫工具是获取信息的关键。本文将为你详细解析 Crawl4AI 的安装配置全流程,从基础设置到进阶优化,再到生产环境部署,结合实用技巧与常见问题解…...
spring框架学习(下)
这章节讲的主要是spring在生产Bean对象时的过程 Spring实例化对象的基本流程 1、解析bean.xml 2、封装成BeanDifinition类 3、存放到BeanDIfinitionMap里 4、从BeanDIfinitionMap遍历得到bean 5、将bean存放到SingletonObjects 6、调用getBean方法得到bean 以下是简易的…...
进程与线程-----C语言经典题目(8)
一.什么是进程 定义: 进程指的是程序在操作系统内的一次执行过程。它不只是程序代码,还涵盖了程序运行时的各类资源与状态信息。包括创建、调度、消亡。 进程的状态(ps -aux): 就绪状态:进程已经…...
lstm用电量预测+网页可视化大屏
视频教学: 训练结果: 详细代码: import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers impo…...
linux blueZ 第六篇:嵌入式与工业级应用案例——在 Raspberry Pi、Yocto 与 Buildroot 上裁剪 BlueZ 并落地实战
本篇面向嵌入式与工业级应用场景,深入讲解如何在各类 Linux 构建系统(Raspberry Pi OS、Yocto、Buildroot)中裁剪、交叉编译与集成 BlueZ,以及在工业网关、资产追踪与蓝牙 Mesh 等典型方案中的落地实例与注意要点,帮助你打造稳定、可维护、低功耗的嵌入式蓝牙产品。 目录 …...
Dev控件RadioGroup 如何设置一排有N个显示或分为几行
1.5个选项 全部横排显示,则Columns 5 2.5个选项 每行分两个,则有三行,则Columns 2...
AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类
Launcher3中有一个跟Launcher状态相关的类,叫LauncherState LauncherState 是 Launcher3 中定义各种用户界面状态的抽象基类。你可以把它想象成一个状态机,定义了 Launcher 可能处于的不同视觉和交互模式,例如主屏幕、所有应用列表、最近任务…...
Redis 笔记(三)-Redis 基本知识及五大数据类型
一、redis 基本知识 redis 默认有 16个 数据库,config get databases 查看数据库数量 127.0.0.1:6379> config get databases # 查看数据库数量 1) "databases" 2) "16"默认使用的是第 0个 16 个数据库为:DB 0 ~ DB 15&am…...
Linux——线程(2)线程互斥(锁)
知识回顾 在学习本篇内容前,我们需要先回顾一下几个概念。 临界资源:多线程执行流共享的资源就叫做临界资源 临界区:每个线程内部,访问临界资源的代码,就叫做临界区 互斥:任何时刻,互斥保证有…...
深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)
💡 你是否在寻找具身人工智能(Embodied AI)领域的研究资源?是否希望有一个系统性的资源集合来加速你的研究?今天给大家推荐一个重磅项目! 🌟 为什么需要这个项目? 具身人工智能是一…...
组件之间的信息传递的四种方法!!【vue3 前端】
迎万难 赢万难! 目录 1. 使用 defineProps 传递数据:2. 使用。defineEmits 发送事件:3. 使用 Provide / Inject:4. 使用状态管理(如 Pinia): 1. 使用 defineProps 传递数据: 父组件…...
单片机学习笔记9.数码管
0到99计数 ,段选共阴极 ;0到99计数 ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0_ISR ORG 0100H; 定义位选控制位 DISPLAY_SELECT BIT 20H.0MAIN:; 定时器 0 初始化MOV TMOD, #01H ; 设置定时器 0 为模式 1MOV TH0, #3CH ; 定时器 0 高 8 位初值,定时 …...
Go 语言 核心知识点
Go 语言(Golang)是由 Google 开发的一种静态类型、编译型语言,设计目标是高效、简洁、并发友好。它借鉴了 C 语言的性能优势,同时引入了现代语言的特性(如垃圾回收、并发原语),并摒弃了传统面向…...
【C++ 类和数据抽象】消息处理示例(2)
目录 一、消息处理系统的核心价值 1.1 现代软件架构中的消息驱动 1.2 消息处理系统的关键组件 二、消息处理系统概述 三、Message类设计 3.1 成员变量 3.2. 成员函数 3.3. 私有辅助函数 四、Folder类设计 五、代码实现 六、数据抽象在消息处理系统中的应用 七、总结…...
kafka 中消费者 groupId 是什么
📚 什么是 groupId? groupId 是 Kafka 里消费者组(Consumer Group)的唯一标识。 同一个 groupId 的消费者,一起共享消费,一条消息只给组内一个消费者处理。不同 groupId 的消费者组,各自独立消…...
单相交直交变频电路设计——matlab仿真+4500字word报告
微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 硬件电路采用Altium designer设计,仿真采用Matlab软件 本仿真模型基于MATLAB/Simulink(版本MATLAB 2018Rb)软件。建议采用matlab2018Rb及以上版本打开。(若需要其他…...
Python中的协程(Coroutine)
Python中的协程(Coroutine) 是一种轻量级的异步执行单元,主要用于解决IO密集型任务的性能问题。Python 3.5引入了 async/await 语法,使得协程变得简洁且易于使用。协程的核心是通过事件循环(Event Loop) 来…...
【QT】QT多线程
QT多线程 1.涉及到类和方法示例代码:未重写run函数 2.使用思路3.常用方法4.示例代码1:重写线程run函数现象: 5.示例代码2:多线程显示切换图片,使用公有方法现象: 1.涉及到类和方法 类:QThread 示…...
基于深度学习的医疗诊断辅助系统设计
标题:基于深度学习的医疗诊断辅助系统设计 内容:1.摘要 随着医疗数据的爆炸式增长和深度学习技术的飞速发展,开发基于深度学习的医疗诊断辅助系统具有重要的现实意义。本研究的目的在于设计一个高效、准确的医疗诊断辅助系统,以辅助医生进行更精准的诊断…...
C++ RAII
RAII(Resource Acquisition Is Initialization,资源获取即初始化)是 C 编程中的核心设计理念,用于管理资源的分配和释放。它通过将资源的生命周期绑定到对象的生命周期,利用 C 的自动对象管理机制(主要是栈…...
Linux进程学习【环境变量】进程优先级
进程优先级的基本概念 在 Linux 中,每个进程都有一个优先级,操作系统根据这个优先级来决定进程的执行顺序。优先级越高,进程的执行就越频繁。通常,进程优先级是由以下两个部分构成: 静态优先级(PRI&#x…...
Leetcode:283. 移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...
BIOES 标签的含义
BIOES 标签的含义 B (Begin) 表示一个实体的开始。例如,在句子 “北京是中国的首都” 中,“北京” 作为地点实体的开头,首字会被标注为 B-LOC,后续字可能标注为 I-LOC。 I (Inside) 表示一个实体的中间或内部部分。例如&a…...
mAh 与 Wh:电量单位的深度解析
1. 基础定义与物理意义 1.1 mAh(毫安时) 定义:表示电池以毫安(mA)为单位的电流持续放电 1 小时的电荷量。1 mAh1 mA1 h3.6 C(库仑,电荷单位)局限性:仅反映电池存储的电荷量,未考虑电…...
安卓屏播放语音失败,报错TextToSpeech: speak failed: not bound to TTS engine
最近碰到一个很棘手的问题,无缘无故,之前在Android9.0跑得好好的程序,升级安装系统到Android13后,就发现之前能放的语音,现在放不了了,真是头大,所以我摸索着尝试解决,且看我的解决过…...
C语言学习之结构体
在C语言中,我们已经学了好几种类型的数据。比如整型int、char、short等,浮点型double、float等。但是这些都是基本数据类型,而这些数据类型应用在实际编程里显然是不够用的。比如我们没有办法用一旦数据类型来定义一个”人“的属性。因此这里…...
layui获取无法获取表单数据,data.field一直为空
form.on(submit(*), function(data){console.log(data.field) //当前容器的全部表单字段,名值对形式:{name: value}return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。}); console.log(data.field)一直显示为空࿰…...
「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI
一、概述 本篇介绍如何在 macOS 环境下本地部署 Ollama 推理服务,并通过 Open WebUI 实现可视化交互界面。该流程无需 CUDA 或专用驱动,适用于 M 系列或 Intel 芯片的 Mac,便于快速测试本地大语言模型能力。 二、部署流程 1. 环境准备 安装 Homebrew(如尚未安装):/bin…...
量子力学:量子通信
量子通信是利用量子力学原理对信息进行编码、传输和处理的新型通信方式,以下是其详细介绍及业界发展现状: 基本原理 量子叠加态 :量子系统可以处于多个状态的叠加,如光子的偏振方向可以同时处于水平和垂直方向的叠加态ÿ…...
《大型网站技术架构-核心原理与案例分析》笔记
:::info 💡 根据 遗忘曲线:如果没有记录和回顾,6天后便会忘记75%的内容 读书笔记正是帮助你记录和回顾的工具,不必拘泥于形式,其核心是:记录、翻看、思考::: 书名大型网站技术架构-核心原理与案例分析作者…...
log4cpp进阶指南
📝 log4cpp进阶指南 1. 按天切割日志 log4cpp 默认是按文件大小来切割日志的。为了按天切割日志,通常需要自己进行时间判断并手动处理日志文件的切割。 1.1 解决方案 虽然 RollingFileAppender 只支持按大小切割,但你可以使用以下策略&…...
树莓派超全系列教程文档--(43)树莓派内核简介及更新
树莓派内核简介及更新 简介更新 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 简介 Raspberry Pi 内核是 托管在 GitHub 上;更新滞后于上游 Linux内核。上游内核持续更新,而 Raspberry Pi 则将 Linux 内核的长期版本整合…...
第二章、在Windows上部署Dify:从修仙小说到赛博飞升的硬核指南
第1章:安装 wsl (Windows Subsystem for Linux) 上一章我们聊了什么是Dify,这一章我们讲一下怎么才能用Dify。 使用Dify就需要我们在本地部署Dify; 部署Dify就需要用到”Docker“; 要想使用“Docter”就需要用到wsl。 那什么是wsl呢?简单来说就是让你的电脑拥有另一个叫…...
淘宝商品主图标题api接口
1、输入淘宝商品id或者链接,点查询 2、查询淘宝商品主图,商品标题,商品价格,卖家旺旺 3、支持api接口...
小结:BFD
*BFD(双向转发检测,Bidirectional Forwarding Detection)是一种快速、轻量级的故障检测机制,用于检测网络中两点之间的连通性。它广泛应用于各种场景 1. 检测 IP 链路 应用场景: BFD 用于检测两台设备之间的 IP 层连…...
收藏按钮变色问题
1.问题描述 无论是否收藏,收藏按钮都显示黄色,但点击收藏按钮后却能发生颜色变化 2.解决思路 经过调试发现isCollected返回的是整个对象,因此在store的方法里面找到了相应的函数进行修改使得isCollected返回相应的值 修改前: 修…...