当前位置: 首页 > news >正文

QT6 源(77):阅读与注释滚动条 QScrollBar 的源码,其是基类QAbstractSlider 的子类,

(1)本代码来自头文件 qscrollbar . h,,滚动条的代码并没有依据其父类再做出太大的扩展 :

#ifndef QSCROLLBAR_H
#define QSCROLLBAR_H#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qwidget.h>#include <QtWidgets/qabstractslider.h>QT_REQUIRE_CONFIG(scrollbar);QT_BEGIN_NAMESPACE //本类在 QT的全局命名控件class QScrollBarPrivate;
class QStyleOptionSlider;/*
The QScrollBar widget provides a vertical or horizontal scroll bar.滚动条是一个控件,它允许用户访问文档中比用于显示文档的小部件大的部分。
它提供了用户当前在文档中的位置和文档可见数量的可视化指示。
滚动条通常配备其他控件,以实现更精确的导航。Qt以适合每个平台的方式显示滚动条。如果您需要在另一个窗口小部件上提供滚动视图,
则使用 QScrollArea类可能更方便,因为它提供了视口窗口小部件和滚动条。如果您需要使用QAbstractScrollArea为专用小部件实现类似的功能,QScrollBar很有用;
例如,如果您决定继承 QAbstractltemView.对于使用 slider 控件获取给定范围内的值的大多数其他情况,Qslider类可能更适合您的需要。滚动条通常包括四个单独的控件:滑块、滚动箭头和页面控件。a.滑块提供了一种快速访问文档任何部分的方法,但不支持在大型文档中进行精确导航。b.卷轴箭头是按钮,可用于准确导航到文档中的特定位置。对于连接到文本编辑器的垂直滚动条,这些通常会将当前位置上下移动一“行”,并少量调整滑块的位置。在编辑器和列表框中行”可能指一行文本;在图像查看器中,“行"可能指20像素。c.页面控件是拖动滑块的区域(滚动条的背景)。单击此处可将滚动条向单击方向移动一个页面。该值通常与滑块的页面长度相同。QScrollBar 只提供整数范围。请注意,虽然 QScrollBar 可以处理非常大的数字,
但当前屏幕上的滚动条无法有效地表示超过约 100,000 像素的范围。
超过这个范围,用户就很难使用键盘或鼠标控制滑块,滚动箭头也将变得有限。ScrollBar从 QAbstractSlider继承了一组全面的信号:Value Changed()是在滚动条的值改变时发出的。The tracking() 确定在用户交互过程中是否会发射此信号。Range Changed()是在滚动条的值范围改变时发出的。当用户开始拖动滑块时,会发出sliderPressed()事件.当用户   拖动滑块时,会发出sliderMoved()事件。当用户   释放滑块时,会发出sliderReleased()当用户交互或通过triggerAction()函数更改滚动条时,会发出ActionTriggered()。A scroll bar can be controlled by the keyboard,
but it has a default focusPolicy() of Qt::NoFocus.
Use setFocusPolicy() to enable keyboard interaction with the scroll bar:Left/Right move a horizontal scroll bar by one single step.Up/Down    move a vertical scroll bar by one single step.PageUp     moves up one page.PageDown   moves down one page.Home       moves to the start (minimum).End        moves to the end (maximum).The slider itself can be controlled by using the triggerAction() function to
simulate模拟 user interaction with the scroll bar controls.
This is useful if you have many different widgets that use a common range of values.
Most GUI styles use the pageStep() value to calculate the size of the slider.*/class Q_WIDGETS_EXPORT QScrollBar : public QAbstractSlider //滚动条
{Q_OBJECT //又插入了此宏private:friend class QAbstractScrollAreaPrivate;friend Q_WIDGETS_EXPORT  //友元函数QStyleOptionSlider qt_qscrollbarStyleOption(QScrollBar *scrollBar);Q_DISABLE_COPY(QScrollBar)Q_DECLARE_PRIVATE(QScrollBar)#if QT_CONFIG(itemviews)  //经测试,是有这个定义的。  #if 是成立的friend class QTableView;friend class QTreeViewPrivate;friend class QCommonListViewBase;friend class QListModeViewBase;friend class QAbstractItemView;
#endifpublic://Constructs a vertical scroll bar. //看来是默认构造垂直滚动条//The parent argument is sent to the QWidget constructor.//The minimum defaults to 0, the maximum to 99,//with a singleStep size of 1 and a pageStep size of 10,//and an initial value of 0.explicit QScrollBar(QWidget * parent = nullptr);explicit QScrollBar(Qt::Orientation, QWidget * parent = nullptr);//Constructs a scroll bar with the given orientation.~QScrollBar();QSize sizeHint() const override;bool             event(QEvent      * event) override;protected:void        paintEvent(QPaintEvent *      ) override;void   mousePressEvent(QMouseEvent *      ) override;void mouseReleaseEvent(QMouseEvent *      ) override;void    mouseMoveEvent(QMouseEvent *      ) override;void         hideEvent(QHideEvent  *      ) override;#ifndef QT_NO_CONTEXTMENUvoid  contextMenuEvent(QContextMenuEvent * ) override;
#endif#if QT_CONFIG(wheelevent)void wheelEvent(QWheelEvent       * ) override;
#endifvirtual void initStyleOption(QStyleOptionSlider * option) const;void sliderChange(SliderChange change) override;
/*  //这是重写父类的普通成员函数
class QAbstractSlider : public QWidget
{enum SliderChange {SliderRangeChange      ,SliderOrientationChange,SliderStepsChange      ,SliderValueChange};
};
*/}; //完结 class QScrollBar : public QAbstractSliderQT_END_NAMESPACE#endif // QSCROLLBAR_H

(2)

嘘嘘

相关文章:

  • 数据库原理——E-R图的极速省流理解 例题解析
  • 如何限制pod 进程/线程数量?
  • Python基本环境搭配
  • C++ 的动态多态
  • C语言易混淆知识点详解
  • 刷leetcodehot100返航版--哈希表5/5、5/6
  • FTP/TFTP/SSH/Telnet
  • 不小心把当前的环境变量路径覆盖掉怎么办
  • 项目管理学习-CSPM(1)
  • 手表功能RunModeTasks
  • 二叉搜索树 AVL树 红黑树 的性质
  • Java——泛型
  • Stellaris 群星 [DLC 解锁] CT 表 [Steam] [Windows SteamOS macOS]
  • rvalue引用()
  • 解决Jenkis安装、配置及账号权限分配时遇到的问题
  • 电脑怎么分屏操作?
  • 【Python】 `os.getenv()` vs. `os.environ.get()`:环境变量获取方式的本质差异解析
  • 用二进制魔法解锁复杂问题:状态压缩动态规划实战揭秘
  • 算法每日一题 | 入门-顺序结构-上学迟到
  • 9.城市基础设施更新工程
  • 五一档观众最满意《水饺皇后》
  • 习近平将对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 电商平台集体出手,多措并举助力外贸企业拓内销
  • 贵州赤水一处岩体崩塌致4车受损,连夜抢修后已恢复通车
  • 美国将于6月14日举行阅兵式,美媒报当天是特朗普生日
  • 美股三大指数均收涨超1%,热门中概股强势拉升