所以这是关于如何做到这一点的基本示例。首先是 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) 信号连接到绘制图像的插槽。