持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
去年更新过关于如何控制滚动条滚动的文章,最近新学了一种方式,方便便捷,想要分享给大家。如果有想要了解之前是如何实现的,可以查看:Qt中控制QSCrollBar显示位置
为了效果更直观,首先展示下显示效果:
效果清晰明了,根据左右两侧的按钮控制代替了手动拖动QScrollArea中的滚动条。
其实在真正使用左右箭头控制控件显示时,是不需要下面的水平滚动条的,这里只是为了更直观表示页面的走向。
接下来我就来讲解如何实现这种效果!
开发环境:VS2017 + Qt5.14.2
QScrollArea中控制的是水平滚动条,那么,如何获取水平滚动条的操作类指针呢?
在QScrollArea中,有这样一个函数:QScrollBar *horizontalScrollBar() const;
可以来操控水平滚动条的所有控制。
对应的垂直滚动条控制函数:QScrollBar *verticalScrollBar() const;
具体的获取方式,如下:
QScrollBar *hBar = ui.scrollArea->horizontalScrollBar();
查看QScrollBar类详情,大家可以看到并没有什么可以实质性使用的接口
所以,我们继续查看父类:QAbstractSlider
中的源码信息。
有这样一个函数: void triggerAction(SliderAction action);
该函数在源码解析中是这样定义的:
Triggers a slider action. Possible actions are SliderSingleStepAdd, SliderSingleStepSub, SliderPageStepAdd, SliderPageStepSub, SliderToMinimum, SliderToMaximum, and SliderMove.
意思说是:滑块本身可以通过使用triggerAction
函数来控制的,以模拟用于与滚动条控件的交互。该函数是触发滑块操作的,根据枚举参数不同分成了8种不同风格。
enum SliderAction {
SliderNoAction,
SliderSingleStepAdd,
SliderSingleStepSub,
SliderPageStepAdd,
SliderPageStepSub,
SliderToMinimum,
SliderToMaximum,
SliderMove
};
在我们开发过程中,可以使用该函数代替setValue这种设置移动位置的方式控制滚动条,让系统帮助我们完成这种操作,极大方便了我们的使用。
由此可知,我们在程序中控制滚动条左右移动时就可以采用该函数。
左移动,代码显示:
QScrollBar *hBar = ui.scrollArea->horizontalScrollBar();
hBar->triggerAction(QAbstractSlider::SliderAction::SliderPageStepSub);
右移动,代码显示:
QScrollBar *hBar = ui.scrollArea->horizontalScrollBar();
hBar->triggerAction(QAbstractSlider::SliderAction::SliderPageStepAdd);
大家可以尝试一下,一定能实现文章最初展示的效果的!
其实,我在这里还有一个问题,只有当枚举类型是:SliderPageStepAdd、SliderPageStepSub时才可以实现移动,SliderSingleStepAdd、SliderSingleStepSub方式是无法实现的,即使我设置了step也不可以。
我是中国好公民st,一名C++开发程序猿~