windowOpacity
cursor
font
toolTip
focusPolicy
styleSheet
按钮类控件
QPushBotton
按钮图标
按钮移动
按钮快捷键
QRadioBotton
QCheckBox
显示类控件
QLabel
文本格式
图片格式
文本效果
绑定伙伴
QLCDNumber
倒计时
QProgressBar
进度条增长
QCalendarWidget
显示选中的日期
输入类控件
QLineEdit
收集数据
验证数据
密码是否一致
密码格式
QTextEdit
同步
QComBox
点餐系统
QSpinBox
购物车
QDateTimeEdit
日期计算器
QDial
透明度调节器
QSlider
窗口调节器
自定义快捷键
多元素控件
QListWidget
新增与删除
QTableWidget
QTreeWidget
容器类控件
QGroupBox
QTabWidget
布局管理器
QVBoxLayout
QHBoxLayout
QGridLayout
QFormLayout
QSpacer
控件,也称为小组件、小部件,比如:按钮,文本框,下拉框等都是控件,控件可以通过代码Widget(内置了很多控件)来实现,也可以使用以ui的方式实现
早期要想在界面上设计可没有控件这一词,都是要通过调用api接口,把界面当成画板“画”出来的,呈现出现就不太美观;控件则是随着时间的发展前人为了方便后人的开发,一步一步实现出来的,从此我们就直接使用控件来开发不需要自己“造轮子”
描述一个控件是否处于“可用”状态,如果是“禁用”状态:显示出来的控件呈现灰色,用户无法使用;且继承它的各种控件也会被“禁用”
isEnabled
获取控件当前状态
setEnabled
设置控件状态:true为可用,false为禁用
案例:ui设计两个按钮,一个正常使用,一个对按钮状态进行切换
获取控件的属性(x,y,width,height),结果需要改变控件的位置或者形状(单位像素)
geometry()
获取控件的属性,类型为QRect
setGeometry(QRect rect)
改变控件的属性
setGeometry(int x,int y,int width,int height)
只改变一些属性其它保持不变
案例:通过四个控制按钮来控制按钮进行上下左右移动
此时虽然可以达到目标,但按钮的形状也因此发生改变
我们要实现移动的同时不改变形状(按钮平移)可以使用另一个版本的函数来实现
案例:按钮选择器
按钮点击效果
qt界面形成时会自带系统的窗口框架window fram进行填充,导致是要以窗口框架的(0,0)为参照物还是widget窗口(0,0)作为参照物;为了解决这一问题,qt提供了不同的API对应不同参照物产生的效果,比如 geometry()返回的是以widget窗口(0,0)作为参照物,frameGeometry()则是以winodw fram的(0,0)作为参照物
使用代码进行验证
设置窗口标题,使用窗口控件widget设置后生效,其它控件像pushbutton虽然也能设置,但是没有生效,因为它只是作为按钮控件来使用的,无法更改窗口标题
windowtitle()
获取窗口标题
setWindowTitle(QString&)
设置窗口标题
案例:设置窗口widget标题
设置界面图标,也是只有窗口控件widget才能设置生效
windowIcon()
返回QIcon对象
setWindowIcon(QIcon)
设置界面图标
创建QIcon对象时要传入设置图标的图片路径;不使用new的方式创建QIcon对象,直接在栈上开辟:设置后即使该对象销毁图标还是可以成功设置,QIcon不支持挂接到对象树上
但是上面的问题是:如果该程序开发后是在用户电脑上跑,在用户电脑的该目录上肯定是没有这个图片资源的,难不成还要用户在对应的文件路径自己设置?
为此Qt提供了qrc机制:创建后缀为.qrc文件,把图片资源加载进来;此时构造icon对象的路径就是.qrc文件,程序运行是就要在.qrc文件中找到图片资源后,自动生成的C++代码,使用数组把图片的二进制数据保存起来与程序一同执行,此时生成的图片资源就称为exe程序的一部分
数组界面透明度:值范围【0.0,1.0】,值越小越透明
windowOpacity()
获取当前界面透明度
setWindowOpacity(float)
设置透明度
案例:通过两个按钮调节界面透明度
修改 opacity 后的结果
为什么加减0.1不是准确的?
因为浮点数在内存的储存要遵循 IEEE 754的规定(使用科学计数法来表示浮点数)把浮点数分为三部分:符号位,有效数字,指数部分,其中有效数字是使用二进制表示的小数,最小为0.5,想0.1这种数取不到完整的部分就只能去一个接近的数进行浮点数的加减,所以会出现以上情况,像 0.1 + 0.2 == 0.3这样的判断结果为false也是存在的,需要使用作差方式进行判断
设置界面鼠标移动时产生的光标
cursor()
返回空间的cursor对象
setCursor(QCursor& )
使用cursor设置光标
QGuiApplication::setOverrideCursor(QCursor& )
设置全局光标
使用ui进行属性设置cursor
使用代码进行设置,但Qt提供的光标样式有点历史的味道,我们可以传入图片(qrc机制)设置光标变好看
设置控件字体
font()
返回控件 QFont对象
setFont(font&)
设置控件字体
属性
说明
setFamily(QString&)
设置字体样式,如“仿宋”,“微软雅黑”
setPointSize(int)
设置字体大小
setWeight(int)
字体粗细程度,范围【0,99】
setBold(bool)
是否加粗
setItalic(bool)
是否倾斜
setUnderline(bool)
是否带有下划线
setStrikeOut(bool)
是否带有删除线
案例:设置按钮字体样式
也可以使用ui来进行设置
光标指导某个控件时,有悬空提示词的效果
setToolTip()
设置提示词对象
setToolTipDuring()
案例:添加按钮提示词3秒
设置控件获取到焦点的策略,⽐如某个控件能否⽤⿏标选中或者能否通过 tab 键选中
focusPolicy()
获取控件的 FocusPolicy对象
setFocusPolicy(Qt::FocusPolicy policy)
设置控件的焦点
Qt::FocusPolicy 是一个枚举类型
案例:设置三个行输入框为不同焦点
也可以通过ui的方式设置
Qt搞了一套与CSS(层叠样式表)类似的QSS来对控件设置样式(“打扮”)
案例:实现两个按钮:一个按下变成夜间模式(背景黑文字白),一个按下变成白天模式(背景白文字黑)
但你可以发现上面的白天模式与程序启动时的窗口颜色不太对
怎么进行调整使得与上面效果一致?
涉及计算机表示颜色表示:使用 rgb(red green blue)的数值来表示,范围【0,255】,电脑上不同的颜色通过不同的比例调制出来的;使用数值表示(设置)颜色:如rgb(255,0,0)表示的是纯红色;那如何知道程序启动时窗口的颜色比例? 可能使用qq自带的截图工具来获取
重新进行白天模式代码调整
常见的点击按钮
text
按钮中的⽂本
icon
按钮中的图标
iconSize
按钮中图标的尺寸
shortCut
按钮对应的快捷键
autoRepeat
按钮是否可以重复触发(单击和连击的效果)
案例:设置按钮图标:与设置窗口图标类似:创建 QIcon 对象,调用 SetIcon 函数
案例:通过四个按钮的图标,控制目标按钮上下左右方向移动
接下来把键盘快捷键设置到各个按钮中
单选按钮
checkable
是否能选中
checked
是否已经被选中
autoExclusive
是否排他(RadioButton的默认选项)
排他:选中⼀个按钮之后是否会取消其他按钮的选中
案例:性别选择器
增加需求
单选按钮的信号选择有多种
特别注意clicked(bool) 与 toggled(bool)的区别:clicked的bool为true代表点击了按钮(一直点击一直生效,bool为false代表取消选择了按钮),toggled的bool代表是否选择了按钮(第一次生效,选择后再次点击就不生效;bool为false也是代码取消选择了按钮)
案例:点餐选择器
复选按钮,与单选按钮类似,只不过一次可以选择多个
案例:每日选择器(选择两件事以上)
显示文本和图片
textFormat
设置文本格式
案例:创建三种不同的文本显示
pixmap
使用 QPixMap 对象给 QLabel 设置图片
scaledContents
图片是否可以拉伸
案例:给 label 设置图片,并且将窗口给占满
但如果此时拉伸窗口的话,图片并没有跟着改变
如果要想实现拉伸窗口的同时图片也跟着改,就需要再 Widget 中重写 QWidget 的 resize (事件)的函数:此后拉伸时就会自动调用该函数,执行 Widget 重写的 resize 函数
alignment
对⻬⽅式 可以设置⽔平和垂直⽅向对齐,也就是居中对齐
wordWrap
是否自动换行
indent
文本自动缩进的大小
margin
内部⽂本和边框之间的边距(文本上下左右四个方向都生效)
案例:设置不同的文本效果
先设置 label 的边框,待会好观察现象
buddy
给 QLabel 关联⼀个 "伙伴" ,点击QLabel就能激活对应的伙伴
案例:绑定单选按钮,让它根据 QLabel 设置的快捷键进行跳转(设置快捷键:&键盘字母)
显示数字
intValue
显示的数字值(int)
value
显示的数字值(double)
display
设置数字值
案例:设置一个从10到0的倒计时,在界面上显示(使用LCD number实现)
直接在 Widget 构造中使用循环while来实现倒计时行吗?
Qt 要先创建 Widget 对象后执行show 函数才能显示界面给用户,其中就需要先完成构造,所以上述方法无法成功实现;使用线程可以吗? 同样也是不行,Qt界面内置了很多隐藏状态,使用线程修改有线程安全问题,Qt禁止你创建线程修改,必须使用主线程来实现
显示进度条
前面在 Widget.h 定义 QTimer* timer使用时,即使没包含QTimer头文件,编译也是可以通过的,为什么不会出现未定义的错误?
主要是为了解决多个头文件包含导致编译速度慢的问题,编译时如果代码包含头文件在预处理阶段要把该头文件上的代码进行展开,如果头文件比较大非常影响编译速度;但实际开发时不要因为头文件的影响就尽量不包含头文件,与其通过这种方式提供编译速度,不如提高编译硬件资源来大幅度提高编译速度更实在点
如果觉得绿色不好看,我们也可以修改进度条的颜色
显示日历
selectDate
当前选中的日期
selectionChanged(const QDate&)
选中的日期发生改变时发出该信号
案例:选择日期在标签上显示
单行输入框
text
输入框中的文本
inputMask
输入框内容格式约束
placeHolderText
输入框为空时可以设置提示信息
clearButtonEnabled
是否出现清除按钮
echoMode
显示方式
QLineEdit::Password 输入的字符使用其它字符代替
QLineEdit::NoEcho 输入的字符不会进行显示
validator
设置验证器,比如正则表达式验证器 RegEspValidator
textChanged(QString)
当QLineEdit中的文本改变时,发出此信号,QString是新的文本
代码对⽂本的修改能够触发这个信号
textEdited(QString)
当QLineEdit中的⽂本改变时,发出此信号,QString是新的⽂本
代码对⽂本的修改不能触发这个信号
案例:输入两次密码,通过文本显示判断当前输入是否一致
案例:通过密码格式按钮,转换当前密码格式
多行输入框,也是⼀个富⽂本 && markdown编辑器
toPlainTex
获取 TextEdit 的文本
VerticalScrollBarPolicy
设置右边滚动框
Qt::ScrollBarAlwaysOn 开启
Qt::ScrollBarAlwaysOff 关闭
textChanged
TextEdit 输入文本就会触发这个信号
案例:在多行输入框输入的文本,同步到 label 中
认识其它信号
currentCharFormatChanged()
文本格式发生改变时触发
selectionChanged()
选中范围改变时触发
cursorPositionChanged()
光标移动时触发
undoAvailable(bool)
可以进行 undo操作(ctrl + z 回退)时触发
redoAvailable(bool)
可以进行 redo操作(ctrl + y 前进)时触发
copyAvaiable(bool)
⽂本被选中/取消选中时触发
下拉框
addItem
往下拉框添加信息
currentText
当前选中的⽂本
案例:点餐系统
还可以使用 ui 设置文本
除了自己设置文本,还可以从文件中读取
微调框
value
存储的数值
range
限定微调框的范围
案例:选择商品后,可以调整需要的个数
dateTime
上面计算结果明明是0天却被多算了1天,原因在与数据天数的函数不准确,需要手动来计算
旋钮
range
旋钮值范围
notchesVisible
是否显示刻度线
sliderPosition
调整初始值
wrapping
是否允许循环调整
valueChanged(int)
数值改变时触发该信号
案例:使用旋钮调节窗口透明度
滑动条
value
持有的数值
sliderPosition
滑动条显示的初始位置
range
数值范围
singleStep
移动的步长
valueChanged(int)
数值改变时触发
案例:使用水平垂直两个滑动条调节窗口大小
案例:使用自定义快捷键(+ 增加 - 减小)调整滑动条大小
多元素控件一般是成对存在:xxWidget 和 xxView,它们之间的区别
显示纵行的列表
currentRow
当前被选中的是第几行
addItem(const QString&)
addItem(QListWidgetItem*)
列表中添加元素
QListWidgetItem 可以对元素进行设置
setCurrentRow(int)
设置当前选择的行号
insertItem(const QString&,int )
在指定的位置插⼊元素
takeItem(int)
删除指定行的元素
案例:标签上的用户输入的文本进行(使用按钮)新增到列表中,选择列表行号进行删除
表格
setItem(int row,int column,QTableWidget*)
根据行数列数设置表格中的元素
currentItem
返回被选中的元素
currentRow
返回被选中元素是第几行
currentColumn
返回被选中元素是第几列
rowCount
获取行数
columnCount
获取列数
insertRow(int row)
在第 row 行处插⼊新行
insertColumn(int column)
在第 column 列插⼊新列
removeRow(int row)
删除第 row 行
removeColumn(int column)
删除第 column 列
setHorizontalHeaderItem(int column,QTableWidget*)
设置指定列的表头
setVerticalHeaderItem(int row,QTableWidget*)
设置指定行的表头
案例:设置四个按钮分别进行新增行,新增列(通过输入框内容设置表头),删除行,删除列
树形控件,类似思维导图;可以给 QTreeWidget 设置顶层节点(顶层节点可以有多个),然后再给顶层节点添加子节点,从⽽构成树形结构;注意:在 qt 中设置顶层节点 QTreeWidget 的方法与其它节点 QTreeWidgetItem 提供的方法是不同的
QTreeWidget 方法
addTopLevelItem(QTreeWidgetItem* item)
新增顶层节点
topLevelItem(int index)
获取指定下标的顶层节点
topLevelItemCount()
获取顶层节点个数
indexOfTopLevelItem(QTreeWidgetItem*
item)
查询顶层节点的下标
takeTopLevelItem(int index)
删除指定的顶层节点 返回 QTreeWidgetItem* 表示被删除
的元素
currentItem()
获取到当前选中的节点,返回 QTreeWidgetItem*
setCurrentItem(QTreeWidgetItem* item)
选中指定节点进行设置
setExpanded(bool)
展开/关闭节点
setHeaderLabel(const QString& text)
设置 TreeWidget 的 header名称
QTreeWidget 信号
currentItemChanged(QTreeWidgetItem*
current,QTreeWidgetItem* old)
切换选中元素时触发
itemClicked(QTreeWidgetItem* item,int col)
点击元素时触发
itemDoubleClicked(QTreeWidgetItem* item,
int col)
双击元素时触发
itemEntered(QTreeWidgetItem* item,int col)
⿏标进⼊时触发
itemExpanded(QTreeWidgetItem* item)
元素被展开时触发
itemCollapsend(QTreeWidgetItem* item)
元素被折叠时触发
QTreeWidgetItem 方法
addChild(QTreeWidgetItem* child)
新增⼦节点
childCount()
⼦节点的个数
child(int index)
获取指定下标的子节点,返回 QTreeWidgetItem*
takeChild(int index)
删除对应下标的子节点
removeChild(QTreeWidgetItem*
child)
删除对应的子节点
parent()
获取该元素的父节点
案例:根据按钮完成对树状图的修改
以上多元素控件如果程序结束后再重启,之前所执行的各种操作所产生的数据就都不见,因为是内存级数据,如果要想在程序结束之前把数据保留,就可以通过以文件的形式写到文件中,后续启动之前就从文件读即可恢复出来
容器类控件可以使用嵌套以上控件进行组合使用
核心属性
title
分组框的标题
alignment
分组框内部内容的对⻬⽅式
flat
是否是 "扁平" 模式
checkable
是否可选择
设为 true,则在 title 前⽅会多出⼀个可勾选的部分
checked
描述分组框的选择状态 (前提是 checkable 为 true)
案例:点餐系统(使用 ui 完成)
带有多个标签页的控件,可以进行切换显示出不同的标签页
核心属性
tabPosition
标签⻚所在的位置
• North 上⽅
• South 下⽅
• West 左侧
• East 右侧
currentIndex
当前选中了第⼏个标签⻚(从 0开始计算)
currentTabText
当前选中的标签⻚的⽂本
currentTabName
当前选中的标签⻚的标题
currentTabIcon
当前选中的标签⻚的图标
currentTabToolTip
当前选中的标签⻚的提⽰信息
tabsCloseable
标签⻚是否可以关闭
movable
标签⻚是否可以移动
核心信号
currentChanged(int)
在标签⻚发⽣切换时触发,参数为被点击的选项卡编号
tabBarClicked(int)
在点击选项卡的标签条的时候触发,参数为被点击的选项卡编号
tabBarDoubleClicked(int)
在双击选项卡的标签条的时候触发,参数为被点击的选项卡编号
tabCloseRequest(int)
在标签⻚关闭时触发,参数为被关闭的选项卡编号
案例:设置两个按钮来分别进行新增标签页和删除标签页
之前设计的控件中,位置 ,大小都是我们自己“手动”进行设置的,每次进行修改需要一点点调大小才能设计出较美观的设计,这是不怎么“科学”的,为了解决 Qt 引入了布局管理器机制
垂直布局管理器
核心属性
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上⽅边距
layoutBottomMargin
下⽅边距
layoutSpacing
相邻元素之间的间距
案例:将三个按钮设置进 QVBoxLayout 中
可以随着窗口大小进行调整
使用 ui 进行操作可以一次设计出多个 QVBoxLayout 出来,但是不能随着窗口变化
为什么不能随着窗口变化而变化?
因为通过 ui 创建出来的 QVBoxLayout 控件,已经提前创建出一个 QWidget 作为父节点管理者 QVBoxLayout,这也是能创建出多个 QVBoxLayout 的原因
水平布局管理器
案例:垂直布局中嵌套水平布局
网格布局,⽤来实现⽹格布局的效果,可以达到 M* N的这种⽹格的效果
核心属性
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上⽅边距
layoutBottomMargin
下⽅边距
layoutHorizontalSpacing
相邻元素之间⽔平⽅向的间距
layoutVerticalSpacing
相邻元素之间垂直⽅向的间距
layoutRowStretch
⾏⽅向的拉伸系数
layoutColumnStretch
列⽅向的拉伸系数
案例1:使用网格布局设置六个按钮,实现 2 * 3 的效果
案例2:设置水平拉伸系数,按照 1:1:2 比例进行排布
案例3:设置垂直拉伸系数,按照 1:1:2 比例进行排版
看起来是没有符合我们的预期:本来一个第2行的比例较前两个大的,但却没有,而设置的水平拉伸却可以,这是因为水平拉伸默认可以拉伸开,垂直却不行,需要进行设置才可以拉伸开
方法:使⽤ setSizePolicy 设置按钮的尺⼨策略,可选的值如下
使用 QSizePolicy::Expanding 对 QWidget 进行设置
表单布局,类似 html 实现的 form 表单
Spacer 控件效果为空白,使用布局时要想让界面的控件不要紧挨着一起就可以使用它来调整
核心属性(在构造函数设置)
案例:设置的两个按钮之间使用 QSpacer 隔开
通过上⾯的学习,我们就了解了 Qt 中常⽤控件的使⽤⽅法,对于图形界⾯开发,知道有哪些控件,每个控件有什么作⽤,如何使⽤,是最核⼼的部分;基于上⾯内容其实我们就已经可以写出⼀些具有实际意义的图形化程序了
本文主要阐述了:RocketMQ 这一消息中间件如何通过其领域模型和技术架构来实现高效的消息处理能力。RocketMQ 的直连模式部署有助于简化系统结构,而存储计算分离部署则提高了资源利用率。其通信机制确保了消息的快速传递,而存储机制则针对数据持久化进行了优化。RocketMQ 的核心原理,包括元数据管理、高效的存储层实现、单条消息存储格式以及构建消息索引。此外,高可用机制确保了系统的稳定性,而架
浅谈B+树索引加速搜索原理
网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
QT是是一个有名的GUI框架,用来开发和用户交互的图形界面,QT在这一方面做
一:同步锁的职责同步锁的职责可以说就一个,限制资源的使用(线程安全从属)。它一般至少会包含两个功能: 1. 给资源加锁;2. 给资源解锁;另外,它一般还有 等待/通知 即 wait/notify 的功能;同步锁的应用场景:多个线程同时操作一个事务必须保证正确性;一个资源只能同时由一线程访问操作;一个资源最多只能接入k的并发访问;保证访问的顺序性;同步锁的实现方式:操作系统调度实现;应用
雪花算法what:SnowFlake算法是什么?什么是分布式?什么是微服务?why:为什么要使用SnowFlake雪花算法与UUID进行对比,都能够实现唯一标识ID。雪花算法优势:雪花算法劣势:UUID优势:UUID劣势:Who When Where雪花算法实现的原理雪花算法代码实现后记what:Sno
一、概述 符号表是一种用于存储键值对(key-value pair)的数据结构,我们平常经常使用的数组也可以看做是一个特殊的符号表,常大的数组。散
''' KNN 近邻算法,有监督学习算法 用于分类和回归 思路: 1.在样本空间中查找 k 个最相似或者距离最近的样本 2.根据这 k 个最相似的样本对未知样本进行分类 步骤: 1.对数据进行预处理 提取特征向量,对原来的数据重新表达 2.确定距离计算公式 计算已知样本空间中所有样本与未知样本的距离
一、DNS( Domain Name System)--域名系统,是一种组织成域层次结构的计算机和网络服务系统,用于TCP/IP网络,提供将主机名和域名与IP地址相互转换的服务。它的基本工作原理用下图来表示。 域名虽然便于人们记忆,但计算机只能通
一. LruCache基本原理LRU全称为Least Recently Used,即最近最少使用。LRU算法就是当缓存空间满了的时候,
hbase写流程1、HBase是一种Log-StructuredMergeTree架构模式,2、用户数据写入先写WAL,再写缓存,3、满足一定条件后缓存数据会执行flush操作真正落盘,形成一个数据文件HFile。什么叫Compaction(压缩合并)1、随着数据写入不断增多,flush次数也会不断增多,进而HFile数据文件就会越来越多。2、然而,太多数据文件会导致数据查询IO次数增多,因此HB
ClickHouse 是新生代的 OLAP,尝试使用了很多有趣的实现,虽然仍旧有很多不足,比如不支持数据更新、动态索引较差、查询优化难度高、分布式需要手动设计等问题。但由于它架构简单,整体相对廉价,逐渐得到很多团队的认同,很多互联网企业加入社区,不断改进 ClickHouse。ClickHouse 属于列式存储数据库,多用于写多读少的场景,它提供了灵活的分布式存储引擎,还有分片、集群等多种模式,供
STM32 的芯片中具有 bxCAN 控制器 (Basic Extended CAN),它支持 CAN 协议 2.0A 和 2.0B 标准。该 CAN 控制器支持最高
1,DHCP基本概念dynamic host configuration protocol 动态主机配置协议2,工作原理a, dhcp discover 寻找服务器b ,dhcp offer 服务器提供ipc, dhcp request 接受租约d, dhcp ack 确认租约3,提供参数ip地址 ne
在 和大模型 对话时,亦或者在使用和设计prompt 时,有以下几个原则与建议。记住这几个原则,能让你写出 更好的 prompt.如果你是直接使用AI 产品,比如ChatGPT 或 者Midjourney, 那无需在童这个原则。如果你是通过API 或 者OpenAI Playground 的方式使用,则建议你先使用最新的模型测试之所以强调一定要使用最新的模型,是因为不使用最新的模型部分技术和数据在不更新的情况下,使用起来是超级 麻烦的、超级不顺利的~这个是对结果影响最大的因素。
【1】分支基础① 什么是分支在版本控制过程中,使用多条线同时推进多个任务。② 分支的好处?同
在 Linux 中,sudo -i 的作用是 启动一个模拟 root 用户登录的环境(login shell),让你进入一个“像是用 root 登录系统一样”的 Shell。 下面是重点解释: ✅ sudo -i 做了什么? 当你执行: sudo -i 它会: 1. 切换到 root 用户 你获得 ...
效果 动态效果: 实现 运动物体检测是计算机视觉中的一个重要应用,广泛应用于安防监控、交通分析、人机交互等领域。本文将详细介绍如何使用OpenCVSharp中的MOG(Mixture of Gaussians)算法实现运动物体检测,并通过一个完整的WPF应用程序示例展示实际应用。 什么是MOG算法? ...