2012-08-13 75 views
2

我想获得QT的感觉,并决定编写一个小的十六进制编辑器。为此,我需要一个允许滚动的小部件。经过一番研究,我发现QTextEdit是出于此目的从QAbstractScrollArea派生的。在阅读QAbstractScrollArea的文档时,我找到了“setViewport()”方法,其描述为“The QAbstractScrollArea将获得给定的窗口小部件的所有权”。这不适合单独显示自身的小部件的上下文。它仅适用于QScrollArea的上下文中。从QAbstractScrollArea派生

在QT中创建一个带有滚动条的小部件的适当方式是什么?

回答

2

QAbstactScrollArea无法显示任何内容“本身”,而文档中明确指出:

QAbstractScrollArea是一个滚动区域的一个低级别的抽象。 该区域提供了一个称为视口的中心控件,其中该区域的内容将被滚动(即,在视口中呈现 内容的可见部分)。

旁边的视口是一个垂直滚动条,下面是一个 水平滚动条。当所有区域内容适合 视口时,根据滚动条的Qt :: ScrollBarPolicy,每个滚动条可以是可见的或隐藏的。当隐藏滚动条时,扩展视口以涵盖所有可用空间。当滚动条 再次可见时,视口会缩小,以便为滚动条创建空间 。

由于QAbstractScrollArea本身取得了它的视口的所有权,它是完全正常的,你不需要关心它。您可以将QAbstractScrolArea + Viewport作为单个元素的组合来考虑,它可以作为单个元素(当然是复合元素)操作,并且作为单个元素被删除,因为获取物品的所有权意味着它会与其所有者一起销毁。

+0

所以客户端可以添加一个小部件到视口,但是这将不会对gui产生明显的影响,这样的效果也不被期望? – 2012-08-13 06:02:50

+1

@TobiasLangner,好吧,用这种方式想一想。 Scrollarea只是一个带有_something_的正方形和两个滚动条。这取决于你放在里面的是什么。它可以是图片,表格,3d渲染或其他任何东西。顺便说一句,'QTextEdit'是从QAbstractScrollArea派生而不是从'QScrollArea'派生的原因,因为您希望按行而不是按像素滚动文本,并且'QScrollArea'按像素滚动。大多数情况下,'QScrollArea'将足以满足您的需求,而无需派生自己的班级。 – SingerOfTheFall 2012-08-13 06:19:21

+0

好的,那么我会仔细看看QTextEdit - 因为我需要按行滚动。谢谢。 – 2012-08-13 07:55:08