ROS Rviz组件开发方法 3.1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先我们先进行ui设计:
在两个主页面添加两个页,名称改为rviz,在curentTabText里面修改
然后在电池电量下面那个rviz的页面中加入一个treewidget,给他纵向布局,修改大小header headerdefualt 150,headerMin…150;

开始写代码:
(1)在main_window.cpp中进行添加ui设计:先看看rviz中的有哪些控件,我们之创建一部分
在这里插入图片描述
在main_window.cpp中设计一系列rviz的组件,其中要注意的是:
为了在这个文件中都能使用: QComboBox* fixed_box;所以需要这句话在main_window.hpp中声明:

    QComboBox* fixed_box;

还需要导入头文件

#include <QComboBox>    //10-2

然后继续写代码:

    //rviz设计10-1
//  ui.treeWidget->setWindowTitle("Display");
//  ui.treeWidget->setWindowIcon(QIcon("://images/classes/Displays.svg"));

    //header
    ui.treeWidget->setHeaderLabels(QStringList()<<"key"<<"value");
    ui.treeWidget->setHeaderHidden(true);   //隐藏key value

    //GLobal Options
    QTreeWidgetItem* Global=new QTreeWidgetItem(QStringList()<<"Global Options");
    Global->setIcon(0,QIcon("://images/options.png"));

    ui.treeWidget->addTopLevelItem(Global);
    Global->setExpanded(true);  //设置为展开状态
    //FixFrame
    QTreeWidgetItem* Fixed_frame=new QTreeWidgetItem(QStringList()<<"Fixed Frame");
    fixed_box=new QComboBox();
    fixed_box->addItem("map");
    fixed_box->setMaximumWidth(150);
    fixed_box->setEditable(true);

    connect(fixed_box,SIGNAL(currentTextChanged(QString)),this,SLOT(slot_treewidget_value_change(QString)));
    Global->addChild(Fixed_frame);
    ui.treeWidget->setItemWidget(Fixed_frame,1,fixed_box);

(2)创建qrviz类:

在这里插入图片描述
在这里插入图片描述

注意勾选继承QObject那个类
在这里,照着视频做,把qrviz.hpp给放在include目录下,把qrviz.cpp放在src目录下,发现qt编译后,在include目录下,宾没有qrviz.hpp文件,经过测试,发现把qrviz.hpp也放在
在这里插入图片描述

在这里插入图片描述

接下来我们在qrviz.hpp中包含ROS的头文件和rviz的相关头文件:

#include <ros/ros.h>    //10-3
#include <rviz/visualization_manager.h>
#include <rviz/render_panel.h>
#include <rviz/display.h>
#include <rviz/tool_manager.h>
#include <rviz/tool.h>
#include <QVBoxLayout>

在这里插入图片描述

创建rviz::RenderPanel* render_panel_;显示容器,因为他是继承与QWidget这个类,所以我们可以像操作QWidget那样,去操作rviz::RenderPanel

在qrviz.hpp中建立一个私有的

    rviz::RenderPanel* render_panel_;

在qrviz.cpp中实例化

    //创建rviz panel
    render_panel_=new rviz::RenderPanel();

接下来这里注意理解:

//分析,这是在两个类中,我们需要在main_window这个类中显示 render_panel,也就是在layout_rviz上显示render_panel
//怎么把他们两个联系起来呢,通过构造函数,在初始化对象的时候传入一个layout指针。通过这个指针去添加widget,所以我们需要
//去hpp文件更改一下构造函数传入的参数,需要在qrviz.hpp包含#include <QVBoxLayout>

并且:在qrviz.hpp中

//传入QVBoxLayout指针对象
qrviz(QVBoxLayout* layout);

只记录重点了:
在main_window.cpp中初始化my_rviz这个类,在连接master的两种方式的地方都要初始化:

            //初始化my_rviz
            myrviz=new qrviz(ui.layout_rviz);

在这里插入图片描述
在qrviz.hpp中创建一个私有的:

    rviz::VisualizationManager* manager_;
            ui.treeWidget->setEnabled(true);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值