QScrollArea - 如何进行精确的程序化滚动

时间:2014-09-15 00:09:49

标签: qt

我正在使用Qt为多页文档构建视图。我将每个页面绘制到一个单独的QLabel小部件,就像在ImageViewer示例应用程序中一样。

使用QVBoxLayout垂直组织QLabel。这一切都很好用,页面之间有一点灰色边缘。

我现在想要的是,当用户向下翻页时,移动滚动以使特定QLabel的顶部出现在窗口的顶部。 “确保”功能可能会这样做,但我不会立即看到如何。

有人做过这样的事吗?

1 个答案:

答案 0 :(得分:3)

如果子窗口小部件较高,则视口高度ensureWidgetVisible会滚动到窗口小部件的中间。

如果您需要滚动到小部件的顶部,可以通过一些计算轻松完成:

//childWidget - QLabel you want to move to
//area - QScrollArea

// calculate childWidget position in coordinates of the viewport
const QPoint p = childWidget->mapTo(area, QPoint(0,0));

// move scroll bar
area->verticalScrollBar()->setValue(p.y() + area->verticalScrollBar()->value());