我在QScrollArea中向用户显示一些信息。 用户应该看到所有内容,然后才能继续(至少内容应该滚动到最后) 我怎么能轻易地发现这个?
重新实现virtual void scrollContentsBy (int dx,int dy)
是唯一的方法吗?
修改
我能够解决它,但不得不使用一些解决方法:
我希望,有更好的解决方案。
void NegativeConfirmation::recheckPosition()
{
processScrollAction(1);
}
void NegativeConfirmation::processScrollAction( int evt)
{
if ( evt == QAbstractSlider::SliderToMaximum) // Have not managed to receive this action
{
ui->bConfirm->setEnabled(true);
}
//Another approach
QWidget * sw = ui->scrollArea->widget();
if ( sw ) //any content at all ?
{
QScrollBar * sb = ui->scrollArea->verticalScrollBar();
if ( sb )
{
int sbv = sb->value();
int sbm = sb->maximum()-10;
if ( sbm>0 && sbv >= sbm )
{
ui->bConfirm->setEnabled(true);
}
else
{
QTimer::singleShot(1000, this, SLOT(recheckPosition()));
}
}
}
}
答案 0 :(得分:1)
QScrollArea继承提供此信号的QAbstractSlider: -
void QAbstractSlider::actionTriggered(int action)
行动可以是 QAbstractSlider :: SliderToMaximum 。
我希望你可以连接到这个信号并测试动作是QAbstractSlider :: SliderToMaximum,表示用户已经滚动到底部。