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代表可伸縮。
這里設置右邊的可伸縮。當拉伸整個窗口時候,左邊保持原來寬度。
拉伸后,我們發現左邊的寬度不變。