中英文對照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...