在qt里面有默认的滚动区域可以方便使用,QScrollArea,这个自带了水平和垂直滚动条。
但是这些默认样式一般不是我们想要的,例如很多时候我们只需滚动块,而不需要其他的控件。
例如效果:
现在介绍自定义滚动条。
1.关闭默认滚动条显示
在使用QScrollArea时,垂直和水平滚动条全部不展示:
area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
2.派生QScrollBar
class MyScrollBar :public QScrollBar
{
Q_OBJECT
public:
MyScrollBar(QWidget* parent = nullptr);
~MyScrollBar();
QSize sizeHint()const override;
void setArea(QAbstractScrollArea * area);
protected:
void paintEvent(QPaintEvent *ev) override;
private slots:
void onSetRange(int min, int max);
private:
QAbstractScrollArea* m_area = nullptr;
MyScrollStyle* m_style = nullptr;
};
我们自定义的QScrollBar需要绑定原有的滚动条信号,这里我们只处理垂直滚动条:
void MyScrollBar::setArea(QAbstractScrollArea * area)
{
area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
area-