【问题标题】:handles structure in matlab GUI在matlab GUI中处理结构
【发布时间】:2011-07-22 10:06:16
【问题描述】:

我正在 Matlab 中学习 GUI 编程。

我发现用于存储所有 gui 数据的句柄结构非常棘手。我想知道结构到底如何。我将用一个例子来解释我的问题。

假设我们创建了edittext1。

我们将存储handles.edittext1。 那么

str = get(hObject,'String');
set(handles.edittext1,'String',str);

这会将handles.edittext1中的String设置为str。

我的问题是 令我惊讶的是,get 和 set 操作中的“String”不区分大小写。

handles.edittext1.String 不返回存储的字符串。

所以,handles 不是一个结构数组,作为一个问题,handles 应该是什么结构? 同样的问题也可以向 hObject 提问。

不,这不是家庭作业或作业。这是我工作的一个持续项目。我已经使用 matlab 多年,但这是我第一次使用 matlab 制作 GUI。所以,请把我当作新手。

问候

【问题讨论】:

    标签: user-interface matlab


    【解决方案1】:

    hObject 是发出回调的对象的句柄(例如,单击时启动回调的按钮)。句柄是一个结构,其中包含图形中所有对象的句柄。每个对象的 hObject 都不同,相同的句柄列表将传递给每个回调。在您的示例中,如果在 edittext1 回调中, hObject 和 handles.edittext1 是相同的。

    两者都是对象的句柄,而不是结构。所以你不能说handles.edittext1.String。对象的所有属性(如字符串内容)都可以通过 set 和 get 函数访问。正如您所观察到的,属性名称不区分大小写。希望能回答您的所有问题。

    更新:

    我对您的后续问题的回复太长,无法发表评论,因此我更新了答案。

    我不确定我是否理解您的问题。如果您想检查属性的值,请使用 get ,如您在问题中所示:

    str = get(handles.edittext1, 'String');
    

    如果要检查属性是否存在或属性是什么,请在不指定参数的情况下调用 get:

    get(handles.edittext1)
    

    这会将所有属性及其值打印到控制台。如果您想以编程方式执行此操作,

    params = get(handles.edittext1);
    

    将返回一个其字段为参数的结构。然后您可以访问参数为

    str = params.String
    

    并且可以检查一个字段是否存在

     isfield(params, 'String');   // This is case sensitive
    

    【讨论】:

    • 感谢您的回答。我有一个后续问题,正如您所说,它们是对象的句柄,那么如何检查对象的哪些属性已定义?
    【解决方案2】:

    AFAIK GUI 组件的所有句柄都是类的对象 (OOP),它们继承自 handle 超类(更准确地说是hgsetget,它本身是 handle 的子类)。因此hObject 存储了一个指向对象的指针,而不是对象本身。

    handle 类及其公共子类公开了公共函数(接口),例如 set/get(它们对属性名称执行不区分大小写的部分匹配)。在这种情况下,您需要使用 getter/setter 方法访问“属性”“字符串”。

    handles 是在 GUIDE 生成的 GUI 中使用的变量,为了方便用户,它传递给回调函数。它是一个简单的结构体(不是结构体数组),因此每个字段可以存储不同类型的数据。

    注意:MATLAB 有一个很好的文档详细解释了所有这些。稍后我将使用相关页面的链接更新答案..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 2017-02-06
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多