QScrollArea的垂直滚动条自动滚动到最底部
在使用QScrollArea时,有时候需要将滚动条滚动到最新位置,Qt本身并没有提供相应的说明,来如何实现,通过仔细阅读Qt帮助文档,给出了一种比较完美的解决方案。这里以竖直滚动条为例,来说明如何实现。具体是通过安装事件过滤器,在resize事件中设置滚动条的最大值以及位置。
- 安装事件过滤器
ui->scrollArea->installEventFilter(this);//滚动区域
ui->scrollAreaWidgetContents->installEventFilter(this);//窗口容器
- 重载eventFilter,处理resize事件
bool youWidget::eventFilter(QObject* obj, QEvent* event)
{//自动滚到到最底部
static int nHeight = 0;
if (dynamic_cast<QScrollArea*>(obj) == ui->scrollArea)
{
if (event->type() == QEvent::Resize)
{
nHeight = ui->operateScroll->height();//记录滚动窗口高度
return false;
}
}
else if (dynamic_cast<QWidget*>(obj) == ui->scrollAreaWidgetContents)
{
if (event->type() == QEvent::Resize)
{
int nDif = ui->operateWidget->height() - nHeight;
if (nDif>0)
{//容器高度大于滚动区域,此时就需要滚动条
QScrollBar* pVScrollBar = ui->operateScroll->verticalScrollBar();
pVScrollBar->setMaximum(nDif);//设置最大值
pVScrollBar->setValue(nDif);//将当前值设置成最大值
return false;
}
}
}
return QWidget::eventFilter(obj,event);
}