8.1 主窗口框架

Qt 的 QMainWindow 类提供了一个应用程序主窗口,包括一个菜单栏( menu bar)、多 个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)以及一个 中心部件(central widget),常见的一种界面布局如图 8-1 所示。

图 8-1 Qt 主窗口常见布局示意图

绝大多数现代 GUI 应用程序都会提供一些菜单、上下文菜单和工具栏。

Qt 通过引入“动作”(action)这一概念来简化有关菜单和工具栏的编程。一个动作 就是一个可以添加到任意数量的菜单和工具栏上的项。

1.菜单栏 菜单是一系列命令的列表。菜单可以让用户浏览应用程序并且处理一些事务,上下文菜单和工具栏则提供了对那些经常使用的功能进行快速访问的方法,它们能够提高软件的使用效率。

为了实现菜单、工具栏按钮、键盘快捷方式等命令的一致性, Qt 使用动作(Action) 来表示这些命令。Qt 的菜单就是由一系列的 QAction 动作对象构成的列表。而菜单栏则是 包容菜单的容器,它通常位于主窗口的顶部,标题栏的下面。一个主窗口通常只有一个菜单 栏。

2.工具栏 工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令(动作)组成。工具栏的位置处在菜单栏下面、状态栏的上面,工具栏可以停靠在主窗口的上、下、左、右这 4 个不同的位置。一个主窗口可以有多个工具栏。

3.状态栏

状态栏通常是显示 GUI 应用程序的一些状态信息,它位于主窗口的最底部。可以在状 态栏上添加、使用 Qt 窗口部件。一个主窗口只有一个状态栏。

4.锚接部件

对于一个标准的 Qt 主窗口而言,锚接部件不是必需的。锚接部件一般是作为一个容器 来使用,以包容其他窗口部件来实现某些功能。 比如 Qt 设计器的属性编辑器、对象监视器 等都是由锚接部件包容其他的 Qt 窗口部件来实现的。它处在工具栏的内部,可以作为一个 窗口自由的浮动在主窗口的上面,也可以像工具栏一样停靠在主窗口的左、右、上、下四个 方向上。一个主窗口可以包含多个锚接部件。

5.中心窗口部件 中心窗口部件处在锚接部件的内部,它位于主窗口的中心,一个主窗口只有一个中心窗口部件。主窗口 QMainWindow 具有自己的布局管理器,因此在 QMainWindow 窗口上设置布局管理器或者创建一个父窗口部件为 QMainWindow 的布局管理器都是不允许的。但可以 在主窗口的中心窗口部件上设置布局管理器。

6.上下文菜单

为了控制主窗口工具栏和锚接部件的显隐,在默认情况下, QMainWindow 主窗口提供了 一个上下文菜单(Context Menu)。通常,通过在工具栏或锚接部件上单击鼠标右键就可以激活该上下文菜单;也可以通过函数 CMainWindow::createPopupMenu()来激活该菜单。此 外,还可以重写 CMainWindow::createPopupMenu()函数,实现自定义的上下文菜单。