matlab callback 數據傳遞


M文件中內的每個Callback都可以視為一個獨立的可執行的接口,因此,任一個Callback觸發后所執行的運算值若要在其他Callback中使用,就無法與MATLAB工作空間內的變量繼續執行操作,也就是說每個Callback之間無法直接做溝通操作,因此變量的傳遞會有問題。主要的幾種數據傳遞方式主要有:
(1)宣告為全局變量
將欲傳遞的變量在傳遞雙方的Callback位置中都設置為全局變量,就可以直接在任一方的Callback中調用。這種方式是最簡單的操作方式,但是當GUI全局變量太多時,在執行上就可能造成混亂。
(2)應用對象的userdata屬性
通過對象的userdata屬性可以直接進行各個Callback之間的數據存取操作。首先必須先將數據存儲到一個特定的對象中,假設該對象的句柄值為uihandle,需要存儲的數據為value,將輸入以下程序即可:
set('uihandle','UserData',value);
此時,value數據已經存儲到句柄為uihandle的對象內,在執行過程中若要取回該變量就可以通過以下方式在任一Callback中獲取該值。
value=get('uihandle','UserData');
使用這種方式在操作上固然簡單方便,但是每一個對象僅能存取一個變量值,因此當同一對像存儲兩次變量時,先前的變量值就會被覆蓋掉,這樣對於復雜的操作會造成諸多不便,因此一般都是用Userdata存取簡單的數據。
(3)應用setappdata,getappdata與rmappdata
使用setappdata,getappdata與rmappdata函數進行數據傳遞是最用彈性的,此種方式在使用上非常類似UserData屬性的操作,但它克服了UserData的缺點,是一個對象可以存取多個變量,因此會比UserData屬性在操作上更具有彈性和數據安全性。
用法如下:
setappdata(uihandle,'VariableName',vaule);
value=getappdata(uihandle,'VariableName');
rmappdata(uihandle,'VariableName');
另外一種用法是結合handles結構與guidata函數,雖然在操作上非常簡單,但是當變量過多時會使GUI在程序上變得比較復雜,日后程序排錯時可能比較費時,因此不推薦使用。
使用方式如下:
如果在對象的Callback中存取變量值到VARdata字段中,使用如下程序:
handles.VARdata=A;%將A存放到handles的VARdata字段中去
guidata(hObject,handles);%將新的handles值存儲起來
如果在另一個Callback中使用變量A,使用如下程序:
A=handles.VARdata;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM