Qt5佈局管理(一)——QSplitter分割窗口類

轉載:LeeHDsniperide

概述

本文首先經過三個實例分別介紹Qt5的分割窗口QSplitter類停靠窗口QDockWidget類堆棧窗體QStackedWidget類,而後介紹佈局管理器的使用。函數

最後經過一個綜合實例介紹以上內容的綜合應用。 佈局

分割窗口QSplitter類

實例效果

重要代碼

這個程序的全部代碼都集中在main.cpp文件中:字體

 1 #include <QApplication>
 2 #include <QSplitter>
 3 #include <QTextEdit>
 4 #include <QTextCodec>
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8     //ont::QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false)
 9     //第一個參數是字體族,第二個是字體尺寸,第三個是加粗係數,第四個是斜體設置
10     QFont font("ZYSong18030",12);//指定顯示字體
11     a.setFont(font);
12 
13     QSplitter *splitterMain;
14     QTextEdit *textleft;
15     QSplitter *splitterRight;
16     QTextEdit *textUp;
17     QTextEdit *textBottom;
18     splitterMain=new QSplitter(Qt::Horizontal,0);                   //Horizontal:水平的
19     textleft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);
20     textleft->setAlignment(Qt::AlignCenter);
21     //右部分分割窗口
22     splitterRight=new QSplitter(Qt::Vertical,splitterMain);        //Vertical:垂直的
23     splitterRight->setOpaqueResize(false);                                    //Opaque:不透明的
24     textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight);
25     textUp->setAlignment(Qt::AlignCenter);
26     textBottom=new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);
27     textBottom->setAlignment(Qt::AlignCenter);
28     splitterMain->setStretchFactor(0,1);                                      //Stretch Factor:拉伸係數
29     splitterMain->setWindowTitle(QObject::tr("Splitter"));
30     splitterMain->show();
31 
32     return a.exec();
33 }

代碼筆記

1.字體設置代碼spa

1 QFont::QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false)

這是QFont對象的構造函數之一,第一個參數是字體族,第二個是字體尺寸,第三個是加粗係數,第四個是斜體設置。.net

2.設置QTextEdit控件的父對象和段落對齊方式code

1 textleft=new QTextEdit(QObject::tr("LeftWidget"),splitterMain);
2 textleft->setAlignment(Qt::AlignCenter);

對於每一個控件的構造函數,都會有一個默認爲0的參數設置其父對象。
而QTextEdit::setAlignment函數設置其段落對齊方式。對象

3.初始化QSplitter控件的分割方向和其縮放風格blog

1 splitterRight=new QSplitter(Qt::Vertical,splitterMain);
2 splitterRight->setOpaqueResize(true)

QSplitter類的構造函數第一個參數表示該分割窗口是水平分割仍是垂直分割,第二個參數是其父對象。
QSplitter的setOpaqueResize設置了分割窗口在縮放時的風格。ip

opaqueResize : bool 
This property holds whether resizing is opaque. 
The default resize behavior is style dependent (determined by the SH_Splitter_OpaqueResize style hint). 
However, you can override it by calling setOpaqueResize()

假設一個QSplitter對象中有兩個窗口,當你調整中間的分割線的位置時,當該QSplitter對象的opaqueResize屬性是false,

那麼會出現一個虛線表示調整後的分割線的位置,反之,則什麼也沒有。

4. 設置QSplitter的伸縮因子

1 splitterMain->setStretchFactor(1,0); 

setStretchFactor( int index, int stretch )用於設定可伸縮控件。

第一個參數指定要設置控件的序號(按插入順序從0依次編號);第二個參數大於0時表示此控件爲可伸縮控件。
在上面的實例中,splitterMain對象中,共有兩個控件:一個是左邊的textleft控件,另外一個是右邊的splitterRight對象。那麼上面的這行代碼就代表,在整個窗口也就是splitterMain在縮放時,splitterRight對象會保持不伸縮狀態。可是當咱們去縮放的時候,發現兩個分割窗口都發生了伸縮。我猜想是由於全部的控件都是默認伸縮的。

這一點能夠從下面的例子證實。

修改上面的代碼爲:

1 splitterMain->setStretchFactor(0,1);

意味着左邊的textleft控件將是可伸縮的:

繼續修改代碼:

1 splitterMain->setStretchFactor(1,1); 

意味着右邊的splitterRight控件是可伸縮的:

繼續修改代碼:

1 splitterMain->setStretchFactor(2,1); 

 

顯然在splitterMain中是不存在index爲2的控件的,可是窗口在縮放時仍是體現出了兩個控件都伸縮的特性。
由此能夠證實個人上述猜想是正確的。

相關文章
相關標籤/搜索