我知道Matlab GUI回调已经在这里讨论了数百次,但我想我遇到了一个特殊的问题。Matlab GUI中嵌套的蓝牙回调
我知道如何在不同的GUI回调之间共享数据(我使用documentation中描述的手柄结构)。我用GUIDE创建了我的GUI。
有一个按钮,在其回调函数中创建一个蓝牙手柄,它工作得很好。一旦蓝牙连接建立并收到一定数量的字节,就会触发蓝牙回拨功能(由bluetoothhandle.BytesAvailavailableFcn = @rdatac_Callback
设置)。
我的蓝牙回调函数的头看起来是这样的:
function rdatac_Callback(hObject, eventdata)
的hObject
包含蓝牙手柄,eventdata
由此引发的回调(在这种情况下,它被称为“信息bytesAvailable”)的事件。
此函数与所有其他GUI回调位于同一个文件中。问题是我无法访问蓝牙回调内的GUI的句柄结构。我尝试添加“手柄”作为第三个输入参数,但它是空的。我也尝试通过生成我自己的句柄结构
h = guidata(findobj('Name','BCI'));
其中BCI是GUI窗口的名称。这在任何GUI回调函数中都可以很好地工作,但在蓝牙回调中它无法找到其他元素,所以蓝牙回调函数有它自己的“范围”。
所以我的问题是:我如何与我的蓝牙回调函数共享所有的GUI句柄?我的解决方法是使用全局工作区,但我希望尽可能使用句柄结构。
非常感谢,完美的作品! – Andy
还有一件事:我尝试在我的蓝牙回调中修改字段'handles.data'并将其保存为'guidata(handles.figure1,handles)''就像我在GUI回调中所做的那样(仅用于'因为在Bluetooth回调中没有'hObject'),所以这里不使用'hObject',而是数据永远不会被存储。每次触发Bluetooth-callback时,handles.data都是空的。我在GUI打开Fcn中使用'handles.data = [];'在'handles'结构中声明这个新字段。 – Andy