我在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()));
}
}
}}
发布于 2013-11-27 15:01:36
QScrollArea继承了提供此信号的QAbstractSlider:-
void QAbstractSlider::actionTriggered(int action)其中的动作可以是QAbstractSlider::SliderToMaximum.
我希望您可以连接到此信号,并在操作为QAbstractSlider::SliderToMaximum时进行测试,表示用户已滚动到底部。
https://stackoverflow.com/questions/20245575
复制相似问题