Qt佈局管理: 分割視窗QSplitter類講解(純程式碼實現分割視窗)
一個QSplitter是一個可以包含其他控制元件的控制元件,這些控制元件被一個分隔條隔開,託拽這個分隔條,可以改變splitter的子控制元件的大小。
QSplitter控制元件經常做為佈局管理器使用,給使用者提供更多的介面控制。
例項:
實現功能:使用QSplitter實現分割視窗功能,整個對話方塊由四個視窗組成,各個視窗之間的大小可以任意拖拽來改變。
步驟:
1. 使用Qt Creater新建Gui應用程式,名稱為QSplitter,基類為“QMainWindow”,取消“建立介面”按鈕。
2. 在main.cpp中輸入下列程式碼。
#include "mainwindow.h" #include <QApplication> #include <QSplitter> #include <QTextCodec> #include <QTextEdit> #include <QObject> int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); QFont font("ZYSong18030" , 12); a.setFont(font); QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0); //新建主分割視窗,水平分割 QTextEdit *textLeft = new QTextEdit(QObject::tr("左部件"),splitterMain); textLeft->setAlignment(Qt::AlignCenter); QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain); //右分割視窗,並以主分割視窗作為父視窗 splitterRight->setOpaqueResize(false); QTextEdit *textUp = new QTextEdit(QObject::tr("上部件"),splitterRight); textUp->setAlignment(Qt::AlignCenter); QTextEdit *textMiddle = new QTextEdit(QObject::tr("中間部件"),splitterRight); textMiddle->setAlignment(Qt::AlignCenter); QTextEdit *textBottom = new QTextEdit(QObject::tr("底部部件"),splitterRight); textBottom->setAlignment(Qt::AlignCenter); splitterMain->setStretchFactor(1,1); splitterMain->setWindowTitle(QObject::tr("分割視窗")); splitterMain->show(); return a.exec(); }
3. 點選執行按鈕,效果圖如下:
程式中的部分函式講解:
1. QFont font("ZYSong18030" , 12); a.setFont(font); 這兩句程式碼用於指定顯示的字型。
我也可以根據需要,這樣來寫: QFont font("楷體" , 18,QFont::Bold); a.setFont(font); 此時便是楷體字型,字號為18,粗體顯示。
效果如下:
2. QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0); 新建一個QSplitter類物件,作為主分割視窗,並且設定此視窗為水平分割視窗。
QTextEdit *textLeft = new QTextEdit(QObject::tr("左部件"),splitterMain); 新建一個QTextEdit類物件,並將其插入主分割視窗。
textLeft->setAlignment(Qt::AlignCenter); 設定TextEdit物件中文字的對齊方式。
水平對齊方式有:
Constant Value Description
Qt::AlignLeft 0x0001 Aligns with the left edge.
Qt::AlignRight 0x0002 Aligns with the right edge.
Qt::AlignHCenter 0x0004 Centers horizontally in the available space.
Qt::AlignJustify 0x0008 Justifies the text in the available space.
垂直對齊方式有:
Constant Value Description
Qt::AlignTop 0x0020 Aligns with the top.
Qt::AlignBottom 0x0040 Aligns with the bottom.
Qt::AlignVCenter 0x0080 Centers vertically in the available space.
Qt::AlignBaseline 0x0100 Aligns with the baseline.
QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain); 新建一個QSplitter類物件,作為右分割視窗,並以主分割視窗作為父視窗。設定分割視窗為垂直分割視窗。
3. splitterRight->setOpaqueResize(true); 設定在拖拽分割條時,是否實時更新。若為true,則實時更新;否則在拖拽時顯示一條虛線。
splitterRight->setOpaqueResize(true);效果如下:(注意觀察分割條的顏色)
splitterRight->setOpaqueResize(false);效果如下:(注意觀察分割條的顏色)
4. splitterMain->setStretchFactor(1,1); 此函式用於設定:控制元件是否可伸縮。第一個引數用於指定控制元件的序號。第二個函式大於0時,表示控制元件可伸縮,小於0時,表示控制元件不可伸縮。
splitterMain->setStretchFactor(1,1); 效果如下:(注意觀察中間的垂直分割條)
splitterMain->setStretchFactor(1,0); 效果如下:(注意觀察中間的垂直分割條)