我正在编写一个可以使用水平滚动条平移的UI,但也可以独立平移和缩放(如非线性编辑器的剪辑窗口)。这是一个基于Qt的UI,我不需要考虑高度,只需要考虑长度。
平移本身,我想我可以处理,但不缩放。问题是如何控制滚动条上滑块/握把小部件的大小。当放大UI时,它应该收缩,当缩小时,相反。滑块的大小应该反映缩放(例如,如果我放大到看到10%的视图,滑块应该是滚动条大小的10%左右,或者尽可能接近它)。
问题是Qt似乎不能让我直接控制滑块的大小,我只能通过最小/最大值和大步数的组合间接控制它,这就是我(尴尬地)卡住的地方。我似乎无法调整这些因素并保持滚动条。以前有人做过这种事吗?
对不起,
我自己没有使用过Maya ..
如果你想知道只是滑块(拇指)的大小,它是你所说的控制与setMaximum(), setMinimum()函数。
如果我正确理解了你的要求,你希望拇指大小对应缩放级别
- 1000%缩放,缩放系数= 10 ->拇指大小为滚动条的10%
- 在没有滚动条的地方100%缩放
我假设你可以计算缩放系数(比如K),这将是你的缩放比例,你可以通过Maya控制滚动条的最小/最大/当前值
在这种情况下,滚动条的最小值总是为0。
- 当缩放系数为1(k- current):1(original)时,设置滚动条的最大宽度为所显示内容的宽度。保存这个最大值以供将来使用,例如(Z)
^^这将给你没有滚动条缩放系数1,如果你的内容填补了可用的宽度正好。
- 下一步,当你的缩放系数改变为K = 2(200%缩放)。
- 通过计算
scrollbar->maximum() / Z
得到旧变焦系数(Y
) - 设置新滚动条最大值为
K * Z
。 - 设置新滚动条值为
scrollbar->value() * K / Y
。
- 通过计算
^^现在,这将反过来设置滚动条的大小为您想要的大小(缩放系数)
请注意,这假设您的内容在缩放系数为1时不需要滚动条,并且完全适合可用的宽度。
如果不是这种情况,并且显示内容的控件的宽度是可调整大小的,则上述逻辑的结果将意味着,在缩放因子为10时,拇指将处于其缩放因子为1时大小的10%。因此,拇指的大小不会是滚动条的10%,而是其自身的10%(100%缩放)