概述
本文首先通過三個執行個體分别介紹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.字型設定代碼
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控件将是可伸縮的:
繼續修改代碼:
1 splitterMain->setStretchFactor(1,1);
意味着右邊的splitterRight控件是可伸縮的:
繼續修改代碼:
1 splitterMain->setStretchFactor(2,1);
顯然在splitterMain中是不存在index為2的控件的,但是視窗在縮放時還是展現出了兩個控件都伸縮的特性。
由此可以證明我的上述猜測是正确的。
【領QT開發教程學習資料,點選下方連結莬費領取↓↓,先碼住不迷路~】
點選這裡:「連結」