【问题标题】:uicontrol Slider in Octave: minimum is at top, maximum at bottomOctave中的uicontrol滑块:最小值在顶部,最大值在底部
【发布时间】:2018-07-12 11:18:47
【问题描述】:

在我与 Octave 一起使用的 Matlab 脚本中,我的图中有一个 uicontrol 元素,即 Style Slider,它本质上是一个常规滚动条滑块。

controls.slider.audio_1 = uicontrol( 'Style', 'Slider', ...
                                     'Position', [ 100 150 10 300 ], ...
                                     'Max', 100, 'Min', 1, ...
                                     'SliderStep', [ 0.01 0.01 ], ...
                                     'Units', 'normalized', ...
                                     'Value', 1 )

滑块的方向由其几何形状决定:宽 10 像素,高 300 像素,使其成为垂直滑块。我还没有找到强制定向的方法。

但是我的问题的重点来了:当我这样定义滑块时,最小值(由Min 定义)位于顶部!滑块的最小位置位于顶部,然后用户必须将其拉下以增加值。我想切换它,使最小值位于底部,并且滑块在向上拖动时会增加其值。

我该怎么做?

【问题讨论】:

  • 不直观,我同意。但这有关系吗?值只是位置。您可以随意翻译。 value = 100-position.
  • @CrisLuengo 这个问题也是兼容性问题之一:我注意到它似乎取决于滑块开始的 Matlab 和/或 Octave 版本,或者它的方向,有办法强制方向等会使它更便携。
  • 我明白你的意思。我从来没有注意到 MATLAB 中的滑块是倒置的(我从 5.3 开始就一直在使用它)。这可能是特定版本的 Octave 中的错误吗?
  • @CrisLuengo 我什至不确定这是一个错误:它可能只是 Matlab / Octave 在后台使用的图形包的标准。 IE。在某些 GUI 包中,滑块从顶部开始。
  • 当然,它可能是 Octave 中的 GUI 包。但我会认为这样的不一致是一个错误。如果我要为 Octave 制作一个不同 UI 工具包的界面,我会努力保持 UI 控件行为的一致性。自从我使用 MATLAB 以来,它已经有 3 种不同的 UI 实现,它们一直非常擅长保持一致性,如果你在那里看到这个反向滚动条,我会感到惊讶。

标签: matlab user-interface slider octave uicontrol


【解决方案1】:

UTSL!在libgui/graphics/SliderControl.cc#l65 你会发现

bool vertical_slider = ( bb(2) < bb(3) );
slider->setOrientation (vertical_slider ? Qt::Vertical : Qt::Horizontal);
if (vertical_slider)
  slider->setInvertedAppearance (true);  // Matlab compatibility

这正是您要寻找的。然后启动hg blame 看看谁在什么时候添加了这行代码并查看提交消息:

$ hg log -r 23412
changeset:   23412:7b95435e96a4
user:        Rik <rik@octave.org>
date:        Tue Apr 18 16:35:38 2017 -0700
summary:     Reverse orientation of vertical uicontrol "sliders" for Matlab compatibility (bug #50818).

啊哈!因此,为了在 2017 年对开发树(也称为默认)的兼容性进行了更改。因此 4.2.x 版本还没有看到这一点,但下一个 4.4 版本将进行更改。

但是你还没有提到你使用的 GNU Octave 版本。

【讨论】:

  • 那么,我现在正在查看一个错误?顺便提一句。我的 Octave 版本是 4.2.1
  • 嗯,我不会称之为错误。您在 4.2.1 中看到的是 Qt(使用的工具包的行为)在默认情况下的行为方式,Rik 决定更改 Qt 的默认值以匹配 MATLABS 行为。当 MATLAB 真的表现得很愚蠢时,情况并非总是如此,请参阅 bugtracker 上的“WTF?MATLAB”类别
  • 那么,我现在该怎么办?等待新版本,现在只接受倒置滑块?由于该应用程序应该与 Matlab Octave 等一起运行。
  • 在您的情况下,我会检查您是否are running Octave,然后按照 Cris Luengo 的建议在软件中将其反转。或者您可以获取源 tarball,修补 Slider 并自己编译。
  • 我决定完全按照你的建议去做。一旦新版本的 Octave 发布,我将提供更新。我会接受你的回答,因为我会按照你的建议去做,你可能想通过检查八度音阶然后采取相应措施的想法来修改你的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多