布局管理, 分割窗口, 停靠窗口, 堆栈窗口, 综合应用
本章简单介绍布局管理的使用方法。首先通过三个实例分别介绍分割窗口 QSplitter 类、停靠窗口 QDockWidget 类及堆栈窗口 QStackedWidget 类的使用,然后通过一个实例介绍布局管理器的使用方法,最后通过一个修改用户资料综合实例介绍以上内容的综合应用。
名3.1 分割窗口QSplitter 类
分割窗口 QSplitter 类在应用程序中经常用到,它可以灵活分割窗口的布局,经常用在类似文件资源管理器的窗口设计中。
一个十分简单的分割窗口功能,整个窗口由三个子窗口组成,各个子窗口之间的大小可随意拖曳改变。
简单分割窗口实例效果如图3.1所示。
本实例采用编写代码的方式实现,具体步骤如下。
(1) 新建 Qt Widgets Application(详见1.3.1节),项目名称为"Splitter",基类选择"QMainWindow",取消“创建界面“复选框的选中状态。
(2) 在上述工程的 "main.cpp" 文件中添加如下代码:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont font ("ZYSongl8030", 12);
a.setFont(font);
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();
return a.exec();
}
其中,
(a) QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0): 新建一个 QSplitter 类对象,作为主分割窗口,设定此分割窗口为水平分割窗口。
(b) QTextEdit *textLeft = new QTextEdit(QObject::tr("Left Widget"), splitterMain): 新建一个 QTextEdit 类对象,并将其插入主分割窗口中。
(c) textLeft->setAlignment(Qt::AlignCenter): 设定 QTextEdit 中文字的对齐方式。
(d) QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain): 新建一个 QSplitter 类对象,作为右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口。
(e) splitterRight->setOpaqueResize(false): 调用 setOpaqueResize(bool) 方法用于设定分割窗口的分割条在拖曳时是否为实时更新显示。
(f) splitterMain->setStretchFactor(1, 1): 调用 setStretchFactor() 方法用于设定可伸缩控件。