- 博客(294)
- 资源 (4)
- 收藏
- 关注

原创 Qt Designer的父子部件样式表设置学习
在Qt Designer中新建图像界面,放置两个QWidget,命名为widget_1和widget_2;单独改变了widget_2,但是隶属于widget_2的pushButton_1和pushButton_2并没有改变。需要注意的是,采用这种办法,如果被改变的小部件还有它的子部件,子部件并不跟随被改变的小部件的改变而改变。这里,将隶属于widget_1的类型为QPushButton的所有部件全部定义了新的显示特性。这个样式表的含义为:widget_1中,所有的QWidget都按照指定的样式表显示。
2024-07-27 00:13:29
1282
原创 STM32CubeIDE新建项目过程记录备忘(九) A/D转换并用串口定时上报
本项目,是将一个模拟量A/D转换后用USART输出,用开发板上的芯片转换成RS232电平后定时上传给上位机。同时对最近的学习做一个总结,归纳记录一下从模板项目建立新项目的方法,以及底层代码应用代码分离的框架的建立。复制粘贴新项目更改.ioc文件名称设置GPIO管脚和外设功能设置时钟设置生成成对的.h和.c文件以及生成hex文件设置中断设置调试配置生成代码设置完成后就进入软件编程阶段。新建xxx_app.h和xxx_app.c文件xxx_app.h内声明功能的初始化函数原型和功能函数原型。
2025-08-06 22:35:39
688
原创 STM32CubeIDE新建项目过程记录备忘(七)通用定时器中断
基本定时器:只有计数,简单应用。通用定时器:能PWM,能编码,没死区。高级定时器:可用于电机驱动,带刹车,带死区。
2025-08-05 11:52:05
682
原创 STM32CubeIDE新建项目过程记录备忘(六)USART接收不定长数据
上一篇,实验了中断方式的USART接收,其过程是接收缓冲区接收到的的数据长度达到设定字节后调用回调函数进行处理,并开启下一次接收。在实际的工程中很多通信数据的帧长度并不确定,本篇就是要解决这个问题。
2025-08-04 11:42:12
919
原创 STM32CubeIDE新建项目过程记录备忘(五)中断方式的USART串口通信
在STM32CubeIDE新建项目过程记录备忘(一) 创建一个基础的模板-CSDN博客里面,我已经将PA9和PA10配置为USART1的TX和RX,并完成了串口参数的设置。
2025-08-02 10:37:49
1119
原创 STM32CubeIDE新建项目过程记录备忘(三)GPIO的输入检测
GPIO的输入检测。我的板子,PC13接了一个按钮,在按钮两端有消抖电容,用以消除机械触点的抖动。PC13接有落地电阻R11,用途是降低输入阻抗,减少干扰。
2025-07-31 10:29:01
125
原创 STM32CubeIDE新建项目过程记录备忘(二) GPIO输出demo:LED闪烁
利用前面创建好的基础模板项目文件,创建第一个应用项目,单片机的hello world:LED闪烁。
2025-07-30 22:53:00
414
原创 STM32CubeIDE新建项目过程记录备忘(一) 创建一个基础的模板
• Data Direction:选择 “Transmit and Receive”(收发模式)。复制粘贴这个cfg文件,并重命名为dap.cfg(可自定义名字,是英文的即可)• Over Sampling:选择 “8” 或 “16”(过采样率)。无报错,并且控制台出现以下内容,就成功下载:(不要理会它的字体红颜色)选择固件版本,如果已有下载好的固件,要选择与已有固件相同的版本。• Mode:选择 “Asynchronous”(异步模式)。• Word Length:设置数据位,通常为 8 bits。
2025-07-29 17:36:32
479
原创 通信名词解释:I2C、USART、SPI、RS232、RS485、CAN、TCP/IP、SOCKET、modbus等
协议 / 接口传输方式速率距离典型应用场景I2C串行同步(2 线)低速(≤3.4Mbps)短(板内)芯片间通信SPI串行同步(4 线)高速(≤50Mbps)短(板内)高速外设通信USART串行异步 / 同步中速(≤2Mbps)中(数米)设备间串口通信RS232单端串行低速(≤115200bps)短(≤15 米)传统设备通信RS485差分串行中速(≤10Mbps)长(≤1200 米)工业分布式网络CAN差分串行中高速(≤1Mbps)
2025-07-27 21:37:38
1147
原创 STM32基础知识学习笔记:ICODE、DCODE、DMA等常见名词的解释
STM32 的 DMA 控制器通常包含多个独立通道(如 STM32F1 系列有 DMA1 的 7 个通道和 DMA2 的 5 个通道),每个通道可对应不同的外设请求(如 ADC、SPI、UART、TIM 等),支持同时处理多个外设的数据传输。总之,APB 是 STM32 中负责低速外设连接的 “辅助通道”,与 AHB 总线分工协作,既保证了系统核心的高性能,又兼顾了外设的低成本和低功耗需求,是嵌入式微控制器总线架构的重要组成部分。在 STM32 中,Flash 不仅存储程序指令,还存储常量数据。
2025-07-25 15:45:15
618
原创 C 语言的指针复习笔记
指针是 C 语言的灵魂,其核心是 "通过地址间接操作内存"。指针的声明与初始化(指向有效内存);解引用()和取地址()的操作;指针与数组、函数的结合使用;动态内存分配中指针的管理;规避野指针、内存泄漏等常见错误。
2025-07-21 20:51:58
529
原创 优象光流模块,基于python的数据读取demo
优象光流模块,型号UP-FLOW-LC-302-3C,准备将其应用于设备的运行速度测量,物美价廉。与官方的给定略有出入,不过主要字节的顺序是对的。
2025-07-04 22:20:21
218
原创 二维标记系统ArUco
ArUco是计算机视觉中广泛使用的二维 fiducial 标记系统,专为高精度定位和姿态估计设计。ArUco 是 OpenCV 库中的一个模块,基于 ARTag 开发。
2025-06-26 17:14:17
513
原创 海康威视工业相机,获取图像的两种方法:MV_CC_GetImageBuffer与MV_CC_RegisterImageCallBackEx 的区别
在海康威视的 Python SDK 里,和这两个函数都是用于获取图像数据的。主动获取图像:通过调用该函数,应用程序直接从 SDK 的内部缓冲区中获取图像数据。1. 调用MV_CC_StartGrabbing() 启动图像采集。2. 在应用层循环调用MV_CC_GetImageBuffer() ,取图的线程阻塞等待相机返回图像数据,如果有设置超时,超时后返回无图像ret并启动下一个调用循环。3. 处理完图像数据后,调用MV_CC_FreeImageBuffer()释放缓冲区。
2025-06-24 22:47:29
567
原创 海康威视GigE工业相机的python调用demo
默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\BasicDemo下的BasicDemo.py中,海康威视官方提供了基本的调用方法,本文也是基于这个修改的。BasicDemo.py提供了通过枚举选择相机的方法,在官方的另一个DEMO:ConnectSpecCamera.py中提供了另一种不通过枚举,直接访问特定IP相机的方法,也可以参考。另外,如果每台相机都定义了唯一的用户定义名,也可以通过用户定义名来区分相机。
2025-06-17 22:36:45
1268
5
原创 python的海象运算符 :=
海象运算符(Walrus Operator)是 Python 3.8 版本引入的一个新特性,其符号为:=。海象运算符”这个名字源于其外观,:=这一符号组合看起来和海象的眼睛与长牙有几分相似。它的主要作用是在表达式内部进行赋值操作,这样可以减少代码的重复,使代码更加简洁和高效。
2025-03-28 23:07:01
364
原创 pyside6的QGraphicsView体系,当鼠标位于不同的物体,显示不同的右键菜单
【代码】pyside6的QGraphicsView体系,当鼠标位于不同的物体,显示不同的右键菜单。
2025-03-24 22:42:50
405
原创 PySide(PyQt),QGraphicsView 类的橡皮筋选择框的 rubberBandChanged 信号与拖动模式QGraphicsView.DragMode
当用户开始拖动鼠标创建橡皮筋选择框、拖动过程中橡皮筋选择框的大小和位置发生变化,或者释放鼠标结束橡皮筋选择框的创建时,从运行结果看得出,当松开鼠标时,发送了一个全0信号,用以复位矩形区域,可以将其作为选择结束的标志,来进行下一步的操作。信号在橡皮筋选择框的状态发生变化时被发射。橡皮筋选择框是用户通过鼠标拖动在视图中创建的一个矩形框,常用于选择。函数用于设定视图的拖动模式,此模式决定了用户在视图里进行鼠标拖动操作时的行为表现。在 PySide6 中,在 PySide6 里,,这个参数定义了不同的拖动模式。
2025-03-21 22:49:03
384
原创 python的MRO学习笔记
在Python中,MRO(Method Resolution Order)即方法解析顺序,它定义了在多重继承的情况下,Python 解释器查找方法和属性的顺序。
2025-03-21 09:23:48
516
原创 用于AI-CV项目标注的星标模型
功能:生成星标图形项,并在目标点上将底图颜色反色显示,当定位和拖动后输出底图在标记点的像素值。输入和输出使用信号槽机制。
2025-03-17 18:07:27
770
原创 PySide(PyQt),QGraphicsItem的坐标映射转换函数
类提供了多个映射函数,用于在不同坐标系(例如:项目坐标系、父坐标系和场景坐标系)之间转换坐标和矩形。这些函数非常有用,尤其是在处理复杂的图形场景和需要精确位置信息的情况下。这些函数对于处理和转换不同图形元素之间的相对位置和尺寸非常有用。通过使用这些函数,你可以确保所有项目在同一个参考框架下正确渲染和计算,这对于构建复杂界面或进行精细化的图形操作非常重要。在PySide6中,
2025-03-17 12:04:14
396
原创 python的@typing.overload学习笔记
typing.overload 是 Python 标准库 typing 模块中的一个装饰器,用于定义函数的多个重载版本。它的主要作用是提供更详细的类型信息,帮助开发者理解函数在不同情况下的预期输入和输出类型,同时也能增强静态类型检查工具(如 mypy)的能力,以检测潜在的类型错误。@typing.overload 是 Python 中类型提示(type hinting)的一部分,用于指示函数或方法的不同重载版本。通常,@typing.overload 与实际的函数实现结合使用。
2025-03-14 11:28:34
362
原创 PySide(PyQt),使用types.MethodType动态定义事件
以PySide(PyQt)的图片项为例,比如一个视窗的场景底图是一个QGraphicsPixmapItem的,需要修改它的鼠标滚轮事件,以实现鼠标滚轮缩放显示的功能。为了达到这个目的,可以重新定义一个QGraphicsPixmapItem类,并重写它的wheelEvent()函数:然后再代码中实例化这个类就可以了,这没有任何问题。 首先,场景中只有这一个场景底图,而且我只需要修改它的鼠标滚轮事件响应这一个函数,为了这简单的一个需求重建一个新的类,不是那么优雅。然后,鼠标滚轮缩放显示的这个
2025-03-13 16:45:23
1001
原创 Python的types库学习记录
types 库提供了一些有用的工具和常量,帮助开发者在运行时处理和操作不同类型的对象。通过使用这些工具,开发者可以实现动态类型检查、动态方法绑定和动态模块创建等功能。
2025-03-13 15:19:06
371
原创 PySide(PyQt),QGraphicsItem的父子图像项的一个练习demo
在 PySide( PyQt)中,是用于在中创建可绘制对象的基类。支持父子关系,这种父子关系允许将多个图形项组合在一起,形成一个层次结构。当父项在场景中添加、移除以及移动、旋转或缩放时,子项会相应地跟随父项进行操作和变换。
2025-03-12 16:08:13
446
原创 PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
特性pos()scenePos()坐标系父项坐标系(局部坐标)场景坐标系(全局坐标)顶层项如果没有父项,pos() 和 scenePos() 的值相同总是返回场景中的绝对位置有父项返回相对于父项的位置返回场景中的绝对位置用途操作局部位置获取全局位置• pos()表示图形项在其父项坐标系中的位置。• scenePos()表示图形项在场景坐标系中的绝对位置。• 根据需求选择合适的坐标系和方法,可以更灵活地操作和管理图形项的位置。
2025-03-11 23:18:59
983
原创 PySide(PyQT),QGraphicsRectItem的setPos()和setRect()的坐标位置的区别
上述代码的含义是创建一个QGraphicsRectItem实例,并且等同于执行了setRect(0, 0, 120, 60),由于没有设置它的pos(),所以它在场景中的位置是(0, 0)。之后,用鼠标就可以将图形项QGraphicsRectItem在场景中拖动,拖动之后改变的是图形项的pos()参数,即他在父项坐标系的位置,本例中即为场景的坐标系。即setRect()设定的参数,参照系仍然是相对于图形项原点的位置。
2025-03-11 22:46:27
493
原创 PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的区别
简单来说,它主要处理鼠标拖动操作。QMouseEvent 提供了丰富的信息和方法,例如可以使用 buttons() 方法来检查哪些鼠标按钮被按下,使用 pos() 方法获取鼠标相对于图形项的位置,使用 scenePos() 方法获取鼠标在场景中的位置等。当鼠标在对应的图形项上移动,且没有任何鼠标按钮被按下时,hoverMoveEvent 会被触发,也就是单纯的鼠标悬停移动。需要注意的是,要使图形项能够接收悬停事件,必须调用 setAcceptHoverEvents(True) 方法来启用悬停事件的接收。
2025-03-11 11:25:22
538
原创 PySide(PyQT)的contains() 方法
在 PySide中,contains()方法主要用于判断点、矩形或其他区域是否包含在某个特定的矩形或区域内。
2025-03-09 17:04:22
282
原创 python,isinstance() 和type()的区别
当需要判断一个对象是否具有某种特定的行为或属性,而不关心它具体是哪个类的实例,只要它是某个类或其子类的实例就满足条件时,通常使用。比如在多态的场景中,不同的子类可能都实现了某个特定的方法,只需要判断对象是否是能够调用这个方法的类的实例即可。:当需要严格判断对象的类型,不希望考虑继承关系,只关心对象是不是某个特定类的实例,而不是其子类的实例时,使用。返回的是对象的直接类型,不会考虑继承关系,即便是子类的实例,它也只返回子类本身的类型,而不会返回父类的类型。函数主要用于返回对象的类型。
2025-03-09 11:48:36
406
原创 PySide(PyQT)的视图(QGraphicsView)范例(三) 后端代码
前面的系统规划已经明确了本项目使用右键菜单和信号槽来实现,所以每个功能组件都要有右键弹出功能,而且不同的组件和工作状态可能需要不同的右键菜单;另外每个代码板块要有信号出入接口,板块之间通过信号传递信息,在板块内通过槽函数实现功能。
2025-03-07 18:17:28
697
原创 PySide6的QFileDialog.getOpenFileName()打开特别慢的原因
在默认情况下,也就是上述的代码,QFileDialog.getOpenFileName 会使用操作系统提供的原生文件选择对话框。发现选择了文件之后,需要经过很长时间才能显示图片,有时甚至到10秒之久。解决方法:不使用系统原生对话框(options=QFileDialog.DontUseNativeDialog),而是使用QT自带的文件对话框。
2025-03-07 16:21:46
308
原创 PySide(PyQT)的视图(QGraphicsView)范例(二) 功能规划
• 当点击了“保存规则”或“退出编辑”,退出编辑模式,进入空闲模式,鼠标变回箭头光标。当点击了“保存规则”,将规则的内容:框的位置(绿色边框)、规则的正则公式、取样点的位置保存到JSON或者数据库文件。• 当点击了“新建规则”,进入编辑模式,鼠标变为十字光标,按住鼠标左键画红色的框,确定或更新取样范围;在规则方框范围内单击鼠标,增加取样点,并在取样点上显示取样图标。• 当点击了“编辑当前规则”,又进入编辑模式,与前述的点击了“新建规则”进入的编辑模式相同。根据以上需求,设计信号和槽以及右键事件。
2025-03-05 21:38:03
361
原创 PySide(PyQT),怎样在非QObject对象上应用信号槽框架
在 PySide(以及 PyQt)中,信号和槽机制是基于QObject 类实现的。只有继承自 QObject 的类才能够定义和使用信号与槽。那么如果画面中的对象不是QObject 类,就无法使用信号和槽。QGraphicsRectItem.__init__(self, *args) 和 QObject.__init__(self),显式地调用了父辈的构造函数并指定入参分配。
2025-03-05 01:01:27
455
试试用pyqt做一个上位机软件,但愿不会烂尾(七)配套资源
2023-03-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人