QMainWindow是带有菜单栏、工具栏、状态栏的主窗口类,它有自己单独的布局。布局有一个中心区域,通常是标准的Qt部件,也可以是定制部件,且必须有一个中心小部件。setCentralWidget()方法可设置中心部件。
主窗口框架拥有自己的布局,包括以下组件:
①菜单栏 菜单栏包含了一个下拉菜单项的列表,这些菜单项通过QAction动作类实现。一个主窗口只能有一个菜单栏。
②工具栏 工具栏一般用于显示常用的菜单项,也可插入其他窗口部件,一个主窗口可以拥有多个工具栏。
③中心部件 主窗口中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域,一个主窗口只能有一个中心部件。
④dock 部件 Dock 部件又称停靠部件,或停靠窗口,可停靠在窗口部件的四周,用来设置一些部件来实现一些功能,类似一个工具箱,一个主窗口可拥有多个 Dock 部件。
⑤状态栏 状态栏用于显示程序的一些状态信息,在主窗口的最底下,一个主窗口只能拥有一个状态栏。
新建桌面应用程序 testQMenu,基类 QMainWindow,勾选创建界面文件,其他选项 默认
效果显示:
上面内容可以看出,工具栏中不仅仅可以放置QAction类的对象(动作按钮),还能放入其他类型的部件。那么在菜单栏的一个具体菜单中,
能否放入其他类型的部件呢?答案是可以的:
自定义菜单栏需继承自 QWidgetAction. 新建桌面应用程序 testQMenuCustom,基类 QMainWindow,勾选创建界面文件,其他选 项默认。 当前项目添加 C++类 MyAction,继承自 QWidgetAction,编辑 myaction.h 文件
myaction.cpp文件:
mainwindow.h文件:
mainwindow.cpp:(main文件不必更改)
注意上面用红色标出来的两个部分:圈出来的parent参数并不是myaction->parent();我们将下面红色部分注释打开,看一下信息提示:(myaction->parent()一直是QObject(0x0))
效果:
小优化:
MyAction *myaction = new MyAction();改为
MyAction *myaction = new MyAction(this);