QMainWindow
QMainWindow是一个为用户提供主窗口程序 的类,包含一个菜单栏(menu bar)、多个工具栏 (tool bars)、多个锚接部件(dock widgets)、―个 状态栏(status bar )及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器、 图片编辑器等。
基本元素
1.菜单栏
菜单是一系列命令的列表。为了实现菜单、工具栏按钮、键盘快捷方式等命令 的一致性,Qt使用动作(Action)来表示这些命令。Qt的菜单就是由一系列的QAction 动作对象构成的列表,而菜单栏则是包容菜单的面板,它位于主窗口顶部、主窗口 标题栏的下面。一个主窗口最多只有一个菜单栏。
2.状态栏
状态栏通常显示GUI应用程序的一些状态信息,它位于主窗口的最底部。用户可以在状态栏上添加、使用Qt窗口部件。一个主窗口最多只有一个状态栏。
3.工具栏
工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使 用的命令(动作)组成。工具栏的位于在菜单栏的下面、状态栏的上面,可以停靠 在主窗口的上、下、左、右四个方向上。一个主窗口可以包含多个工具栏。
4.锚接部件
锚接部件作为一个容器使用,以包容其他窗口部件来实现某些功能。例如,Qt 设计器的属性编辑器、对象监视器等都是由锚接部件包容其他的Qt窗口部件来实 现的。它位于工具栏区的内部,可以作为一个窗口自由地浮动在主窗口上面,也可 以像工具栏一样停靠在主窗口的上、下、左、右四个方向上,一个主窗口可以包含 多个锚接部件。
5.中心部件
中心部件处在锚接部件区的内部、主窗口的中心,一个主窗口只有一个中心部件。 於注意 :主窗口 QMain Window具有自己的布局管理器,因此在QMainWindow 窗口上设置布局管理器或者创建一个父窗口部件作为QMainWindow的布局管理 器都是不允许的。但可以在主窗口的中心部件上设置管理器。
为了控制主窗口工具栏和锚接部件的显隐,在默认情况下,QMainWindow主 窗口提供了一个上下文菜单(Context Menu)。通常,通过在工具栏或锚接部件上 单击鼠标右键就可以激活该上下文菜单,也可以通过函数QMainWindow:: createPopupMenu()激活该菜单。此外,还可以重写 QMainWindow::createPopupMenu() 函数,实现自定义的上下文菜单。
菜单与工具栏的实现
菜单与工具栏都与QAction类密切相关,工具栏上的功能按钮与菜单中的选项 条目相对应,完成相同的功能,使用相同的快捷键与图标。QAction类为用户提供 了一个统一的命令接口,无论是从菜单触发还是从工具栏触发,或通过快捷键触发 都调用同样的操作接口,以达到同样的目的。
1.动作(Action)的实现
以下是实现基本文件操作的动作(Action)的代码:
void ImgProcessor::createActions() { // “打开”动作 openFileAction =new QAction(QIcon("open.png"),tr("打开"),this); openFileAction->setShortcut(tr("Ctrl+O")); openFileAction->setStatusTip (tr ( "打开一个文件")); }
2.菜单(Menus )的实现
在实现了各个动作之后,需要将它们通过菜单、工具栏或快捷键的方式体现出 来,以下是菜单的实现函数createMenus()代码:
void ImgProcessor::createMenus() { // 文件菜单 fileMenu =menuBar()一〉addMenu(tr("文件”)); fileMenu->addAction(openFileAction); }
3.工具栏(ToolBars )的实现
接下来实现相对应的工具栏createToolBars(),主窗口的工具栏上可以有多个工 具条,通常釆用一个菜单对应一个工具条的方式,也可根据需要进行工具条的划分。
void ImgProcessor::createToolBars() { //文件工具条 fileTool =addToolBar ( "File*1); fileTool->addAction(openFileAction); }
后续代码会在本次的最后的例子中展示。