Files
cbh/ElaWidgetTools/ElaScrollArea.cpp
2025-09-20 01:41:33 +08:00

66 lines
3.0 KiB
C++

#include "ElaScrollArea.h"
#include <QScrollBar>
#include <QScroller>
#include "ElaScrollAreaPrivate.h"
#include "ElaScrollBar.h"
ElaScrollArea::ElaScrollArea(QWidget *parent) : QScrollArea(parent), d_ptr(new ElaScrollAreaPrivate()) {
Q_D(ElaScrollArea);
d->q_ptr = this;
setObjectName("ElaScrollArea");
setStyleSheet("#ElaScrollArea{background-color:transparent;border:0px;}");
setHorizontalScrollBar(new ElaScrollBar(this));
setVerticalScrollBar(new ElaScrollBar(this));
QScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
ElaScrollArea::~ElaScrollArea() {}
void ElaScrollArea::setIsGrabGesture(bool isEnable, qreal mousePressEventDelay) {
if (isEnable) {
QScroller::grabGesture(this->viewport(), QScroller::LeftMouseButtonGesture);
QScrollerProperties properties = QScroller::scroller(this->viewport())->scrollerProperties();
properties.setScrollMetric(QScrollerProperties::MousePressEventDelay, mousePressEventDelay);
properties.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.35);
properties.setScrollMetric(QScrollerProperties::OvershootScrollTime, 0.5);
properties.setScrollMetric(QScrollerProperties::FrameRate, QScrollerProperties::Fps60);
QScroller::scroller(this->viewport())->setScrollerProperties(properties);
} else {
QScroller::ungrabGesture(this->viewport());
}
}
void ElaScrollArea::setIsOverShoot(Qt::Orientation orientation, bool isEnable) {
QScrollerProperties properties = QScroller::scroller(this->viewport())->scrollerProperties();
properties.setScrollMetric(orientation == Qt::Horizontal ? QScrollerProperties::HorizontalOvershootPolicy
: QScrollerProperties::VerticalOvershootPolicy,
isEnable ? QScrollerProperties::OvershootAlwaysOn : QScrollerProperties::OvershootAlwaysOff);
QScroller::scroller(this->viewport())->setScrollerProperties(properties);
}
bool ElaScrollArea::getIsOverShoot(Qt::Orientation orientation) const {
QScrollerProperties properties = QScroller::scroller(this->viewport())->scrollerProperties();
return properties
.scrollMetric(orientation == Qt::Horizontal ? QScrollerProperties::HorizontalOvershootPolicy : QScrollerProperties::VerticalOvershootPolicy)
.toBool();
}
void ElaScrollArea::setIsAnimation(Qt::Orientation orientation, bool isAnimation) {
if (orientation == Qt::Horizontal) {
dynamic_cast<ElaScrollBar *>(this->horizontalScrollBar())->setIsAnimation(isAnimation);
} else {
dynamic_cast<ElaScrollBar *>(this->verticalScrollBar())->setIsAnimation(isAnimation);
}
}
bool ElaScrollArea::getIsAnimation(Qt::Orientation orientation) const {
if (orientation == Qt::Horizontal) {
return dynamic_cast<ElaScrollBar *>(this->horizontalScrollBar())->getIsAnimation();
} else {
return dynamic_cast<ElaScrollBar *>(this->verticalScrollBar())->getIsAnimation();
}
}