首页 > 解决方案 > 需要 QAbstractScrollArea 指导

问题描述

我正在设计一个会计应用程序,我想在滚动窗口中显示总帐项目。每个 GL 项目都是一个带有一些控件和一些功能的小部件。它可能会改变它的高度,从而将窗口中的后续小部件向下移动。由于可能有 1000 条 GL 行,因此有 1000 条小部件,我想我会创建足够的小部件来填充窗口并在滚动窗口时回收它们。当每个小部件循环进入时,它将填充与该特定 GL 项目关联的数据。

我编写了一个包含 20 个左右小部件的测试应用程序。该应用程序使用自定义布局类来垂直定位小部件(如 QVBoxLayout)。然后,我使用 QScrollArea 类为我的小部件垂直布局提供了一个视口。所有这一切都很好。我可以滚动小部件,所有小部件功能都有效,并且如果先前的小部件垂直扩展,小部件会适当地移动。

唯一的问题是垂直滚动条只知道我有限的一组测试小部件。我认为无法使用 QScrollArea 对更大的基础数据集进行更复杂的滚动操作。出于这个原因,我想我会研究 QAbstractScrollArea。我在网上找到了源代码,并试图深入研究它。我遇到了一些麻烦,因为我对滚动的工作原理没有清晰的整体了解。滚动实际上是如何完成的。小部件中的窗口是如何绘制的——尤其是当视口的顶部位于小部件的中间时。

我尝试使用 widget->scroll(x,y) 方法滚动小部件,并且小部件可以正确滚动,但是当小部件重绘时滚动会丢失。我尝试使用 setGeometry(QRect) 调用在布局类中滚动我的小部件,但在这种情况下,不允许使用负 y 值。

我只需要更好地了解小部件绘图和滚动的工作原理。有人可以建议一些文档、示例或其他东西来帮助我前进。

标签: qt

解决方案


推荐阅读