2012-08-13 85 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