【问题标题】:QScrollBar Snap to valueQScrollBar 对齐到值
【发布时间】:2025-12-28 06:25:06
【问题描述】:

我想要实现一个可以捕捉到特定值的滚动条(比如窗口可以捕捉到屏幕边缘)。这个想法是,当我向下拖动滚动条时,它会在接近它们时将条捕捉到值。

我的场景是显示 3 个章节的文本。我希望能够捕捉到章节的开头或结尾。当然,要转到第一章的开头,滚动条可以滚动到顶部,第三章的结尾也是如此。所以我想在滚动条上画两条线来代表第二章和第三章的开始,然后让滚动条的顶部和底部与这些线对齐。所以我真的很想在QTextBrowser 中使用它,但我可以用QSnapScrollBar 控制QTextBrowser,我只是不知道从哪里开始。

任何帮助将不胜感激。

【问题讨论】:

    标签: qt scrollbar


    【解决方案1】:

    您可以滚动您自己的继承自 QScrollBarQAbstractSlider 的自定义滚动条类,并覆盖 valueChanged(int) 信号。一些基本的伪代码:

    if currentValue is within 5 of snapvalue1:
        set scrollbar value to snapvalue1
    elsif currentValue is within 5 of snapvalue2:
        set scrollbar value to snapvalue2
    ...
    
    update/redraw widget
    

    虽然我觉得这对最终用户来说可能看起来很生涩。

    您还可以研究 pageStep 属性(控制使用 Page Up/Down 键时滚动的距离),也许它可以用于您的目的

    【讨论】:

    • 覆盖信号不起作用但谢谢 - 看起来我会在 mouseMoveEvent 上这样做 - 我会说当我有一个更完整的解决方案时
    • 看起来我将不得不覆盖 mouseMoveEvent 但我会接受您的解决方案,因为它为我指明了正确的方向 - 谢谢