網上多是用StyleSheet來設置控件默認滾動條的樣式,很久之前我也是這麼做的。
但是這樣做有個小問題,當滾動條顯示時,會擠佔控件viewport的空間。
一.效果
二.原理
使用自定義的QScrollBar替換控件默認QScrollBar,替換時,要保證自定義的滾動條和默認滾動條能夠聯動。
默認滾動條會響應鼠標滾輪,聯動以後,自定義的滾動條也能響應滾動了,就像效果中展示的一樣。
聯動關鍵代碼如下:
QScrollBar *m_vScrollBar;
connect(verticalScrollBar(), SIGNAL(valueChanged(int)), m_vScrollBar, SLOT(setValue(int)));
connect(m_vScrollBar, SIGNAL(valueChanged(int)), verticalScrollBar(), SLOT(setValue(int)));
三.代碼實踐
QHListWidget.h
#ifndef QHLISTWIDGET_H
#define QHLISTWIDGET_H
#include <QListWidget>
#include <QScrollBar>
#include <QResizeEvent>
class QHListWidget : public QListWidget
{
Q_OBJECT
public:
QHListWidget(QWidget *parent = 0);
~QHListWidget();
protected:
void resizeE