13 绘图
Qt的绘图系统Qt中的绘图和之前使用OpenCV时在图中进行绘图的方式差别还是很大的,在用OpenCV时,一般都是主动调用绘图函数就行了,但是在Qt中,如果要在控件上绘制东西,一般都得是在其绘图事件中进行绘制,并不能主动调用绘图函数。 Qt中针对不同的控件,绘图的方式区别很大 这些控件主要分为2类 继承自QWidget的控件:重写paintEvent,在此函数里面用QPainter进行绘图 Graphics View相关的控件:此类控件不会触发paintEvent,需要调用函数往场景中插入元素来显示 Qt的绘图系统主要包括2部分 QPainter绘图系统:绘制基本的点、线等形状组成自己需要的图形,得到的图形是不可交互操作的 Graphics View绘图系统:绘制复杂的组件化图形,每个图件是可选择、可交互的 1.QPainter绘图系统QPainter绘图系统主要包括以下几部分: QPainter类:用于进行绘图操作 QPaintDevice类:绘图设备的基类,每个可以用QPainter绘制的类,比如QWidget,QPixmap,...
15 Model View Delegate
Model-View-Delegate结构1.基本概念Qt中的Model-View-Delegate框架类似于一种前后端分离的架构,将数据的显示与获取进行了分离。其组成如下图所示: 2.Model2.1基本概念Model是Model-View-Delegate设计的模式的核心组件之一,它负责存储、检索、更新和操作数据,并通过接口与View和Delegate进行通信。下面详细介绍其概念和作用: 数据管理: Model类负责管理应用程序中的数据,Model类通常提供了方法来添加、删除、修改和查询数据,以便在应用程序中进行数据操作。 数据提供: Model类向视图(View)提供数据,以便在界面上显示。视图通过与Model类交互来获取所需的数据,并根据数据的变化来更新界面的显示。Model类通常实现了一些接口,如data()、setData()等,以便视图可以获取和更新数据。 通知机制: Model类通常实现了信号-槽机制或其他通知机制,以便在数据发生变化时通知视图进行更新。当数据发生变化时,Model类会自动发出相关信号(比如dataChanged,...
16 Qt的事件机制
Qt的事件机制 Qt是个事件驱动的编程框架,各种事件的产生和处理伴随着整个程序运行的主轴,因此搞懂事件处理机制非常重要。Qt的信号槽底层也是利用事件机制来实现的! 1.事件的定义1.1定义事件是由程序内部或外部产生的事情或某种动作的通称。比如用户按下键盘或鼠标,就会产生一个键盘事件或鼠标事件(这是由程序外部产生的事件);再如,当窗口第一次显示时,会产生一个绘制事件,以通知窗口需要重新绘制其自身,从而使该窗口可见(这是由程序内部产生的事件) 。 1.2事件与信号的区别 信号的发送者和接受者都是QObject派生类的对象,属于==对象-对象==之间的通信 事件通常来自底层的操作系统,或手动调用的。它的发送者是事件循环,接收者都是QObject派生类对象,属于==事件循环-对象==之间的通信。(本质上是操作系统-事件循环-对象 ...
18 控件 TableWidget
TableWidget1.初始化表格开发时一般在QT Designer 中拖拽一个QTableWidget到页面上,设置好布局后在UI页面对应的cpp文件中对表格进行操作即可,不过QTableWidget此时是空白的 1.1设置表头123456789101112QStringList headerList;headerList << QString::fromLocal8Bit("学号") << QString::fromLocal8Bit("姓名") << QString::fromLocal8Bit("语文") << QString::fromLocal8Bit("数学") << QString::fromLocal8Bit("英语")...
003 功能包开发
写一个节点解决VSCODE找不到头文件 在C++ configuration里面手动添加rcl的路径 添加完成后在.json中可以看见 创建功能包和节点1.使用CLI创建功能包 ros2 pkg create demo1 --build-type (ament_cmake)可省略 --dependencies rclcpp 2.在功能包的src文件手动创建节点的cpp文件 3.在CMakeLists.txt最后添加如下代码 123456789101112add_executable(demo_node src/demo.cpp)ament_target_dependencies(demo_node rclcpp)#每有一个可执行文件都得写一次add_executable(demo_oop_node src/demo_oop.cpp)ament_target_dependencies(demo_oop_node rclcpp)install(TARGETS demo_node demo_oop_node #每个节点都要写上 DESTINATION...
005 机器人建模
机器人建模URDF为了在仿真软件里面加载机器人本体,我们通常需要对机器人进行建模。而ROS及一些仿真软件通常使用URDF(Unified Robot Description Format)格式的文件来对机器人建模 URDF是一种基于XML的机器人模型描述格式,主要用于定义机器人的连杆(links)、关节(joints)、几何形状和物理属性 基本结构URDF文件以<robot>为根标签,包含<link>(描述刚体)和<joint>(描述连接关系)两类核心标签 1234567<?xml version="1.0"?><robot name="my_robot"> <!-- 定义连杆 --> <link name="base_link">...</link> <!-- 定义关节 --> <joint name="joint_1"...
04 install的用法
install的用法参考链接: 【CMake】cmake的install指令_cmake –install-CSDN博客 作用作用:就是把编译生成的可执行文件、静态库、动态库、头文件等拷贝到指定文件夹(${CMAKE_INSTALL_PREFIX})中 目的: 使用第三方库时,简化目录结构,install之后就可删掉源码了 自己的代码不想让别人看到源码,就把可执行文件、库、头文件install就行了 如何install1.首先得在CMakeLists中指定install的目标路径(通过${CMKAE_INSTALL_PREFIX}变量) 对于该变量的设置有多种方式: 在CMakeLists.txt中,通过set()设置 命令行中,cmake -DCMKAE_INSTALL_PREFIX=设置 2.在CMakeLists.txt中指定install规则 举个例子: 123456install(TARGETS lib_sensor lib_common lib_base my_executable ARCHIVE...
06 vcpkg用法
vcpkg用法 众所周知CMAKE只有项目构建的功能,而没有包管理的功能,因此之前要用第三方库的话,基本每次都得去github上下载,然后再写CMakeLists.txt,这属实有点麻烦…因此有必要学一下包管理工具,使得在开发时,可以更简单的在项目中加入第三方的依赖 注意:vcpkg下载的都是源码然后自行编译,不是直接下载.lib,.dll文件的!!!所以他能管理的都是那些git上的开源代码库,比如:opencv、qt、ffmpeg…而像TensorRT这样的库是不能用vcpkg来安装的,还是得自行下载安装 1.使用基本流程使用vcpkg的流程很固定,基本都一样: 1.下载并编译需要的库 1vcpkg install xxx # 会安装在vcpkg/installed目录下 2.在项目的CMakeLists.txt中加入vcpkg的TOOL Chain 1234cmake_minimum_required(VERSION 3.15)# 必须在创建工程前指定CMAKE_TOOLCHAIN_FILEset(CMAKE_TOOLCHAIN_FILE...
Keil的Debug技巧
Debug 技巧1.Debug时,黄色箭头代表程序运行到哪里了,蓝色箭头是鼠标移动的位置 2.可以通过看Systick的值来计算语句运行的时间 3.从Watch Window可以设置在某变量发生变化时设置断点 4.单步调试【单步调试】也就是每点⼀次按钮,程序运⾏⼀步。遇到函数会进⼊函数。点击图标按钮,或者按快捷键F11。(这⾥取消上⾯的断点) 5.逐步调试【逐步调试】即逐⾏调试,也就是每点⼀次按钮,程序运⾏⼀⾏。遇到函数不会进⼊函数。点击图标按钮,或者按快捷键F10。 6.跳出调试【跳出调试】即挑出函数调试,也就是每点⼀次按钮,程序跳出⼀个函数,直到跳出最外⾯的函数(main函数)。点击图标按钮,或者按快捷键Ctrl + F11。 7.运⾏到光标处【运⾏到光标处】即将光标放在某⼀处,点击该按钮(或Ctrl +...
SPI
SPI学习1.SPI的物理结构 MOSI:主设备输出,从设备输入 MISO:主设备输入,从设备输出 SCK:时钟信号线 CS:设备片选,低电平表示被选择 一个SPI接口可以同时连接多组从设备,只需要增加CS线即可 用CUBEMX设置SPI默认只有3个引脚(没有CS),如果下面开启了NSS,系统会自动给你指定一个CS引脚,否则就要自己指定CS引脚 在通信开始/结束时,手动控制CS引脚的电平 2.SPI工作原理主机和从机内部都有一个移位寄存器,主机发送数据时,同时也会受到一组数据,不过不需要对该数据处理。主机接收数据时,要给从机发送一组没有意义的数据,同时接收数据。 3.寄存器相关的寄存器有2组 CPOL(时钟极性寄存器):控制高电平还是低电平时空闲状态 CPHA(相位控制寄存器):控制是奇数还是偶数跳变是读取数据 这个怎么选一般要看芯片手册 4.SPI的其他参数








