我试图以编程方式在MATLAB中创建一个单击事件,该事件将模拟用户单击GUI对象。对象的回调函数是子函数,所以我不能直接调用它。但是,我能够从对象中获得回调属性,该对象最终成为具有以下内容的3 × 1单元格数组:
@uiBlockFn/callback_til [ 188.0011] [1x1 struct]
我如何在代码中调用这个回调函数,这样它就可以模拟当用户单击GUI对象时会发生什么?
假设你有一个句柄为hObject
的图形对象,并且你获得了该对象的回调,如下所示:
callbackCell = get(hObject,'Callback');
正如您所提到的,您得到的单元格数组callbackCell
最终是一个3元素单元格数组,第一个单元格中有一个函数句柄,其他两个单元格中有其他数据。当一个对象的回调函数被定义为一个单元格数组时(就像你的例子一样),回调函数句柄(或字符串名称)存储在第一个单元格中,你想传递给回调函数的其他输入参数存储在剩下的单元格中。
但是,当对象被激活时调用此回调时,实际上MATLAB会在输入参数列表的开头自动插入2个额外的参数。这些都是:
-
hObject
:对象的句柄,该对象的回调正在被调用。 -
eventData
:与用户激活事件相关的数据结构,通常只是空矩阵[]
(少数情况除外)。
因此,如果您想模仿用户激活的对象的动作,您将希望按照以下方式调用回调函数(假设不需要事件数据):
callbackCell{1}(hObject,[],callbackCell{2:end});
这就是内置的hgfeval函数的作用:http://undocumentedmatlab.com/blog/hgfeval/