QScrollBar Class
QScrollBar小部件提供垂直或水平滚动条。
Header | #include < QScrollBar > |
---|---|
qmake | QT += widgets |
Inherits | QAbstractSlider |
Inherited By |
详细说明
滚动条是一个控件,允许用户访问文档中比用于显示文档的小部件大的部分。它提供用户在文档中的当前位置以及可见文档的数量的可视指示。滚动条通常配有其他控件,可以实现更精确的导航。Qt以适合每个平台的方式显示滚动条。
如果需要在另一个小部件上提供滚动视图,那么使用QScrollArea类可能更方便,因为它提供了一个视口小部件和滚动条。如果您需要使用QAbstractScrollArea为专用小部件实现类似的功能,那么QScrollBar非常有用;例如,如果您决定将QAbstractItemView 作为子类。对于大多数其他使用滑块控件获取给定范围内的值的情况,QSlider类可能更适合您的需要。
![]() | 滚动条通常包括四个独立的控件:滑块、滚动箭头和页面控件。
|
每个滚动条都有一个值,指示滑块距滚动条起点的距离;这是通过value() 获得的,并通过setValue() 设置的。此值始终位于为滚动条定义的值的范围内,从 minimum() 到 maximum() 包括在内。可以使用setMinimum() 和setMaximum() 设置可接受值的范围。在最小值时,滑块的上边缘(对于垂直滚动条)或左边缘(对于水平滚动条)将位于滚动条的顶端(或左端)。最大值时,滑块的底部(或右)边缘将位于滚动条的底部(或右)端。
滑块的长度通常与页面步长的值相关,通常表示滚动视图中显示的文档区域的比例。页面步长是当用户按page Up和page Down键时值的变化量,并用setPageStep() 设置。使用光标键对行步骤定义的值进行较小的更改,并使用setSingleStep() 设置此数量。
请注意,使用的值的范围与滚动条小部件的实际大小无关。在为范围和页面步数选择值时,不需要考虑这一点。
为滚动条指定的值的范围通常与为QSlider指定的值的范围不同,因为需要考虑滑块的长度。如果我们有一个100行的文档,并且我们只能在一个小部件中显示20行,那么我们可能希望构造一个页面步长为20、最小值为0、最大值为80的滚动条。这将给我们一个滚动条与五个“页”。
![]() | 文档长度、滚动条中使用的值范围和页面步骤之间的关系在许多常见情况下都很简单。滚动条的值范围是通过从表示文档长度的值中减去所选的页面步长来确定的。在这种情况下,以下公式很有用: document length = maximum() - minimum() + pageStep(). |
QScrollBar只提供整数范围。请注意,尽管QScrollBar处理非常大的数字,但当前屏幕上的滚动条不能有效地表示大约100000像素以上的范围。除此之外,用户很难使用键盘或鼠标控制滑块,滚动箭头的用途也很有限。
ScrollBar从QAbstractSlider继承了一组全面的信号:
- 当滚动条的值发生更改时,将发出valueChanged() ,tracking() 确定此信号是否在用户交互期间发出。
- rangeChanged() 在滚动条的值范围更改时发出
- 当用户开始拖动滑块时,会发出sliderPressed()
- 当用户拖动滑块时,会发出sliderMoved()
- 当用户释放滑块时,会发出sliderReleased()
- 当用户交互或通过triggerAction() 函数更改滚动条时,将发出ActionTrigger()
滚动条可以由键盘控制,但它的默认focusPolicy() 为Qt::NoFocus。使用setFocusPolicy() 启用与滚动条的键盘交互:
- 左/右移动水平滚动条一步
- 向上/向下移动垂直滚动条一步
- PageUp向上移动一页
- PageDown向下移动一页
- 原点移到起点(mininum)
- 末端移动到末端(最大值)
通过使用triggerAction() 函数来模拟用户与滚动条控件的交互,可以控制滑块本身。如果您有许多使用公共值范围的不同小部件,这将非常有用。
大多数GUI样式都使用pageStep() 值来计算滑块的大小。
公共函数
构造和析构
-
QScrollBar(Qt::Orientation orientation, QWidget *parent = nullptr)
-
QScrollBar(QWidget *parent = nullptr)
-
virtual ~QScrollBar()
方向默认为垂直滚动条。
最小值默认为0,最大值为99,单步大小为1,页面步长为10,初始值为0。
重写的公共函数
- virtual bool event(QEvent *event) override
- virtual QSize sizeHint() const override
受保护的函数
- void initStyleOption(QStyleOptionSlider *option) const
重写的受保护的函数
- virtual void contextMenuEvent(QContextMenuEvent *event) override
- virtual void hideEvent(QHideEvent *) override
- virtual void mouseMoveEvent(QMouseEvent *e) override
- virtual void mousePressEvent(QMouseEvent *e) override
- virtual void mouseReleaseEvent(QMouseEvent *e) override
- virtual void paintEvent(QPaintEvent *) override
- virtual void sliderChange(QAbstractSlider::SliderChange change) override
- virtual void wheelEvent(QWheelEvent *event) override
小实例
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
app.setApplicationName ("QScrollBar");
QWidget w;
w.resize (300,200);
QHBoxLayout mainLayout(&w);
QScrollBar widget1;
QScrollBar widget2;
QScrollBar widget3;
widget1.setStyleSheet ("background-color:red");
widget2.setStyleSheet ("background-color:green");
widget3.setStyleSheet ("background-color:blue");
// widget1.setOrientation (Qt::Horizontal);
widget2.setOrientation (Qt::Horizontal);
// widget3.setOrientation (Qt::Horizontal);
// 布局加入,此时部件的父类是mainLayout
mainLayout.addWidget (&widget1);
mainLayout.addWidget (&widget2);
mainLayout.addWidget (&widget3);
w.show ();
app.exec();
return 0;
}