【问题标题】:matlab guide, emit event (or signal) when zoommatlab指南,缩放时发出事件(或信号)
【发布时间】:2019-05-18 23:11:32
【问题描述】:

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

为什么:

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

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

【问题讨论】:

  • 您应该编辑您的问题并将signal(Qt 名称)替换为单词event(MATLAB 名称)。用例略有不同,但我最近在另一个答案中解释了如何将 listener 附加到 XLim changed 事件。阅读一下,这可以帮助您入门:Link different properties of MATLAB axes
  • Thx Hoki,我得到了它与您链接中的描述一起使用。考虑将此作为答案发布,我会接受。

标签: matlab user-interface signals-slots matlab-guide


【解决方案1】:

我评论中的链接解释了如何将 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多