首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保QScrollArea中的整个区域被显示出来?

如何确保QScrollArea中的整个区域被显示出来?
EN

Stack Overflow用户
提问于 2013-11-27 14:51:11
回答 1查看 294关注 0票数 1

我在QScrollArea中向用户显示一些信息。用户应该已经看到了所有的内容,然后她才能继续(至少内容应该被滚动到最后),我怎么能轻易地检测到这一点呢?

virtual void scrollContentsBy (int dx,int dy)的重新实现是唯一的途径吗?

编辑

我能够解决这个问题,但不得不采取一些解决办法:

  1. 滚动-由信号actionTriggered(int)发送的操作值从来没有值::SliderToMaximum (Qt4.8,Windows 7)。因此,我已经手动检查了,如果滑块的值接近最大值。
  2. 即使滚动条小部件被鼠标拖到底部,滚动条的值也永远不是最大值。只有当滚动条小部件被任何其他事件(如箭头向下或鼠标滚轮)移动时,该值才可能成为最大值。我用recheckPosition()解决了这个问题

我希望有更好的解决办法。

代码语言:javascript
复制
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()));
        }
    }
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-27 15:01:36

QScrollArea继承了提供此信号的QAbstractSlider:-

代码语言:javascript
复制
void QAbstractSlider::actionTriggered(int action)

其中的动作可以是QAbstractSlider::SliderToMaximum.

我希望您可以连接到此信号,并在操作为QAbstractSlider::SliderToMaximum时进行测试,表示用户已滚动到底部。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20245575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档