大连密封材料 发表于 2025-1-8 23:34:46

【Qt】主窗口

目次
Qt主窗口的构成
菜单栏
 创建菜单栏
 向菜单栏中添加菜单
向菜单中添加菜单项
工具栏
创建工具栏
工具栏的停靠位置
工具栏的浮动属性
工具栏的移动属性
状态栏
创建状态栏
向状态栏中添加的信息
浮动窗口
浮动窗口的停靠位置
向浮动窗口中添加控件
Qt主窗口的构成

Qt主窗口是通过QMainWindow类的实现的。QMainWindow是为用户提供主窗口程序的类,继承自QWidget,QMainWindow包括菜单栏(只能有一个)、工具栏(可以有多个)、浮动窗口(可以有多个)、一个状态栏(只能有一个)、中央部件。如下图所示:
https://i-blog.csdnimg.cn/direct/089d3c42a4544d88970d14264476382a.png
可以看到,菜单栏在窗口标题(赤色区域)的下方。工具栏(粉色区域)上下左右四个方向都可以有,浮动窗口(绿色区域)上下左右四个方向都可以有,中央部件(橙色区域)在中间区域,状态栏(赤色区域)在最下方。
菜单栏:QMenuBar
工具栏:QToolBar
浮动窗口:QDockWidget
中央控件:各种控件
状态栏:QStatusBar
菜单栏

Qt中的菜单栏是由QMenuBar这个类实现的。一个主窗口只能有一个菜单栏,位于主窗口的标题下方。
菜单栏中包含了菜单,菜单中包含了菜单项。
菜单栏:QMenuBar
菜单:QMenu
菜单项:QAction
Qt Creator中的界面为例:
https://i-blog.csdnimg.cn/direct/d4aa129e6c4946f3aa240c273538bc3e.png
 创建菜单栏

直接在堆上创建:
https://i-blog.csdnimg.cn/direct/46a726dae789416db1a3d6e0ac01444d.png
通过QMainWindow提供的QMenuBar* menuBar() const函数:

对于方法2的menuBar()函数:如果主窗口中已存在菜单栏,则该函数返回已存在的菜单栏;如果主窗口不存在菜单栏,创建一个菜单栏并返回创建的菜单栏。
留意:保举方法2来创建菜单栏,由于如果主窗口已存在菜单栏,则直接在堆上生成菜单栏,那么就会导致原有的菜单栏无法释放,导致内存泄露。
 向菜单栏中添加菜单

可以为菜单栏中的菜单设置快捷键、菜单之间的分隔符
https://i-blog.csdnimg.cn/direct/8da401258ad1424a92a0e855234da941.png
留意:菜单栏中的菜单如果设置了Icon则该菜单的文本会被Icon覆盖,工具栏也是如此。
向菜单中添加菜单项

向菜单中添加菜单项之间的分割符:
https://i-blog.csdnimg.cn/direct/c68b838aee784fc486cc4da3f64cc33c.png
留意:也可以在菜单中创建子菜单。
工具栏

工具栏是可以移动的,也可以悬停在主窗口的任何地方。
创建工具栏

https://i-blog.csdnimg.cn/direct/173d8e7db4574c9c98ace54d7c1d68e7.png
留意:菜单和工具栏中可以添加同一个菜单项。点击触发同一个菜单项/快捷项,对应的菜单项/快捷项会发出QAction::triggered信号。
https://i-blog.csdnimg.cn/direct/eefa36983f3f44ac87a52ff556c9c137.png
工具栏的停靠位置

1.在向主窗口中添加工具栏的时设置停靠位置(设置的这个停靠位置是指程序启动时,工具栏默认的停靠位置)
https://i-blog.csdnimg.cn/direct/54d606e2d0534dd4ade26c2c22542ee2.png
Qt::ToolBarArea是一个枚举范例,area有下面取值:
https://i-blog.csdnimg.cn/direct/9c208721fd614b3696e72f74dc228f1e.png

2.通过QToolBar提供的setAllowedAreas方法(该方法设置的停靠区域是工具栏只允许停靠的区域)
https://i-blog.csdnimg.cn/direct/e7d5fff4ed2f4f8b9b4e4fc00ef5061e.png
可以使用按位或|来设置多个允许工具栏停靠的位置。
工具栏的浮动属性

QToolBar中提供了setFloatable方法来设置工具栏是否可以浮动。
https://i-blog.csdnimg.cn/direct/d8bbd7a143bd4d3d8b8146a86f0ee02f.png
工具栏的移动属性

QToolBar中提供了setMovable方法,设置工具栏是否可被移动。
https://i-blog.csdnimg.cn/direct/8d5794a0c7114da39f8fb15a939ecbdb.png
状态栏

状态栏是应用程序中输出简要信息的区域,一个窗口中最多只能有一个状态栏。
状态栏中表现的信息范例有这几种:
及时信息:如当出息序状态。
永久信息:如程序版本号,机构名称。
进度信息:如进度条信息。
创建状态栏

和创建菜单栏有一样的情况就是直接在堆上创建可能会出现内存泄露,因此使用QMainWindow提供的创建状态栏的方法:
https://i-blog.csdnimg.cn/direct/57c365d829584db9bc4bc80706644b43.png
向状态栏中添加的信息

1.及时信息
https://i-blog.csdnimg.cn/direct/2c25194eef4c4aafb9bd3ab5efa0b6ce.png
参数timeout的单元是ms,使用该函数在在状态栏种表现的信息会经过一段时间后消失。
2.永久信息
https://i-blog.csdnimg.cn/direct/aef6b0a5aaa74079ad9e8f5093376bf1.png
参数stretch是拉伸系数。
addPermanentWidget方法是按从右往左的添加控件。
addWifget方法是从左往右添加控件。
向状态栏中添加一个标签和一个进度条:
https://i-blog.csdnimg.cn/direct/1c7643cd638c48ca957c98bcf9eeee81.png
浮动窗口

qt中浮动窗口也叫做铆接部件,通过QDockWidget类实现浮动功能。
浮动窗口的停靠位置

和设置工具栏的停靠位置思路一样。
1.在将浮动窗口添加到主窗口中设置该浮动窗口默认的位置
https://i-blog.csdnimg.cn/direct/033b1fa149ef490884fbece9ad57ecf1.png
https://i-blog.csdnimg.cn/direct/949c8d1195da4f599de6da2502b9fe11.png 
2.通过setAllowedAreas方法设置浮动窗口允许停靠的位置
和工具栏的使用一样。
向浮动窗口中添加控件

留意:向浮动窗口中添加控件必须要先创建一个QWidget,然后把要添加到浮动窗口中的控件添加到该QWidget中,在将该类设置到浮动窗口中。
向浮动窗口中添加一个程度布局管理控件,该布局控件中有一个按钮控件和一个标签控件。
https://i-blog.csdnimg.cn/direct/d018387e6d1445ada9d8a49a9407c1f3.png
留意:setWidget方法是向浮动窗口中添加QWidget,而addWidget方法是向布局管理控件中添加控件,set表示只能设置一个,add表示可以添加多个。





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Qt】主窗口