回调函数可以与图形对象相关联,并在某些事件发生后触发。所有回调函数的基本结构体是
function mycallback (hsrc, evt) ... endfunction
这里的hsrc是回调源的句柄,并且evt给出了一些特定于事件的数据。
该函数可以作为普通Octave函数的函数句柄、匿名函数或表示Octave命令的字符串提供。不建议使用后一种语法,因为只有在评估字符串时才会出现语法错误。详见函数句柄”部分.
然后,它可以在对象创建时与对象相关联,也可以稍后与set作用例如
plot (x, "DeleteFcn", @(h, e) disp ("Window Deleted"))
其中,在删除绘图的那一刻,消息"Window Deleted"将显示。
额外的用户参数可以传递给回调函数,并将在两个默认参数之后传递。例如
plot (x, "DeleteFcn", {@mycallback, "1"})
...
function mycallback (h, evt, arg1)
fprintf ("Closing plot %d\n", arg1);
endfunction
小心回调函数中的第二个参数--evt--仅在Qt图形工具包中部分实现:
evt是一个类double值:1表示左侧,2表示中间,3表示右键单击。evt是一个包含字段的结构体Key一串Character(字符串),以及Modifier(字符串的元胞数组)。evt是一个类double空矩阵。可用于所有图形对象的基本回调函数有
CreateFcn稍后使用set函数将永远不会被执行。默认情况下,回调函数是排队的(它们在事件队列中一个接一个地执行),除非drawnow, figure, waitfor,getframe或pause使用函数。如果正在执行的回调调用其中一个函数,则会导致Octave刷新事件队列,从而导致正在执行的回叫被中断。
可以通过设置对象的interruptible属性到"off"。在这种情况下,Octave根据busyaction的属性中断回调对象:
queue (the default)中断回调是在执行回调返回后执行的。
cancel中断回调将被丢弃。
这里的interruptible当中断回调是deletefcn,或数字resizefcn或closerequestfcn。这些回调总是会中断正在执行的回调。
保存正在执行的回调的对象的句柄可以通过gcbo作用此对象的祖先图形的句柄可以使用gcbf作用
h = gcbo () ¶[h, fig] = gcbo () ¶返回当前正在执行回调的对象的句柄。
如果没有执行回调,此函数将返回空矩阵。Thishandle是从根对象属性获得的"CallbackObject".
当使用第二个输出参数调用时,返回包含当前正在执行回调的对象的图形的句柄。如果没有回调正在执行,则第二输出也被设置为空矩阵。
fig = gcbf () ¶返回包含当前正在执行回调的对象的图形的句柄。
如果没有执行回调,此函数将返回空矩阵。此函数返回的句柄与的第二个输出参数相同gcbo.
回调同样可以添加到具有addlistener函数如下所述。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2