【Qt】窗口预览(1)—— 菜单栏

📅 2026/7/4 9:23:43
【Qt】窗口预览(1)—— 菜单栏
窗口预览(1)1. QMainWindow2. QMenuBar——菜单栏2.1 创建菜单栏/将菜单栏添加到widget中2.2 addMenu——在菜单栏中添加菜单2.3 在菜单中添加选项2.4 添加快捷键2.5 支持嵌套添加菜单2.6 添加信号2.7 添加分割线和图标3. QToolBar——工具栏3.1 创建工具栏3.2 设置停靠位置3.3 设置是否可以浮动4. QStatusBar——状态栏4.1 在状栏中显示消息5. QDockWidget——浮动窗口5.1 浮动窗口的创建5.2 在浮动窗口添加控件1. QMainWindowQt窗口是通过QMainWindow类来实现的。QMainWindow是⼀个为用户提供主窗口程序的类,继承自QWidget类,并且提供了⼀个预定义的布局。QMainWindow包含⼀个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗(铆接部件,相当于创建一个子窗口)(dock widgets)、⼀个状态栏(status bar)和⼀个中心部件(central widget),它是许多应用程序的基础,如文本编辑器,图片编辑器等。如下图为 QMainwindow 中各组件所处的位置:我们之前创建文件的时候都是勾选的QWidget,但是这里我们要勾选QMainWindow此时我们打开创建好的文件的ui文件,我们会发现一些与以往不同的地方:在窗口的最上方出现了一个编辑框,这个编辑框就是设置菜单的地方,同时在左侧的窗口属性中再也不是空的了,而是自动创建好了一个menubar,statusbar和centeralwidget。2. QMenuBar——菜单栏我们在使用很多的工具的时候在最上方都会有一个菜单栏,大部分的操作都是可以通过菜单栏进行实现功能的,我们的Qt creator也是如此。并且一个主窗口最多只能有一个菜单栏。创建一个菜单栏的对象是QMenuBar,一个菜单栏中可以有很多的菜单(用QMenu创建一个个菜单),每个菜单可以有很多的选项(用QAction创建菜单选项)。2.1 创建菜单栏/将菜单栏添加到widget中方法一:我们可以直接通过ui界面的最上方直接进行设置,因为我们创建文件的时候,QMainWindow已经给我们创建好了menuBar.方法二:使用代码手动创建一个菜单栏,并将这个菜单栏设置到widget中,将菜单栏设置到widget,函数setMenuBar(QMenuBar*)注意:一般我们创建都是在堆上创建菜单栏,但是这里会出现一个问题,就是如果我们勾选了自动生成ui文件的话(一般我们都会进行勾选)当我们创建好了文件后,Qt会自动帮我们创建好一些代码,其中就包括了上面我们讲过了menubar,statusbar和centeralwidget这三个(这里我们就拿menubar来举例子,其他的也是一样的)如果我们直接使用QMenuBar * menu = new QMenuBar()的方式来创建菜单栏的话,就会导致内存泄漏,因为我们在创建好文件的时候Qt已经创建好了一菜单栏,而这里我们又手动的创建了一个菜单栏,就会把Qt帮我们创建的菜单栏给挤出对象树,所以当我们关闭窗口的时候对象树确实会帮我们delete掉我们手动创建的菜单栏,但是Qt帮我们创建的菜单栏就得不到delete就会造成内存泄漏,所以我们一般推提倡如下创建菜单栏:QMenuBar*menu=this-menuBar();// 如果QMenuBar存在,那么就直接获取,如果不在就创建虽然上述内存泄漏不会造成什么影响,因为当窗口关闭的时候说明进程已经结束了,那么所有的内存都会被回收,但是如果这样的代码出现在多窗口的程序里的时候(涉及到频繁的创建和销毁),那么上述的内存泄漏就会更严重一些。2.2 addMenu——在菜单栏中添加菜单通过QMenu创建菜单,使用addMenu将菜单添加到菜单栏中MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(new Ui::MainWindow){ui-setupUi(this);// 创建菜单栏QMenuBar*menu=this-menuBar();// 添加菜单栏this-setMenuBar(menu);// 创建菜单QMenu*menu1=newQMenu("文件");QMenu*menu2=newQMenu("工具");QMenu*menu3=newQMenu("帮助");// 将菜单添加到菜单栏中menu-addMenu(menu1);menu-addMenu(menu2);menu-addMenu(menu3);}2.3 在菜单中添加选项在Qt中可以通过QAction类创建出一个菜单选项,然后使用addAction函数添加到菜单中。// 创建选项QAction*opt1=newQAction("创建");QAction*opt2=newQAction("打开");QAction*opt3=newQAction("关闭");// 将选项添加到菜单中menu1-addAction(opt1);menu1-addAction(opt2);menu1-addAction(opt3);2.4 添加快捷键方法一:可以使用直接使用setShortcut函数来直接设置快捷键方法二:可以使用(+快捷键)(这样设置后直接使用alt + 快捷键即可使用快捷键)的方式直接进行设置快捷键MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(new Ui::MainWindow){ui-setupUi(this);// 创建菜单栏QMenuBar*menu=this-menuBar();// 添加菜单栏this-setMenuBar(menu);// 创建菜单QMenu*menu1=newQMenu("文件(F)");// 设置快捷键QMenu*menu2=newQMenu("工具(T)");QMenu*menu3=newQMenu("帮助(H)");// 将菜单添加到菜单栏中menu-addMenu(menu1);menu-addMenu(menu2);menu-addMenu(menu3);// 创建选项QAction*opt1=newQAction("创建");QAction*opt2=newQAction("打开");QAction*opt3=newQAction("关闭");// 将选项添加到菜单中menu1-