目录

Qt-窗口以及菜单栏介绍

Qt 窗口以及菜单栏介绍

一、Qt 窗口

https://i-blog.csdnimg.cn/direct/477e4cd5932144f0adc51a412479a637.png Qt 中的窗口类 QMainWindow 是继承于 QWidget 类,提供菜单栏,工具栏,子窗口,中央控件和状态栏的布局。 https://i-blog.csdnimg.cn/direct/278e64be66bc43a7ad962b4715623bff.png 这就是创建的窗口 ui 界面,自动创建了菜单栏和状态栏(之后会有问题)

二、菜单栏 QMenuBar

1、结构

https://i-blog.csdnimg.cn/direct/5a499c30d39843b084b9da8cd9dc4802.png 菜单栏一个窗口只有一个。 菜单项 QAction -> 菜单 QMenu -> 菜单栏 QMenuBar https://i-blog.csdnimg.cn/direct/6438bfe068f346b7af63535c8aadafb7.png

2、菜单栏相关 api

(1)代码

https://i-blog.csdnimg.cn/direct/c6bca3542e9a4fb4bbcf2ab5650f7e84.png

(2)api

窗口设置菜单栏:this->setMenuBar(QMenuBar&); 菜单栏添加菜单:QMenuBar::addMenu(QMenu&); 菜单添加菜单项:QMenu::addAction(QAction&); 菜单添加子菜单:QMenu::addMenu(QMenu&); 菜单项之间添加分割线:QMenu::addSeparator(); 菜单项设置图片:QAction::setIcon(QIcon&);

(3)子菜单

https://i-blog.csdnimg.cn/direct/0360b025f94d4dc2aeb7b0b4765d7faf.png https://i-blog.csdnimg.cn/direct/526d741661ea4d8fa4032d1f073a5026.png https://i-blog.csdnimg.cn/direct/b0b35c3cfed64264a9bdc75591d95ab9.png

(4)菜单和菜单项设置快捷键

就是在创建的时候文本带上 &字符 就能自动识别快捷键:alt + 字符 https://i-blog.csdnimg.cn/direct/5c8b419bd24e422ba1aec99940c189fd.png

(5)菜单项之间分割线

https://i-blog.csdnimg.cn/direct/697a5de9e280464d9254afa3c3201c11.png

(6)菜单项添加图片

https://i-blog.csdnimg.cn/direct/52090cc472bc4801b177dbc34a81ffe0.png

3、菜单栏内存泄漏问题

之前我们提到如果勾选了自动创建 ui 界面那么一开始就会创建好菜单栏和状态栏。 但是一直像上面代码一样直接再创建一个菜单栏,并设置进窗口,那就会把旧的菜单栏从对象树中挤下去,导致在释放的时候只是放了一个菜单栏,此时就有内存泄漏问题。 解决:QMenuBar* menuBar = this->QMenuBar(); https://i-blog.csdnimg.cn/direct/860da95531304ec08c049b0bb1ad2dbc.png 这样如果原先没有菜单栏就直接创建,如果有直接获取 this 的,不会出现两个菜单栏。