1. 程式人生 > >Qt佈局管理: 分割視窗QSplitter類講解(純程式碼實現分割視窗)

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