8.7 锚接窗口

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

图 8-26 停靠区域包括三个停靠窗口,放在垂直标签页中; 其中一个停靠窗口带有自定义的标题栏和窗体控件。

停靠窗口可显示垂直的标题栏,窗口之前还可共享区域 – 当发生区域共享时,停靠 窗口将容纳在标签页中。 还可给停靠窗体设置风格独特的标题栏和窗体控件(参见上面的 图 8-26 )

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

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

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

1.创建锚接窗体

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

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

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

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

常用的一般为 QListWidget 和 QTextEdit。

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

调用 QDockWidget 的 setWidget()方法。

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

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

// 停靠窗口
QDockWidget *dock = new QDockWidget(tr("DockWindow"), this ); dock->setFeatures( QDockWidget::DockWidgetMovable );
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); QTextEdit *te = new QTextEdit();
te->setText(tr("Dock Window!")); dock->setWidget( te );
addDockWidget( Qt::RightDockWidgetArea, dock );

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

主要是 setAllowedAreas()和 setFeatures()方法的使用。 其中,setAllowedAreas()方法设置停靠窗体可停靠的区域,原型如下:

void setAllowedAreas( Qt::DockWidgetAreas areas );

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

表 8-6 锚接窗体的可停靠区域

Qt::LeftDockWidgetArea 可在主窗口的左侧停靠
Qt::LeftDockWidgetArea 可在主窗口的右侧停靠
Qt::RightDockWidgetArea 可在主窗口的顶端停靠
Qt::BottomDockWidgetArea 可在主窗口的底部停靠
Qt::AllDockWidgetAreas 可在主窗口任意(以上 4 个)部位停靠
Qt::NoDockWidgetArea 只可停靠在插入处

以上各种情况可以叠加使用,采用或(|)的方式进行综合设定。 setFeatures()方法设置停靠窗体的特性,原型如下:

void setFeatures(DockWidgetFeatures features);

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

表 8-7 列举了所有的情况。

表 8-7 锚接窗体的特性

QDockWidget::DockWidgetClosable 停靠窗可关闭,右上角的关闭按钮
QDockWidget::DockWidgetMovable 停靠窗可移动
QDockWidget::DockWidgetFloatable 停靠窗可浮动
QDockWidget::DockWidgetFeatures 此参数表示拥有停靠窗的所有特性
QDockWidget::NoDockWidgetFeature 不可移动、不可关闭、不可浮动

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