第4章 布局管理
本章简单介绍布局管理的使用方法。首先通过3个小实例分别介绍分割窗口QSplitter类的使用、停靠窗口QDockWidget类的使用以及堆栈窗体QStackedWidget类的使用,然后通过一个实例介绍布局管理器的使用方法,最后通过一个修改用户资料综合实例介绍以上内容的综合使用方法。
4.1 分割窗口QSplitter类
分割窗口QSplitter类在应用程序中经常用到,它可以灵活分布窗口的布局,经常用在类似文件资源管理器的窗口设计中。下面介绍一个十分简单的分割窗口功能,整个对话框由3个窗口组成,各窗口之间的大小可随意拖动改变,效果如图4.1所示。见代码CH401。
图4.1 简单分割窗口实例
本实例采用编写代码的方式实现,具体实现步骤如下:
(1) 创建一个工程,创建过程在第2章中已经详细介绍过,在这里就不在赘述。需要注意的是,创建过程在“Qt4 Gui Application”界面中,Base Class选择“QMainwindow”选项,取消“Gernerate form”复选框的选中状态。
(2) 在上述工程的main.cpp文件中添加如下灰色背景代码:
int main(int argc, char *argv[]) { QApplication a(argc, argv); QFont font("ZYSong18030",12); a.setFont(font); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //主分割窗口 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); QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight); textUp->setAlignment(Qt::AlignCenter); QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"),splitterRight); textBottom->setAlignment(Qt::AlignCenter); splitterMain->setStretchFactor(1,1); splitterMain->setWindowTitle(QObject::tr("Splitter")); splitterMain->show(); // MainWindow w; // w.show(); return a.exec(); }
其中:
● QFont font("ZYSong18030",12)、a.setFont(font):指定显示字体。
● QTextCodec::setCodecForTr(QTextCodec::codecForLocale()):能够显示中文。
● QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0):新建一个QSplitter类对象,为主分割窗口,设定此分割窗口为水平分割窗口。
● QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain):新建一个QTextEdit类对象,并插入主分割窗口中。
● textLeft->setAlignment(Qt::AlignCenter):设定TextEdit中文字的对齐方式,常用的有以下几种:
Qt::AlignLeft:左对齐。
Qt::AlignRight:右对齐。
Qt::AlignCenter:文字居中(Qt::AlignHCenter为水平居中,Qt::AlignVCenter为垂直居中)。
Qt::AlignUp:文字与顶端对齐。
Qt::AlignBottom:文字与底部对齐。
● QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain):新建一个QSplitter类对象,为右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口。
● splitterRight->setOpaqueResize(false):调用的方法setOpaqueResize(bool) 用设定分割窗的分割条在拖动时是否为实时更新显示,若设为true则实时更新显示,若设为false则在拖动时只显示一条灰色的粗线条,在拖动到位并弹起鼠标后再显示分割条。默认设置为true。
● splitterMain->setStretchFactor(1,1):setStretchFactor()方法用于设定可伸缩控件,它的第1个参数指定设置的控件序号,控件序号按插入的先后次序从0起依次编号;第2个参数为大于0的值表示此控件为可伸缩控件。此实例中设定右部分分割窗为可伸缩控件,当整个对话框的宽度发生改变时,左部的文件编辑框宽度保持不变,右部的分割窗宽度随整个对话框大小的改变进行调整。
(3) 在main.cpp文件的开始部分加入以下头文件:
#include<Qsplitter> #include<QTextEdit> #include <QTextCodec>
(4) 运行程序,显示效果如图4.1所示。