我知道Matlab GUI回调已在这里讨论了数百次,但我想我遇到了一个特殊的问题。
我知道如何在不同的GUI回调之间共享数据(我使用了documentation中描述的handle-structure)。我用GUIDE创建了我的GUI。
有一个按钮在其回调函数中创建一个蓝牙手柄,它可以正常工作。建立蓝牙连接并接收到一定量的字节后,将触发蓝牙回调功能(由bluetoothhandle.BytesAvailavailableFcn = @rdatac_Callback
设置)。
我的蓝牙回调功能的标题如下所示:
function rdatac_Callback(hObject, eventdata)
hObject
包含bluetooth-handle,eventdata
触发回调的事件(在本例中称为“BytesAvailable”)。
此函数与所有其他GUI回调位于同一文件中。问题是我无法在蓝牙回调中访问GUI的句柄结构。我尝试添加“句柄”作为第三个输入参数,但它是空的。我也尝试通过
生成自己的句柄结构h = guidata(findobj('Name','BCI'));
其中BCI是GUI窗口的名称。这在任何GUI回调函数中都能很好地工作,但在蓝牙回调中它无法找到其他元素,因此蓝牙回调有其自己的“范围”。
所以我的问题是:如何通过蓝牙回调功能共享所有GUI句柄?我的解决方法是使用全局工作区,但我想尽可能使用句柄结构。
答案 0 :(得分:0)
使用签名函数rdatac_Callback(hGuiObject, hBtObject, eventdata)
创建蓝牙回调。现在,在GUI-Callback中创建蓝牙对象时,您可以获得GUI对象的句柄。这应该传递给你的rdatac_Callback。您可以使用函数句柄@(hBtObject,eventdata)rdatac_Callback(hGuiObject, hBtObject, eventdata)
来实现此目的。函数rdatac_Callback
总是使用您需要的三个参数调用,但只有两个必须传递给匿名函数。 hGuiObject
取自您创建匿名函数的工作空间。