天天看點

Qt5布局管理(一)—QSplitter分割視窗類

概述

本文首先通過三個執行個體分别介紹Qt5的分割視窗QSplitter類、停靠視窗QDockWidget類、堆棧窗體QStackedWidget類,然後介紹布局管理器的使用。

最後通過一個綜合執行個體介紹以上内容的綜合應用。

分割視窗QSplitter類

執行個體效果

Qt5布局管理(一)—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.字型設定代碼

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

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

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

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

對于每個控件的構造函數,都會有一個預設為0的參數設定其父對象。

而QTextEdit::setAlignment函數設定其段落對齊方式。

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

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

QSplitter類的構造函數第一個參數表示該分割視窗是水準分割還是垂直分割,第二個參數是其父對象。

QSplitter的setOpaqueResize設定了分割視窗在縮放時的風格。

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控件将是可伸縮的:

Qt5布局管理(一)—QSplitter分割視窗類

繼續修改代碼:

1 splitterMain->setStretchFactor(1,1);            

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

Qt5布局管理(一)—QSplitter分割視窗類

繼續修改代碼:

1 splitterMain->setStretchFactor(2,1);            
Qt5布局管理(一)—QSplitter分割視窗類

顯然在splitterMain中是不存在index為2的控件的,但是視窗在縮放時還是展現出了兩個控件都伸縮的特性。

由此可以證明我的上述猜測是正确的。

【領QT開發教程學習資料,點選下方連結莬費領取↓↓,先碼住不迷路~】

點選這裡:「連結」