09 QWidget
QWidget类QWidget类是所有控件、对话框、窗口类的父类, 并且QWidget类的父类的QObject, 也就意味着所有的窗口类对象只要指定了父对象, 都可以实现==内存资源的自动回收==。 1.1设置父对象123456789// 构造函数QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 公共成员函数// 给当前窗口设置父对象void QWidget::setParent(QWidget *parent);void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);// 获取当前窗口的父对象, 没有父对象返回 nullptrQWidget *QWidget::parentWidget() const; 1.2设置窗口位置123456789101112//------------- 窗口位置 -------------//...
11 容器控件
容器控件 容器类控件用于存放别的控件,之前在设计UI界面时,把所有控件都放到最顶层的QWidget中然后布局,这样做的缺点是整体布局非常麻烦,因此可以使用容器类控件,把场上所有的控件分成几部分分别放入不同的容器中布局,然后在顶层窗口中对容器再布局就行了。 Qt中能用作容器的控件主要有上面几种,下面就简单介绍一下。 1.QWidget前面说到过QWidget是所有可视化窗口的基类,如果不指定父对象的话他就是一个独立的窗口;如果指定父对象,它就是作为一个容器而存在于父对象内。默认情况下QWidget是完全空白的。 关于这些属性大部分都有对应的API函数, 在属性名前加 set即可, 大家可以自己从 QWidget这个类里边搜索, 并仔细阅读关于这些函数的参数介绍。 2.QFrameQFrame继承QWidget,在外观上QWidget完全空白,而QFrame能够设置边框的阴影、线宽、形状等。 3.QGroupBoxQGroupBox继承QWidget,在这种类型的窗口中可以绘制边框、给窗口指定标题,...
10 对话框
Qt中的对话框 QDialog是对话框的基类,且它继承于QWidget,并有自己的一些特性。 1.常用API123456789101112131415161718// 构造函数//构造函数第二个形参为窗口标志,默认为 `Qt::Dialog = 0x0000 0002 | Qt::Window`。//只要该标志位包含`Qt::Window`,则该对象是一个窗口,窗口就是一种顶层的部件。QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 模态显示窗口[virtual slot] int QDialog::exec();// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Accepted[virtual slot] void QDialog::accept();// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Rejected[virtual slot]...
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...








