首页 > 解决方案 > matlab指南,缩放时发出事件(或信号)

问题描述

我在 Matlab 中有一个使用guide. 这个 GUI 里面是一个axes. 我想在有人更改此图的缩放比例时立即发出信号。

为什么:

我需要更改XTickLabels. 放大XTick更改时,我需要更新XTickLabels. 无法对XTick值进行硬编码(因为您应该能够放大并获得更好的拟合XTick值)。

在带有 Qt 的 C++ 中,只要缩放因子发生变化,我就会简单地发出一个信号,并将其连接到一个更改XTickLables. 我不知道如何用 MATLAB 来做到这一点。

标签: matlabuser-interfacesignals-slotsmatlab-guide

解决方案


我评论中的链接解释了如何将 a 附加listener到任何(Observable)属性更改,但如果您只对缩放操作触发的事件感兴趣,则可以获取zoom对象直接触发的事件。

下面是一个关于如何将事件处理程序附加到缩放对象的小演示:

function demozoomevent
% Listen to zoom events

    % Sample figure and plot
    plot(1:10);
    % retrieve the zoom object handle
    h = zoom;
    % set the callback for 'before' and 'after' zoom event
    h.ActionPreCallback = @myprecallback;
    h.ActionPostCallback = @mypostcallback;
    % Activate the zoom
    h.Enable = 'on';


function myprecallback(obj,evd)
% will be executed BEFORE the zooming happens
    disp('A zoom is about to occur.');

function mypostcallback(obj,evd)
% will be executed AFTER the zooming happended
    newLim = evd.Axes.XLim;
    msgbox(sprintf('The new X-Limits are [%.2f %.2f].',newLim));

注意:这种方式不会监听XLim或关联的任何更改XTickLabel,而只会监听缩放事件。如果您想使用该方法,请考虑对pan对象执行相同的操作,因为它也可用于更改XLim轴的 。


推荐阅读