基本Widgets(11):【类】QScrollBar [官翻]

本文详细介绍了QScrollBar类,探讨了其构造、属性及信号,并通过示例展示了如何使用QScrollBar创建滚动条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QScrollBar Class

QScrollBar小部件提供垂直或水平滚动条。

Header#include < QScrollBar >
qmakeQT += widgets
InheritsQAbstractSlider
Inherited By

详细说明

滚动条是一个控件,允许用户访问文档中比用于显示文档的小部件大的部分。它提供用户在文档中的当前位置以及可见文档的数量的可视指示。滚动条通常配有其他控件,可以实现更精确的导航。Qt以适合每个平台的方式显示滚动条。

如果需要在另一个小部件上提供滚动视图,那么使用QScrollArea类可能更方便,因为它提供了一个视口小部件和滚动条。如果您需要使用QAbstractScrollArea为专用小部件实现类似的功能,那么QScrollBar非常有用;例如,如果您决定将QAbstractItemView 作为子类。对于大多数其他使用滑块控件获取给定范围内的值的情况,QSlider类可能更适合您的需要。

滚动条通常包括四个独立的控件:滑块、滚动箭头和页面控件。
  • a.滑块提供了一种快速转到文档任何部分的方法,但不支持在大型文档中进行精确导航。
  • b.滚动箭头是可用于精确导航到文档中特定位置的按钮。对于连接到文本编辑器的垂直滚动条,它们通常会将当前位置向上或向下移动一行,并少量调整滑块的位置。在编辑器和列表框中,“行”可能表示一行文本;在图像查看器中,它可能表示20像素。
  • c.页面控件是拖动滑块的区域(滚动条的背景)。单击此处将滚动条移向单击一个“页面”。此值通常与滑块的长度相同。

    每个滚动条都有一个值,指示滑块距滚动条起点的距离;这是通过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() 值来计算滑块的大小。

    公共函数

    构造和析构

    1. QScrollBar(Qt::Orientation orientation, QWidget *parent = nullptr)

    2. QScrollBar(QWidget *parent = nullptr)

    3. virtual ~QScrollBar()

      方向默认为垂直滚动条。
      最小值默认为0,最大值为99,单步大小为1,页面步长为10,初始值为0。

    重写的公共函数

    1. virtual bool event(QEvent *event) override
    2. virtual QSize sizeHint() const override

    受保护的函数

    1. void initStyleOption(QStyleOptionSlider *option) const

    重写的受保护的函数

    1. virtual void contextMenuEvent(QContextMenuEvent *event) override
    2. virtual void hideEvent(QHideEvent *) override
    3. virtual void mouseMoveEvent(QMouseEvent *e) override
    4. virtual void mousePressEvent(QMouseEvent *e) override
    5. virtual void mouseReleaseEvent(QMouseEvent *e) override
    6. virtual void paintEvent(QPaintEvent *) override
    7. virtual void sliderChange(QAbstractSlider::SliderChange change) override
    8. 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;
    }
    
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值