一個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); 效果如下:(注意觀察中間的垂直分割條)