每当用户滚动QScrollArea时收到通知的最简单方法是什么?

时间:2015-07-21 09:54:04

标签: qt scrollbar

正如QPushButton提供默认clicked()信号一样,我希望QScrollArea有一个sliderChanged()或类似的信号。有趣的是,QScrollBar确实有这样的信号。

我想做的就是知道每当用户滚动它时,滚动区域内的巨大小部件的哪个部分是可见的。

有很多解决方案,对我来说似乎都不优雅:

  1. 子类QScrollArea
  2. 将小部件子类化在滚动区域内,并重新实现其绘制事件。
  3. 使用QScrollBar
  4. 创建自定义视频
  5. 定期轮询滚动区域内小部件的位置。这似乎是最糟糕的解决方案。
  6. 有没有子类化的方法?

1 个答案:

答案 0 :(得分:4)

当滑块值发生更改时,会发出QAbstractSlider::valueChanged()个信号,并将新的滑块值作为参数。滚动视图后,系统会立即通知您。

WRT第二个问题,所提到的要点都没有。你需要:

1)获取与滚动区域相关的内部窗口小部件(如果有)的位置:

QPoint p = scrollArea->widget()->pos();

如果向下/向右滚动视图或在不滚动的情况下为null,则使用负坐标。

2)获取可见区域的大小

QSize s = scrollArea->viewport()->size();

使用这两个值,您可以构建一个代表内部窗口小部件可见区域的QRect。