在Vrep中如何创建基于QT的GUI

本文介绍如何在V-REP环境中使用XML定义自定义UI,包括按钮点击事件处理及机器人行为控制。通过示例展示了如何创建和销毁UI,并实现按钮响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:部分内容,摘自http://www.w3school.com.cn/xml/xml_elements.asp。侵权必删。

文末将声明具体出处!!

基本原则:

1.首先你需要使用XML语法定义这个UI

2.用字符串存储这个UI的定义

3.调用 imExtCustomUI_create(your_xml_description)   生成你的UI

4.如果不再需要这个UI了,使用 simExtCustomUI_destroy(ui) destroy这个UI

基础知识:

1.XML元素【1】

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。


<bookstore>
<book category="CHILDREN">
  <title>Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title>Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore> 

在上例中,<bookstore> 和 <book> 都拥有元素内容,因为它们包含了其他元素。<author> 只有文本内容,因为它仅包含文本。

在上例中,只有 <book> 元素拥有属性 (category="CHILDREN")。


2.XML属性【2】

XML 元素可以在开始标签中包含属性,类似 HTML。

属性 (Attribute) 提供关于元素的额外(附加)信息。


XML 属性

从 HTML,你会回忆起这个:<img src="computer.gif">。"src" 属性提供有关 <img> 元素的额外信息。

在 HTML 中(以及在 XML 中),属性提供有关元素的额外信息:

<img src="computer.gif">
<a href="demo.asp"> 

属性通常提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:

<file type="gif">computer.gif</file>

XML 属性必须加引号

属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person 标签可以这样写:

<person sex="female">

或者也可以这样:

<person sex='female'>

注释:如果属性值本身包含双引号,那么有必要使用单引号包围它,就像这个例子:

<gangster name='George "Shotgun" Ziegler'>

或者可以使用实体引用:

<gangster name="George &quot;Shotgun&quot; Ziegler">

XML 元素 vs. 属性

请看这些例子:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。


代码解析:

参看自己的代码解析:E:\use\vrep\vrep_practice\简单的GUI代码解析.lua

目前需要解决的问题,按下一个按钮怎么做到控制机器人的行为?

参考bubbleRob 这个例子:

XML语法里有类似

 <hslider minimum="0" maximum="100" on-change="speedChange_callback" id="2"/>  
on-change:Name of a Lua function to handle the change event.
Arguments of the function are: (uiHandle, id, newValue).

然后调用speedChange_callback()进行处理。

function speedChange_callback(ui,id,newVal)
    speed=minMaxSpeed[1]+(minMaxSpeed[2]-minMaxSpeed[1])*newVal/100
end

完整版代码如下(scene名字是:基于Qt_UI使用两种方法解逆运动学):

function sysCall_init()
        
    --ui=simGetUIHandle('UI')
    ik=sim.getIkGroupHandle('ik')
    --uiDamped=simGetUIHandle('UI_damped')
    DLS=sim.getIkGroupHandle('DLS')
        xml = [[
        <ui closeable="false" title="Daye" resizable="true">
            <tabs>
            <tab title="First tab">

                <button text="pseuod-inverse" onclick="buttonCB"/>
                </tab>
           <tab title="Second tab" layout="vbox">
                <button text="DLS-inverse" onclick="buttonCB"/>


                </tab>
            </tabs>
        </ui>
    ]]

    ui=simUI.create(xml)
    
end

function buttonCB(ui_handle, item_id)
    sim.addStatusbarMessage("Push-button pseudo-inverse has been clicked")
    sim.handleIkGroup(ik) 
end

function buttonAB(ui_handle, item_id)
    sim.addStatusbarMessage("DLS button has been clicked")
    sim.handleIkGroup(DLS)
end 


function sysCall_actuation()
    
 
end

function sysCall_cleanup() 
    simUI.destroy(ui)
end 

引用:

【1】XML 元素 http://www.w3school.com.cn/xml/xml_elements.asp

【2】XML 属性 http://www.w3school.com.cn/xml/xml_attributes.asp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值