QSplitter类:
1、QSplitter继承自QFrame,因此QSplitter也属于容器组件
2、QSplitter将加入其中或将以其为父组件的子窗口组件通过分隔条分割
3、QSplitter中的子窗口部件会按照加入或创建的顺序排放(从左到右/从上到下)
3、用户可以拖动分隔条来改变子窗口组件的大小
一般直接将QSplitter对象作为顶级组件(窗口)使用
QSplitter的几个函数:
QSplitter ( Qt::Orientation orientation, QWidget * parent = 0 ) |
参数orientation如果取Qt::Horizontal将会水平分隔(子组件左右排布)组件,Qt::Vertical将会竖直分隔(子组件上下排布)组件,参数parent 指定父组件,父组件为0时作顶级组件使用,此参数也可以是其他的QSplitter对象
void | setOpaqueResize ( bool opaque = true ) |
参数opaque 用于设置分隔条是否实时更新,为true时分隔条实时位于鼠标拖动的位置,为false时在拖动的时候只有一条虚线随着鼠标移动,鼠标释放时分隔条更新位置
void | setStretchFactor ( int index, int stretch ) |
参数index为子组件的位置,根据排布方式来决定,下标为0的组件为最左/最上的组件,参数指stretch 定位置为index的子组件的伸展系数
注:当水平分隔时,仅指定index处的子组件的伸展系数时,如果水平拉伸分割器,未设置伸展系数的子组件大小不变,竖直时竖直拉伸分割器也是同样的效果
例子:
#include <QtGui/QApplication>
#include "Widget.h"
#include <QSplitter>
#include <QTextEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont font("ZYSong18030",12);
a.setFont(font);
//主splitter,其中包含一个QTextEdit一个子splitter
QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);
QTextEdit *textLeft=new QTextEdit("Left Widget",splitterMain);
textLeft->setAlignment(Qt::AlignCenter);
QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);
splitterRight->setOpaqueResize(false);
//在子splitter上添加两个QTextEdit
QTextEdit*textTop=new QTextEdit("Right Top Widget",splitterRight);
textTop->setAlignment(Qt::AlignCenter);
QTextEdit *textBottom=new QTextEdit("Right BottomWidget",splitterRight);
textBottom->setAlignment(Qt::AlignCenter);
//设置主splitter属性
splitterMain->setStretchFactor(0,1);
splitterMain->setWindowTitle("Splitter");
splitterMain->show();
return a.exec();
}