1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QABSTRACTSCROLLAREA_H
5#define QABSTRACTSCROLLAREA_H
6
7#include <QtWidgets/qtwidgetsglobal.h>
8#include <QtWidgets/qframe.h>
9
10QT_BEGIN_NAMESPACE
11
12
13#if QT_CONFIG(scrollarea)
14
15class QMargins;
16class QScrollBar;
17class QAbstractScrollAreaPrivate;
18
19class Q_WIDGETS_EXPORT QAbstractScrollArea : public QFrame
20{
21 Q_OBJECT
22
23 Q_PROPERTY(Qt::ScrollBarPolicy verticalScrollBarPolicy READ verticalScrollBarPolicy
24 WRITE setVerticalScrollBarPolicy)
25 Q_PROPERTY(Qt::ScrollBarPolicy horizontalScrollBarPolicy READ horizontalScrollBarPolicy
26 WRITE setHorizontalScrollBarPolicy)
27 Q_PROPERTY(SizeAdjustPolicy sizeAdjustPolicy READ sizeAdjustPolicy WRITE setSizeAdjustPolicy)
28
29public:
30 explicit QAbstractScrollArea(QWidget *parent = nullptr);
31 ~QAbstractScrollArea();
32
33 enum SizeAdjustPolicy {
34 AdjustIgnored,
35 AdjustToContentsOnFirstShow,
36 AdjustToContents
37 };
38 Q_ENUM(SizeAdjustPolicy)
39
40 Qt::ScrollBarPolicy verticalScrollBarPolicy() const;
41 void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy);
42 QScrollBar *verticalScrollBar() const;
43 void setVerticalScrollBar(QScrollBar *scrollbar);
44
45 Qt::ScrollBarPolicy horizontalScrollBarPolicy() const;
46 void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy);
47 QScrollBar *horizontalScrollBar() const;
48 void setHorizontalScrollBar(QScrollBar *scrollbar);
49
50 QWidget *cornerWidget() const;
51 void setCornerWidget(QWidget *widget);
52
53 void addScrollBarWidget(QWidget *widget, Qt::Alignment alignment);
54 QWidgetList scrollBarWidgets(Qt::Alignment alignment);
55
56 QWidget *viewport() const;
57 void setViewport(QWidget *widget);
58 QSize maximumViewportSize() const;
59
60 QSize minimumSizeHint() const override;
61
62 QSize sizeHint() const override;
63
64 virtual void setupViewport(QWidget *viewport);
65
66 SizeAdjustPolicy sizeAdjustPolicy() const;
67 void setSizeAdjustPolicy(SizeAdjustPolicy policy);
68
69protected:
70 QAbstractScrollArea(QAbstractScrollAreaPrivate &dd, QWidget *parent = nullptr);
71 void setViewportMargins(int left, int top, int right, int bottom);
72 void setViewportMargins(const QMargins &margins);
73 QMargins viewportMargins() const;
74
75 bool eventFilter(QObject *, QEvent *) override;
76 bool event(QEvent *) override;
77 virtual bool viewportEvent(QEvent *);
78
79 void resizeEvent(QResizeEvent *) override;
80 void paintEvent(QPaintEvent *) override;
81 void mousePressEvent(QMouseEvent *) override;
82 void mouseReleaseEvent(QMouseEvent *) override;
83 void mouseDoubleClickEvent(QMouseEvent *) override;
84 void mouseMoveEvent(QMouseEvent *) override;
85#if QT_CONFIG(wheelevent)
86 void wheelEvent(QWheelEvent *) override;
87#endif
88#ifndef QT_NO_CONTEXTMENU
89 void contextMenuEvent(QContextMenuEvent *) override;
90#endif
91#if QT_CONFIG(draganddrop)
92 void dragEnterEvent(QDragEnterEvent *) override;
93 void dragMoveEvent(QDragMoveEvent *) override;
94 void dragLeaveEvent(QDragLeaveEvent *) override;
95 void dropEvent(QDropEvent *) override;
96#endif
97
98 void keyPressEvent(QKeyEvent *) override;
99
100 virtual void scrollContentsBy(int dx, int dy);
101
102 virtual QSize viewportSizeHint() const;
103
104private:
105 Q_DECLARE_PRIVATE(QAbstractScrollArea)
106 Q_DISABLE_COPY(QAbstractScrollArea)
107 Q_PRIVATE_SLOT(d_func(), void _q_hslide(int))
108 Q_PRIVATE_SLOT(d_func(), void _q_vslide(int))
109 Q_PRIVATE_SLOT(d_func(), void _q_showOrHideScrollBars())
110
111 friend class QStyleSheetStyle;
112 friend class QWidgetPrivate;
113};
114
115#endif // QT_CONFIG(scrollarea)
116
117QT_END_NAMESPACE
118
119#endif // QABSTRACTSCROLLAREA_H
120

source code of qtbase/src/widgets/widgets/qabstractscrollarea.h