天天看點

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();
}
           
Qt布局管理: 分割視窗QSplitter類講解(純代碼實作分割視窗)

3.  點選運作按鈕,效果圖如下:

Qt布局管理: 分割視窗QSplitter類講解(純代碼實作分割視窗)

程式中的部分函數講解:

1.  QFont font("ZYSong18030" , 12);     a.setFont(font);  這兩句代碼用于指定顯示的字型。

我也可以根據需要,這樣來寫: QFont font("楷體" , 18,QFont::Bold);   a.setFont(font);   此時便是楷體字型,字号為18,粗體顯示。

效果如下:

Qt布局管理: 分割視窗QSplitter類講解(純代碼實作分割視窗)

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

Qt布局管理: 分割視窗QSplitter類講解(純代碼實作分割視窗)

splitterRight->setOpaqueResize(false);效果如下:(注意觀察分割條的顔色)

Qt布局管理: 分割視窗QSplitter類講解(純代碼實作分割視窗)

4.  splitterMain->setStretchFactor(1,1);  此函數用于設定:控件是否可伸縮。第一個參數用于指定控件的序号。第二個函數大于0時,表示控件可伸縮,小于0時,表示控件不可伸縮。

splitterMain->setStretchFactor(1,1); 效果如下:(注意觀察中間的垂直分割條)

Qt布局管理: 分割視窗QSplitter類講解(純代碼實作分割視窗)

splitterMain->setStretchFactor(1,0); 效果如下:(注意觀察中間的垂直分割條)

Qt布局管理: 分割視窗QSplitter類講解(純代碼實作分割視窗)