轉載:LeeHDsniperide
本文首先經過三個實例分別介紹Qt5的分割窗口QSplitter類、停靠窗口QDockWidget類、堆棧窗體QStackedWidget類,而後介紹佈局管理器的使用。函數
最後經過一個綜合實例介紹以上內容的綜合應用。 佈局
這個程序的全部代碼都集中在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的控件的,可是窗口在縮放時仍是體現出了兩個控件都伸縮的特性。
由此能夠證實個人上述猜想是正確的。