🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 8.7 锚接窗口 锚接窗口又被称作是停靠窗口,是指用户可以在工具栏区域内或区域间随意移动的窗 口。用户可以对停靠窗口解锁,使该窗口浮在应用程序顶部,也可以使窗口最小化。 锚接窗 口是由 QDockWidget 类提供的。通过 QDockWidget 实例化并添加窗体,可以创建自定义 锚 接窗口。如果锚接窗口占据水平区域(例如,在主窗口的顶部) ,那么窗体将会横向排列; 如果占据垂直区域(例如,在主窗口的左侧),那么窗体将会纵向排列。 锚接区域可嵌套, 以允许锚接窗口堆叠为多行或多列。 ![](https://box.kancloud.cn/2016-01-22_56a1a1551aa66.png) 图 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 | 不可移动、不可关闭、不可浮动 | 此参数也可采用或(|)的方式对停靠窗进行特性的设定。