diff options
Diffstat (limited to 'src/widgets/doc/snippets/myscrollarea/myscrollarea.cpp')
-rw-r--r-- | src/widgets/doc/snippets/myscrollarea/myscrollarea.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/widgets/doc/snippets/myscrollarea/myscrollarea.cpp b/src/widgets/doc/snippets/myscrollarea/myscrollarea.cpp new file mode 100644 index 0000000000..85cd1ccce7 --- /dev/null +++ b/src/widgets/doc/snippets/myscrollarea/myscrollarea.cpp @@ -0,0 +1,78 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QtWidgets> + +class MyScrollArea : public QAbstractScrollArea +{ +public: + MyScrollArea(QWidget *w); + void setWidget(QWidget *w); + +protected: + void scrollContentsBy(int dx, int dy) override; + void resizeEvent(QResizeEvent *event) override; + +private: + void updateWidgetPosition(); + void updateArea(); + + QWidget *widget; +}; + +MyScrollArea::MyScrollArea(QWidget *widget) + : QAbstractScrollArea() +{ + setWidget(widget); +} + +void MyScrollArea::setWidget(QWidget *w) +{ + widget = w; + widget->setParent(viewport()); + if (!widget->testAttribute(Qt::WA_Resized)) + widget->resize(widget->sizeHint()); + + verticalScrollBar()->setValue(0); + verticalScrollBar()->setValue(0); + + updateArea(); +} + +void MyScrollArea::updateWidgetPosition() +{ +//! [0] + int hvalue = horizontalScrollBar()->value(); + int vvalue = verticalScrollBar()->value(); + QPoint topLeft = viewport()->rect().topLeft(); + + widget->move(topLeft.x() - hvalue, topLeft.y() - vvalue); +//! [0] +} + +void MyScrollArea::scrollContentsBy(int dx, int dy) +{ + Q_UNUSED(dx); + Q_UNUSED(dy); + updateWidgetPosition(); +} + +void MyScrollArea::updateArea() +{ +//! [1] + QSize areaSize = viewport()->size(); + QSize widgetSize = widget->size(); + + verticalScrollBar()->setPageStep(areaSize.height()); + horizontalScrollBar()->setPageStep(areaSize.width()); + verticalScrollBar()->setRange(0, widgetSize.height() - areaSize.height()); + horizontalScrollBar()->setRange(0, widgetSize.width() - areaSize.width()); + updateWidgetPosition(); +//! [1] +} + +void MyScrollArea::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event); + updateArea(); +} |