Qt 之 Splitter分割視窗

2021-07-22 16:55:49 字數 3292 閱讀 3627

中英文對照splitter handles(分隔條)

乙個qsplitter控制項中可以包含其他控制項,這些控制項被乙個分隔條隔開,託拽這個分隔條,裡面的控制項的大小可以改變。qsplitter控制項經常做為布局管理器使用,給使用者提供更多的介面控制。

qsplitter控制項中的子控制項總是按順序自動並肩排列(或者上下排列)。相鄰的控制項之間有乙個分隔條。下面是建立圖6.7的窗體的**:

這個例子中的窗體有乙個qsplitter控制項,其中有三個水平排列的qtextedit控制項,和布局管理器不同,qsplitter不但可以排列子控制項,還有乙個可視的外觀,qsplitter控制項從qwidget繼承,擁有qwidget所有的功能。

第一次是呼叫rightsplitter的setstretchfactor,把索引值為1的控制項(textedit)的拉伸係數設定為1,第二次是呼叫mainsplitter的setstretchfactor(),設定控制項rightsplitter的拉伸係數為1。這樣,textedit控制項就能夠得到盡可能多餘的空間。

當應用程式啟動時,qsplitter根據子控制項的初始尺寸或者sizehint合理分配每乙個子控制項的大小。程式中,我們可以呼叫qsplitter::setsizes()改變分隔條的位置。qsplitter還可以儲存當前的狀態,在程式下一次執行時恢復以前的狀態。下面是writesettings()函式,儲存當前分隔條的狀態:

void mailclient::writesettings()

下面是相應的readsettings()函式:

void mailclient::readsettings()

qt designer也支援qsplitter。把子控制項放到合適的位置,把他們選中,選擇選單form|lay out horizontally in splitter或者form|lay out verticallly in splitter,所選擇的子控制項就被加入到qsplitter控制項中。

對qsplitter進行水平或者垂直巢狀可以實現更加複雜的布局。例如,圖6-9所示的mailclient程式中,就是乙個垂直方向的qsplitter控制項中巢狀了乙個水平方向的qsplitter控制項。

下面的**是mailclient程式的主視窗類建構函式**:

mailclient::mailclient()

建立完我們所需要顯示三個控制項(messagetreewidget,textedit,folderstreewidget)後,我們建立乙個垂直的qsplitter,rightsplitter控制項,把messagetreewidget和textedit控制項加到rightsplitter中。然後建立乙個水平的qsplitter,mainsplitter控制項,把rightsplitter和folderstreewidget加入到mainsplitter中。把mainsplitter做為qmainwindow的**控制項。

當使用者改變視窗的大小時, qsplitter通常給所有的子控制項一樣的空間。在mailclient程式中,我們希望左邊的檔案樹控制項(folderstreewidget)和訊息樹控制項(messagetreewidget)保持它們的大小,把其他的空間都分配給qtextedit。這由兩個setstretchfactor()呼叫實現。第乙個引數是0開始的子控制項的索引值,第二個引數為我們設定的拉伸係數,預設值為0。

測試**:

[cpp]view plain

copy

qlistitems;  

for (int i = 0; i 

qtreewidget* messagestreewidget = new qtreewidget();  

messagestreewidget->setcolumncount(1);  

messagestreewidget->inserttoplevelitems(0, items);  

for (int i = 0; i 

qtreewidget* folderstreewidget = new qtreewidget();  

folderstreewidget->setcolumncount(1);  

folderstreewidget->inserttoplevelitems(0, items);  

qtextedit* textedit = new qtextedit();  

qsplitter* rightsplitter = new qsplitter(qt::vertical);  

rightsplitter->addwidget(messagestreewidget);   //索引0

rightsplitter->addwidget(textedit);             //索引1

rightsplitter->setstretchfactor(1, 1);          //索引為x的控制項拉伸

qsplitter* mainsplitter = new qsplitter(qt::horizontal);  

mainsplitter->addwidget(folderstreewidget);  

mainsplitter->addwidget(rightsplitter);  

mainsplitter->setstretchfactor(1, 1);  

setcentralwidget(mainsplitter);  

拉伸前:

拉伸後

from: 

C 用splitter分割視窗注意事項

c 用splitter分割視窗注意事項 1 一定要按照順序拖,即z次序不能亂 2 先拖panel1到from中,設定dock為left 3,拖splitter1到from中,注意千萬不能拖到panel1上面,否則會失敗!此時splitter1的dock預設設定為left,設定borderstyle為...

Qt學習 分割視窗QSplitter類

分割視窗在應用程式中經常用到,比如在類似資源管理器的視窗設計中 下面用 實現上面視窗的設計 1.建立專案時基類選擇qmainwindow,取消gernerate form核取方塊的選中狀態。2.在main.cpp中編寫如下 include include include int main int a...

Qt學習 分割視窗QSplitter類

分割視窗在應用程式中經常用到,比如在類似資源管理器的視窗設計中 下面用 實現上面視窗的設計 1.建立專案時基類選擇qmainwindow,取消gernerate form核取方塊的選中狀態。2.在main.cpp中編寫如下 view plain copy to clipboard print?inc...