Qt 4开发实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第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所示。