Qt学习:布局管理的使用方法

来源:互联网 发布:柯洁 知乎 编辑:程序博客网 时间:2024/06/16 04:41
分割窗口QSplitter类在应用程序中常常可能用到,它可以灵活地设置窗口的布局。通过一个小实例体先会一下QSplitter的使用。
     -------创建工程时,Base Class选择“QMainWindow”

    //main.cpp    #include "splitter.h"    #include <QApplication>    #include <QSplitter>    #include <QTextCodec>    #include <QTextEdit>    int main(int argc, char *argv[])    {        QApplication a(argc, argv);        //指定显示字体        QFont font("helianthus_lu", 12);        a.setFont(font);        //codecForLocale()函数来返回现在系统的默认编码,显示中文        QTextCodec::setCodecForTr(QTextCodec::codecForLocale());        //主分割窗口        //新建一个QSplitter类对象, 作为主分割窗口,并设定此分割窗口为水平分割窗口        //QSplitter的第一个参数通过Qt::Horizontal 和 Qt::Vertical来设定为水平分割或垂直分割。        //第二个设定0代表是主窗口,无父窗口        QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0);        //新建一个QTextEdit类对象,并插入主分割窗口中        //主窗口是splitterMain,子splitter被添加到splitterMain中。添加时为从左至右(或从上至下)添加        QTextEdit *textLeft = new QTextEdit(QObject::tr("Left widget"), splitterMain);        //设定TextEdit中文字的对齐方式为居中显示        textLeft->setAlignment(Qt::AlignCenter);        //右部分割窗口        //新建一个QSliptter类对象,作为右分割窗口,设定此分割窗口为垂直分割窗口,并且以splitterMain为父窗口        QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain);        //设置拖动时是否实时更新:        //setOpaqueResize()用于设定分割窗的分隔条在拖动时是否为实时更新显示,若设置为true则为实时更新显示        //设置为false则是在拖动时只显示一条灰色的粗线条,在拖动到位并且弹起鼠标后再显示分割条。一般默认设置为true(实时更新)        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);        //setStretchFactor()用于设定可伸缩控件,它的第一个参数指定设置的控件序号,控件序号按插入的先后顺序        //从0起依次编号;第2个参数为大于0的数表示此控件为可伸缩控件此实例中设定右部分分割窗为可伸缩控件,当整个        //对话框的宽度发生变化时(当拉伸整个窗口时候),左部的文件编辑框宽度保持不变,右部的分割窗宽度随着整个对话框大小改变进行调整        splitterMain->setStretchFactor(1, 1);        splitterMain->setWindowTitle(QObject::tr("Splitter"));        splitterMain->show();    // Splitter w;    // w.show();        return a.exec();    }


最终效果:

          




锚接窗口

锚接窗口又被称作是停靠窗口,是指用户可以在工具栏区域内或区域间随意移动的窗口。用户可以对停靠窗口解锁,使该窗口浮在应用程序顶部,也可以使窗口最小化。锚接窗口是由QDockWidget类提供的。通过 QDockWidget实例化并添加窗体,可以创建自定义锚接窗口。如果锚接窗口占据水平区域(例如,在主窗口的顶部),那么窗体将会横向排列; 

如果占据垂直区域(例如,在主窗口的左侧),那么窗体将会纵向排列。锚接区域可嵌套,以允许锚接窗口堆叠为多行或多列。图8-26停靠区域包括三个停靠窗口,放在垂直标签页中; 其中一个停靠窗口带有自定义的标题栏和窗体控件。停靠窗口可显示垂直的标题栏,窗口之前还可共享区域 –当发生区域共享时,停靠 窗口将容纳在标签页中。 还可给停靠窗体设置风格独特的标题栏和窗体控件。

有些应用程序(包括 QtDesigner和QtLinguist)经常使用锚接窗口。
QMainWindow为操作者提供保存并恢复锚接窗口和工具栏的位置的功能,这样,应用程序可以轻松恢复用户首选工作环境。

8.7.1创建锚接窗口的方法和流程

    在主窗口程序中创建锚接窗口的一般流程如下:

    1.创建锚接窗体

    创建一个QDockWidget对象的锚接窗体。

    2.设置此锚接窗体的属性

    通常调用setFeatures()及setAllowedAreas()两种方法。

    3.新建一个要插入锚接窗体的窗口部件

    常用的一般为QListWidget和QTextEdit。

    4.把窗口部件插入锚接窗体

    调用QDockWidget的setWidget()方法。

    5.在MainWindow中加入此停靠窗体

    使用addDockWidget()方法。

    以下是一段示例代码,演示了上述方法和流程。

    //停靠窗口

    

QDockWidget*dock= newQDockWidget(tr("DockWindow"), this );     dock->setFeatures( QDockWidget::DockWidgetMovable );     dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);     QTextEdit*te= newQTextEdit();     te->setText(tr("Dock Window!"));     dock->setWidget( te);     addDockWidget( Qt::RightDockWidgetArea, dock); 



8.7.2设置锚接窗体状态的方法

    主要是setAllowedAreas()和setFeatures()方法的使用。

    其中,setAllowedAreas()方法设置停靠窗体可停靠的区域,原型如下:

    voidsetAllowedAreas( Qt::DockWidgetAreasareas);

    参数areas由Qt::DockWidgetAreas枚举变量指定了锚接窗体可停靠区域,包括表8-6

列举的几种。



Qt::LeftDockWidgetArea                    可在主窗口的左侧停靠

Qt::LeftDockWidgetArea                    可在主窗口的右侧停靠

Qt::RightDockWidgetArea                   可在主窗口的顶端停靠

Qt::BottomDockWidgetArea                  可在主窗口的底部停靠

Qt::AllDockWidgetAreas                    可在主窗口任意(以上4个)部位停靠

Qt::NoDockWidgetArea                      只可停靠在插入处

    以上各种情况可以叠加使用,采用或(|)的方式进行综合设定。

    setFeatures()方法设置停靠窗体的特性,原型如下:

    voidsetFeatures(DockWidgetFeaturesfeatures);

    参数features由QDockWidget::DockWidgetFeature枚举变量指定锚接窗体的特性,





QDockWidget::DockWidgetClosable         停靠窗可关闭,右上角的关闭按钮

QDockWidget::DockWidgetMovable          停靠窗可移动

QDockWidget::DockWidgetFloatable        停靠窗可浮动

QDockWidget::DockWidgetFeatures         此参数表示拥有停靠窗的所有特性

QDockWidget::NoDockWidgetFeature        不可移动、不可关闭、不可浮动

    此参数也可采用或(|)的方式对停靠窗进行特性的设定。 

0 0
原创粉丝点击