ylww

随笔仅作学习记录,请辩证参考!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

       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);
posted on 2023-02-04 16:05  理想主义者光芒万丈  阅读(136)  评论(0编辑  收藏  举报