したがって、これを行う方法の基本的な例を次に示します。まず、MainWindow クラスの実装のリストを次に示します。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QListWidget *listW = new QListWidget;
//Add some items
for(int i = 0; i < 20; i++) {
QListWidgetItem *item = new QListWidgetItem("Item" + QString::number(i));
listW->addItem(item);
}
listW->setVerticalScrollMode(QAbstractItemView::ScrollPerItem);
listW->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
//Set reimplemented scroll bar
listW->setVerticalScrollBar(new ScrollBar);
setCentralWidget(listW);
}
コードからわかるように、スクロール バー ポリシーを Qt::ScrollBarAsNeeded に設定しました。そうすることで、スクロールバーからの表示/非表示イベントに反応できるという事実を利用できます。QScrollBar の再実装は次のとおりです。
ScrollBar::ScrollBar(QWidget *parent) :
QScrollBar(parent)
{
}
void ScrollBar::hideEvent(QHideEvent *e)
{
emit showTip(false);
}
void ScrollBar::showEvent(QShowEvent *e)
{
emit showTip(true);
}
これで、ScrollBar からの showTip(bool) 信号を、画像を描画するスロットに接続できます。