目录
接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
Qt窗口简介:
Qt窗⼝是通过QMainWindow类来实现的。 QMainWindow是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃QWidget类,并且提供了⼀个预定义的 布局。QMainWindow包含⼀个菜单栏(menubar)、多个⼯具栏(toolbars)、多个浮动窗⼝(铆 接部件)(dockwidgets)、⼀个状态栏(statusbar)和⼀个中⼼部件(centralwidget)
菜单栏
Qt 中的菜单栏是通过QMenuBar这个类来实现的。⼀个主窗⼝最多只有⼀个菜单栏。位于主窗⼝顶 部、主窗⼝标题栏下⾯。
菜单栏中包含菜单.菜单中包含菜单项.
代码实例:在窗⼝上创建⼀个菜单栏,在菜单栏中添加⼀些菜单,在某⼀个菜单中添加⼀些菜单项。
注意:此时新建项⽬时选择的基类 QMainwindow
通过图形化界面的方式
通过代码的方式:
(1)给菜单设置快捷键
设置好的快捷键需要搭配alt来进行使用
(2) 给菜单项设置快捷键
(3) 添加子菜单
QMenuBar可以通过addMenu添加菜单的
QMenu也提供了addMenu,通过这个操作给某个菜单项添加子菜单
(4) 添加分割线
菜单里菜单项特别多时,就可以通过分割线进行分组
QMenu中提供了addSeparator这样的函数
(5) 添加图标
如果给QMenu设置图标,当前QMenu是长在QMenuBar上的,此时文本就不显示,图标覆盖了文本
(6) 关于QMenuBar创建方式的讨论
如果我们创建的项目,没有勾选自动生成ui文件时,此时上述代码是没有问题的
如果勾选了自动生成ui文件,上述代码就会引起内存泄露
在自动生成的ui文件中,Qt已经生成了一个QMenuBar了
这是当设置新的QMenuBar进来的时候,就会导致旧的QMenuBar脱离Qt的对象树了,意味着后续就无法对这个对象进行释放了
上述程序如果窗口关闭,对象树释放,此时进程就结束了,自然所有内存都回收给系统,上述内存泄露就不会造成影响
但是如果这样的代码 是出现在一个多窗口的程序中,如果涉及到窗口频繁跳转切换,就会导致内存泄露更严重一些
这是采用这样的写法,当QMenuBar已经存在,直接获取并返回;当QMenuBar不存在,就会创建一个新的再返回
如果是获取到已经存在的QMenuBar,这里的设置就是自己替换自己,即还是自己,仍然在对象树上
⼯具栏
⼯具栏是应⽤程序中集成各种功能实现快捷键使⽤的⼀个区域。可以有多个,也可以没有,工具栏可以手动移动位置
添加菜单栏,使用的是setMenuBar,菜单栏只能有一个,重复设置,新的替换旧的(set就包含"替换"的意思)
添加工具栏,使用的是addToolBar,工具栏可以有多个,重复设置,就会出现多个工具栏,不包含替换
(1)创建⼯具栏
这里一条条的就是工具栏,需要给工具栏添加菜单项QAction