1. 程式人生 > >Qt學習——分割視窗QSplitter類

Qt學習——分割視窗QSplitter類

分割視窗在應用程式中經常用到,比如在類似資源管理器的視窗設計中:

下面用程式碼實現上面視窗的設計:

1.建立專案時基類選擇QMainWindow,取消Gernerate form複選框的選中狀態。

2.在main.cpp中編寫如下程式碼:

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QSplitter>
#include <QTextCodec>
#include <QTextEdit>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //設定字型
    QFont font("ZYSong18030",12);
    a.setFont(font);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    //主splitter,以下填充text和子splitter
    QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);
    QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);
    textLeft->setAlignment(Qt::AlignCenter);
    QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);
    splitterRight->setOpaqueResize(false);
    //開始填充右邊的splitter,放上兩個text
    QTextEdit *textTop=new QTextEdit(QObject::tr("Right Top Widget"),splitterRight);
    textTop->setAlignment(Qt::AlignCenter);
    QTextEdit *textBottom=new QTextEdit(QObject::tr("Right Bottom Widget"),splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);
    //設定主splitter
    splitterMain->setStretchFactor(1,1);
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();
    return a.exec();
}


解析:

1.QSplitter的構造方法:

QSplitter*splitterMain=newQSplitter(Qt::Horizontal,0);

第一個引數通過

不過子splitter設定的

newQSplitter(Qt::Vertical,splitterMain);

代表主視窗是splitterMain。則子splitter就被新增到splitterMain中。

新增時為從左至右(或從上至下)新增;

2.新增QTextEdit控制元件。

QTextEdit*textLeft=newQTextEdit(QObject::tr("LeftWidget"),splitterMain
);

第一個引數設定文字內容,第二個引數設定主窗體。

3.設定拖動時是否實時更新

splitterRight->setOpaqueResize(false);

false為不實時更新——在拖動時候只顯示一條灰色的線條,在拖動到位並釋放滑鼠後再顯示分割條。預設為true——實時更新。


4.設定可伸縮控制元件:

splitterMain->setStretchFactor(1,1);

第一個引數代表控制元件序號,第一個序號為0.後面引數0代表不可伸縮,非0代表可伸縮。

這裡設定右邊的可伸縮。當拉伸整個視窗時候,左邊保持原來寬度。


拉伸後,我們發現左邊的寬度不變。