//視窗布局
rightsplitter = new qsplitter(qt::vertical);
rightsplitter->addwidget(messagestreewidget); //在右視窗中新增乙個郵件列表
rightsplitter->addwidget(textedit); //顯示文字郵件
rightsplitter->setstretchfactor(1, 1); //保證textedit伸展到多餘的空間
mainsplitter = new qsplitter(qt::horizontal);
mainsplitter->addwidget(folderstreewidget);
mainsplitter->addwidget(rightsplitter);
mainsplitter->setstretchfactor(1, 1); //使用兩個setstretchfactor保證了把多餘的額外空間都留給textedit
setcentralwidget(mainsplitter);
setwindowtitle(tr("mail client"));
效果如下圖:
//主splitter,以下填充text和子splitter
qsplitter *splittermain=new qsplitter(qt::horizontal,0);
qtextedit *textleft=new qtextedit(qobject::tr("left widget"),splittermain);
textleft->setalignment(qt::aligncenter);
qsplitter *splitterright=new qsplitter(qt::vertical,splittermain);
splitterright->setopaqueresize(true);
//開始填充右邊的splitter,放上兩個text
qtextedit *texttop=new qtextedit(qobject::tr("right top widget"),splitterright);
texttop->setalignment(qt::aligncenter);
qtextedit *textbottom=new qtextedit(qobject::tr("right bottom widget"),splitterright);
textbottom->setalignment(qt::aligncenter);
//設定主splitter
qt"splitters",分界線屬性調整,控制項大小比例調整示例:
//主分割視窗
qsplitter *splittermain = new qsplitter(qt::horizontal, 0);
qtextedit *textleft = new qtextedit(qobject::tr("left widget"), splittermain);
textleft->setalignment(qt::aligncenter);
//右部分割視窗
qsplitter *splitterright = new qsplitter(qt::vertical, splittermain);
splitterright->setopaqueresize(false);
qtextedit *textup = new qtextedit(qobject::tr("top widget"), splitterright);
textup->setalignment(qt::aligncenter);
qtextedit *textbottom = new qtextedit(qobject::tr("bottom widget"), splitterright);
分界線屬性如何調整呢? 我查了一下, 原來是一條分界線是乙個qsplitterhandle 類物件. 通過下面的一些**, 我們可以統一修改分界線的樣式.
mainsplitter->setstylesheet("qsplitter::handle "); //設定分界線的樣式
mainsplitter->sethandlewidth(20); //設定分界線的寬度
分界線的背景顏色變為"黑色", 並且寬度變得很大, 看來上述**是起到作用了. 如果有很多條分界線, 我們希望只修改第一條的分界線, 怎麼辦呢? 請看下面的一行**:
qsplitterhandle *handle = mainsplitter->handle(1); //注意不是從0 索引開始, 如果找不到分界線, 將返回null.
通過上述**, 我們可以取得left 和 bottom 之間的分界線. 值得注意的是, mainsplitter->handle(0) 是存在的, 但是無法對其進行處理. 為了驗證我們是否真的獲取left 和 bottom 之間的分界線的物件指標, 我們寫上下面的**:
splittermain->setstylesheet("qsplitter::handle "); //設定分界線的樣式
splittermain->sethandlewidth(1); //設定分界線的寬度
qsplitterhandle *handle = splittermain->handle(1); //注意不是從0 索引開始, 如果找不到分界線, 將返回null.
if (handle)
qsplitterhandle *handle1 = splitterright->handle(1); //注意不是從0 索引開始, 如果找不到分界線, 將返回null.
if (handle1)
"); //設定分界線的樣式
handle1->setfixedwidth(1);
}
對於left和 top 來說, 他們的本身的大小相對於整個視窗來說, 都是很小的. 這樣就存在著一些多餘的空間, 這些空間可以給left, 也可以給top, 或者兩個平分. 對於left 和 top 各自空間大小的控制, 是通過 qsplitter 的 setstretchfactor 方法, 該方法的宣告:
(所以需要成對設定)
void setstretchfactor(int index, int stretch);
第乙個引數index 是子微件的索引值, 從0 開始. 這裡的話,left是0, top 是1; 第二個引數 stretch 是拉伸係數, int 型別, 下面主要對stretch 的數值進行說明.
1. splittermain->setstretchfactor(0, 1);
2. splittermain->setstretchfactor(1, 5);
拉伸係數為負整數的微件將佔據最大的多餘空間. 他們內部也應該存在著乙個預設拉伸系數值0. stretch為 0 的微件, 將把最大多餘空間讓給stretch 為正整數的微件. 如果有多個stretch 為正整數的微件, 他們的多餘空間的占有率由通過數字的比例來確定的.
QT 之QSplitter 切割視窗
qt之切分視窗 qsplitter就是乙個可以包含一些其他視窗部件的部件。在切分視窗qsplitter中的這些視窗部件會通過切分條splitter handle而分割開來。使用者可以通過拖動這些分割條改變切分條中子視窗的大小。qsplitter中的子視窗部件將會自動按照建立時的順序乙個挨著乙個的放在...
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...