【Qt】QBoxLayout类详解
00. 目錄
文章目錄
- 00. 目錄
- 01. 概述
- 02. 公有成員方法
- 03. 常用成員方法介紹
- 04. 預(yù)留
- 05. 預(yù)留
- 06. 附錄
01. 概述
QBoxLayout類將子窗口控件水平或垂直排列。
QBoxLayout占用它獲取的空間(從其父布局或從parentWidget()),將其劃分為一行框,并使每個托管窗口小部件填充一個框內(nèi)。
如果QBoxLayout的方向是Qt :: Horizontal,則將這些框以適當(dāng)?shù)拇笮》胖迷谝恍兄小C總€小部件(或其他框)將至少獲得其最小尺寸,并且至多獲得其最大尺寸。任何多余的空間都會根據(jù)拉伸因子進行共享(有關(guān)更多信息,請參見下文)。
如果QBoxLayout的方向是Qt :: Vertical,則將這些框放置在一列中,并再次使用適當(dāng)?shù)拇笮 ?/p>
創(chuàng)建QBoxLayout的最簡單方法是使用便捷類之一,例如QHBoxLayout(用于Qt :: HorizontalBox)或QVBoxLayout(用于Qt :: VerticalBox)。您還可以直接使用QBoxLayout構(gòu)造函數(shù),將其方向指定為LeftToRight,RightToLeft,TopToBottom或BottomToTop。
如果QBoxLayout不是頂級布局(即,它不管理小部件的所有區(qū)域和子級),則必須先將其添加到其父級布局中,然后才能對其進行任何操作。添加布局的通常方法是調(diào)用parentLayout-> addLayout()。
完成此操作后,可以使用以下四個函數(shù)之一將框添加到QBoxLayout中:
- addWidget()將小部件添加到QBoxLayout并設(shè)置小部件的拉伸因子。(拉伸因子沿著Box的行。)
- addSpacing()創(chuàng)建一個空的Box;這是您用來創(chuàng)建美觀且寬敞的對話框的功能之一。有關(guān)設(shè)置邊距的方法,請參見下文。
- addStretch()創(chuàng)建一個空的,可拉伸的框。
- addLayout()將包含另一個QLayout的框添加到該行,并設(shè)置該布局的拉伸因子。
使用insertWidget(),insertSpacing(),insertStretch()或insertLayout()在方框中的指定位置插入一個框。
QBoxLayout還包括兩個邊距寬度:
- setContentsMargins()設(shè)置小部件每一側(cè)的外邊框的寬度。這是沿著QBoxLayout的四個邊中的每個保留空間的寬度。
- setSpacing()設(shè)置相鄰框之間的寬度。(您可以使用addSpacing()在特定位置獲得更多空間。)
樣式提供了頁邊距默認值。大多數(shù)Qt樣式指定的默認邊距對于子窗口小部件為9,對于Windows為11。間距默認與頂層布局的邊距寬度相同,或與父布局相同。
要從布局中刪除小部件,請調(diào)用removeWidget()。在小部件上調(diào)用QWidget :: hide()還可以有效地從布局中刪除該小部件,直到調(diào)用QWidget :: show()為止。
由于它們方便的構(gòu)造函數(shù),您幾乎總是要使用QVBoxLayout和QHBoxLayout而不是QBoxLayout。
02. 公有成員方法
03. 常用成員方法介紹
水平布局器 QHBoxLayout 和垂直布局器 QVBoxLayout 的基類都是 QBoxLayout,只是二者排列方向不同。水平和垂直布局器的主要功能函數(shù)都位于基類 QBoxLayout 里面,我們這里專門介紹一下這個基類的功能。
QBoxLayout 構(gòu)造函數(shù)和 setDirection() 都可以指定布局器的方向:
QBoxLayout(Direction dir, QWidget * parent = 0) void setDirection(Direction direction)QBoxLayout 布局器的方向 QBoxLayout::Direction 枚舉不僅可以指定水平和垂直,還能指定反方向排列:| QBoxLayout::LeftToRight | 0 | 水平布局,從左到右排列 |
| QBoxLayout::RightToLeft | 1 | 水平布局,從右到左排列 |
| QBoxLayout::TopToBottom | 2 | 垂直布局,從上到下排列 |
| QBoxLayout::BottomToTop | 3 | 垂直布局,從下到上排列 |
水平布局器 QHBoxLayout 和垂直布局器 QVBoxLayout 默認是其中的兩種:QBoxLayout::LeftToRight 和 QBoxLayout::TopToBottom 。
布局器是一定要往里面添加控件才有用,添加控件的函數(shù)如下: void addWidget(QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0) void insertWidget(int index, QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0) widget 就是要添加的控件指針,stretch 是伸展因子(到 6.5 節(jié)再講這個,本節(jié)先不管),伸展因子越大, 窗口變大時拉伸越 多,alignment 一般不需要指定,用默認的即可。第一個 addWidget() 是將控件添加到 布局里面的控件列表末尾,第二個 insertWidget() 是將控件插入到布局里控件列表序號為 index 的位置。對于布局器里的各個控件,可以設(shè)置相鄰控件之間默認的間距: void setSpacing(int spacing) spacing 就是間隔的像素點數(shù)目。如果不設(shè)置 spacing,那么布局器會根據(jù)默認策略決定如何添加控件之間的間隙,一般是根據(jù)父窗口 或父布局器的策略來 定。布局器中不僅可以添加控件,還可以直接添加其他布局: void addLayout(QLayout * layout, int stretch = 0) void insertLayout(int index, QLayout * layout, int stretch = 0) 參數(shù)里添加的 layout 布局器會作為一個整體,與父布局器里其他控件一塊排布,stretch 也是伸展因子。對于 QBoxLayout、QHBoxLayout 、QVBoxLayout 布局器,通常不需要手動新建空白條對象,因為它們自帶相關(guān)函數(shù): void QBoxLayout::?addSpacing(int size) //添加 size 固定尺寸空白條到布局器 void QBoxLayout::?addStretch(int stretch = 0) //添加自動拉伸的空白條到布局器 void QBoxLayout::?insertSpacing(int index, int size) //插入 size 固定尺寸空白條到布局器 void QBoxLayout::?insertStretch(int index, int stretch = 0) //插入自動拉伸的空白條到布局器 對于 add* 添加函數(shù),因為布局器內(nèi)部通常有多個控件,添加函數(shù)是把空白條添加到最后。 而 insert* 插入函數(shù),是把空白條插入到指定序號 index 的位置。如果要添加自己創(chuàng)建的空白條對象,也是可行的: void addSpacerItem(QSpacerItem * spacerItem) void insertSpacerItem(int index, QSpacerItem * spacerItem) 另外,還可以自己從 QLayoutItem 派生新的布局器條目,對布局器條目進行自定義,這些新的布局器條目可以用如下函數(shù)添加: virtual void addItem(QLayoutItem * item) void insertItem(int index, QLayoutItem * item)講了如何添加控件和其他布局器,當(dāng)然也可以計算布局器里面的條目計數(shù): virtual int count() const 如果要獲得布局器中某個序號的條目: virtual QLayoutItem * itemAt(int index) const 如果要刪除布局器中某個序號的條目: virtual QLayoutItem * takeAt(int index) 布局器中無論是填充普通控件還是其他布局器,每個條目都是用 QLayoutItem 封裝的,對于獲得的 QLayoutItem 指針(非空指針), 如果要獲取里面封裝的控件、布局器或空白條,使用如下函數(shù): QWidget * QLayoutItem::?widget() QLayout * QLayoutItem::?layout() QSpacerItem * QLayoutItem::?spacerItem() 注意判斷以上函數(shù)的返回值是否為 NULL 指針,如果是非空指針才能進行其他操作。04. 預(yù)留
05. 預(yù)留
06. 附錄
6.1 Qt教程匯總
網(wǎng)址:https://dengjin.blog.csdn.net/article/details/115174639
總結(jié)
以上是生活随笔為你收集整理的【Qt】QBoxLayout类详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Qt】Qt手动布局
- 下一篇: 【Qt】Qt Creator中布局器详解