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 | 不可移动、不可关闭、不可浮动 |
此参数也可采用或(|)的方式对停靠窗进行特性的设定。