一、Qsplitter类函数(主分割窗口)
1.设定主分割窗口且为水平主分割窗口

QSplitter *splittermain =new QSplitter(Qt::Horizontal,0);
//Qt::Horizontal设定为水平分割窗口

2…建立一个QTextEdit类对象,将其插入主分割窗口

QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splittermain);//第一个控件表示为插入的文字,第二个为插入的对象

3.设置TextEdit中的文字的对齐方式

textLeft->setAlignment(Qt::AlignCenter);
Qt::AlignLeft:左对齐
Qt::AlignRight 右对齐
Qt::AlignCenter 文字居中(Qt::AlignHCenter 水平居中,Qt::AlignVCenter 垂直居中)
Qt::AlignUp 与顶部对齐
Qt::AlignBotton 文字与底部对齐

4.在主分割窗口插入其他窗口作为有窗口

QSplitter *splitterRight=new QSplitter(Qt::Vertical,splittermain);//第一个为垂直分割窗口,第二个插入的主窗口对象

5.和3一样在有窗口插入字体
6.设置是否为可伸缩空间

splittermain->setStretchFactor(1,1);//第一个为控件的序号(根据控件插入的顺序编号),第二个为大于零则可伸缩

7.设定分割窗口的分割条是否实时更新

splitter->setQpaqueResize(false);//false为灰色线条,true为动态线条

二、QDockWidget类
1.设置主窗口的文字

setWindowTitle(tr("DockWindows"));

2.设置主窗口

QTextEdit *text=new QTextEdit(this);
       text->setAlignment(Qt::AlignCenter);//设置文字对齐方式
       text->setText("主窗口");
       setCentralWidget(text);//将其作为主窗口的中央窗体

3.设置停靠窗口

QDockWidget *dock=new QDockWidget("我的dock窗口",this);
       dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);//可关闭或可浮动
       QTextEdit *te1=new QTextEdit();
       te1->setText("该dock窗口可关闭或可浮动");//在停靠窗口中插入文字
       dock->setWidget(te1);
       addDockWidget(Qt::RightDockWidgetArea,dock);//添加停靠窗口

注意点(一):
QDockWidget::DockWidgetClosable 0x01 窗口可关闭
QDockWidget::DockWidgetMovable 0x02 窗口可移动
QDockWidget::DockWidgetFloatable 0x04 停靠窗口可以与主窗口分离,作为独立窗口浮动
QDockWidget::DockWidgetVerticalTitleBar 0x08 停靠窗口在左侧显示垂直标题栏。 用于增加QMainWindow中的垂直空间。
QDockWidget::AllDockWidgetFeatures DockWidgetClosable /DockWidgetMovable / DockWidgetFloatable (不建议使用)可以关闭,移动和浮动停靠窗口
QDockWidget::NoDockWidgetFeatures 0x00 停靠窗口不可关闭、移动、浮动
注意点(二):
Qt::LeftDockWidgetArea 左侧
Qt::RightDockWidgetArea 右侧
Qt::TopDockWidgetArea 顶部
Qt::BottomDockWidgetArea 底部
Qt::AllDockWidgetAreas 任意位置
Qt::NoDockWidgetArea 只能停靠在插入处
三、QStackedWidget类
1.建立一个QListWidget类对象,作为list选项框

list =new QListWidget(this);//新建一个QListWidget控件对象
    //插入三个条目,作为选择项
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));

2.建立一个栈窗体对象,用来和list对接

label1=new QLabel(tr("WindowTest1"));
    label2=new QLabel(tr("WindowTest2"));
    label3=new QLabel(tr("WindowTest3"));
    stack =new QStackedWidget(this);//新建一个堆栈窗体对象

    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);

3.将list和stack对应连接

connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));

4.布局函数在第四个里面详细讲述
5.设置比例

mainlayout->setStretchFactor(list,1);
   mainlayout->setStretchFactor(stack,3);//这里表示list和stack两者之间的比例,以上的例子是1:3

四、基本布局
1.常用到的布局类有:QHBoxLayout、QVBoxLayout、QGridLayout三种,分别是水平排列布局、垂直排列布局、表格排列布局。
常用的方法有addWidget()和addLayout()。addWidget()用于在布局中插入控件,addLayout()用于在布局中插入子布局。
两者配套使用。

QHBoxLayout *mainlayout;
    mainlayout=new  QHBoxLayout(this);//垂直布局
   mainlayout->addWidget(list);
   mainlayout->addWidget(stack,Qt::AlignHCenter);
   //先list,后stack
//先定义,表格布局
    LeftLayout=new QGridLayout();
    //想布局中加入需要的控件
    LeftLayout->addWidget(UserNameLabel,0,0);
    LeftLayout->addWidget(UserNameLineEdit,0,1);
    LeftLayout->addWidget(NameLabel,1,0);
    LeftLayout->addWidget(NameLineEdit,1,1);
    LeftLayout->addWidget(SexLabel,2,0);
    LeftLayout->addWidget(SexComboBox,2,1);
    LeftLayout->addWidget(DepartmentLabel,3,0);
    LeftLayout->addWidget(DepartmentTextEdit,3,1);
    LeftLayout->addWidget(AgeLabel,4,0);
    LeftLayout->addWidget(AgeLineEdit,4,1);
    LeftLayout->addWidget(OtherLabel,5,0,1,2);
    LeftLayout->setColumnStretch(0,1);
    LeftLayout->setColumnStretch(1,3);
//水平布局
    OkBtn =new QPushButton(tr("确定"));
    CancelBtn =new QPushButton(tr("取消"));
    //
    ButtomLayout =new QHBoxLayout();
    ButtomLayout->addStretch();
    ButtomLayout->addWidget(OkBtn);
    ButtomLayout->addWidget(CancelBtn);

2.QLineEdit和QTextEdit的区别
前者开辟一行空格,后者开辟一片空格
3.设置控件距离

mainLayout->setMargin(15);//对话框距离
    mainLayout->setSpacing(10);//
    控件距离

4.保证两个按钮大小不变

OkBtn =new QPushButton(tr("确定"));
    CancelBtn =new QPushButton(tr("取消"));
    //
    ButtomLayout =new QHBoxLayout();
    ButtomLayout->addStretch();
    ButtomLayout->addWidget(OkBtn);
    ButtomLayout->addWidget(CancelBtn);

5.设置两列的比列

LeftLayout->setColumnStretch(0,1);
    LeftLayout->setColumnStretch(1,3);
    //设定两列分别占用空间的比例,本例设定为1:3,即使对话框大小改变了,两列之间的宽度比依然保存不变,设置的是第一个数字的比列,0和1列

6.最优化显示

mainLayout->setSizeConstraint(QLayout::SetFixedSize);
    //设置最优化显式,即使控件按其sizeHint()的大小显式,并且使用户无法改变对话框大小。

7.设定主布局窗口

QGridLayout *mainLayout =new QGridLayout(this);//有this就是主窗口