我正在学习Matlab中的GUI programmin。
我发现用于存储所有gui数据的句柄结构非常棘手。我想知道结构究竟是怎样的。我将用一个例子来解释我的问题。
让我们说,我们创建了edittext1。
我们将把handle.edittext1存储起来。 然后
str = get(hObject,'String');
set(handles.edittext1,'String',str);
这会将handles.edittext1中的String设置为str。
我的问题是 令我惊讶的是,get和set操作中的'String'不区分大小写。
handle.edittext1.String不返回存储的字符串。
因此,句柄不是结构数组,作为后面的问题,它应该是什么句柄结构? 同样的问题也可以被问到hObject。
不,这不是作业或作业。这是我工作的一个持续项目。我已经使用matlab多年了,但这是我第一次使用matlab制作GUI。所以,请把我当成新手。
问候
答案 0 :(得分:4)
hObject是发出回调的对象的句柄(例如,单击时启动回调的按钮)。 handles是一个包含图中所有对象句柄的结构。对于每个对象,hObject将是不同的,相同的句柄列表将被传递给每个回调。在您的示例中,如果它位于edittext1回调中,则hObject和handles.edittext1是相同的。
两者都是对象的句柄,而不是结构。所以你不能说handle.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
答案 1 :(得分:0)
AFAIK GUI组件的所有句柄都是类的对象(OOP),它继承自handle
超类(hgsetget
更准确,它本身是handle
的子类)。因此hObject
存储指向对象的指针,而不是对象本身。
handle
类及其公共子类公开了常见函数(接口),例如set
/ get
(它们对属性名称执行不区分大小写的部分匹配)。在这种情况下,您需要使用getter / setter方法访问“property”'string'。
handles
是GUIDE生成的GUI中使用的变量,为了方便用户而传递给回调函数。它是一个简单的结构(不是结构数组),因此每个字段可以存储不同类型的数据。
注意:MATLAB有一个很好的文档,详细解释了所有这些。我稍后会更新相关页面链接的答案。