Qt視窗分割器QSplitter類使用詳解
1、先看一下它的構造方法
(1)QSplitter(QWidget *parent = Q_NULLPTR)
(2)QSplitter(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR)
預設不傳引數情況下呼叫(1),它的引數預設是Q_NULLPTR(相當於0),代表是主視窗,無父視窗。
呼叫(2)的時候需要傳遞至少一個引數Qt::Orientation,這個引數通過Qt::Horizontal 和 Qt::Vertical來設定為水平分割或垂直分割。
看一個例子:
QSplitter *splitter = new QSplitter(parent); QListView*listview = new QListView; QTreeView *treeview = new QTreeView; QTextEdit *textedit = new QTextEdit; splitter->addWidget(listview); splitter->addWidget(treeview); splitter->addWidget(textedit);
例項:
來源於:https://blog.csdn.net/a649518776/article/details/6633857
#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=new QSplitter(Qt::Horizontal,0);
第一個引數通過Qt::Horizontal 和 Qt::Vertical來設定為水平分割或垂直分割。第二個設定0代表是主視窗,無父視窗。
不過子splitter設定的
new QSplitter(Qt::Vertical,splitterMain);
代表主視窗是splitterMain。則子splitter就被新增到splitterMain中。
新增時為從左至右(或從上至下)新增;
2.新增QTextEdit控制元件。
QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);
第一個引數設定文字內容,第二個引數設定主窗體。
3.設定拖動時是否實時更新
splitterRight->setOpaqueResize(false);
false為不實時更新——在拖動時候只顯示一條灰色的線條,在拖動到位並釋放滑鼠後再顯示分割條。預設為true——實時更新。
4.設定可伸縮控制元件:
splitterMain->setStretchFactor(1,1);
第一個引數代表控制元件序號,第一個序號為0.後面引數0代表不可伸縮,非0代表可伸縮。
這裡設定右邊的可伸縮。當拉伸整個視窗時候,左邊保持原來寬度。
拉伸後,我們發現左邊的寬度不變。