当前位置: 首页 > backend >正文

3.QMainWindow菜单栏menu bar和工具栏tool bars

目录

1.QMainWindow

2. 创建菜单栏,菜单栏只能有一个

 (1)创建菜单项

(2)创建分隔线

🍉 工具栏默认摆放在上方,怎么修改摆放位置呢?

🍇 设置只允许左右停靠

🍓  那怎么设置其不能浮动呢?

🍈工具栏中添加内容:

🍒 在工具栏中添加按钮

(3)源码: 


1.QMainWindow

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。

本篇还是以代码的形式创建界面,因此采用如下选项的设置:

出来的具体内容如下:

但是运行之后还是会有一个小的窗口出现:

2. 创建菜单栏,菜单栏只能有一个

通过QMainWindow类的menubar()函数获取主窗口菜单栏指针

QMenuBar *	menuBar() const

增加如下代码:

#include "mainwindow.h"
#include <QMenuBar>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{//重置窗口大小的设置resize(600,400);//菜单栏创建QMenuBar* bar=menuBar();//将菜单栏放入到窗口中,此时因为内部还没有菜单,所以不会显示出来setMenuBar(bar);//菜单栏中放入菜单bar->addMenu("file");}MainWindow::~MainWindow()
{
}

运行结果如下:

 (1)创建菜单项

//创建菜单项
fileMenu->addAction("new");

(2)创建分隔线

//添加分割线
fileMenu->addSeparator();

创建菜单栏的代码

    //重置窗口大小的设置resize(600,400);//菜单栏创建 菜单栏只能有一个QMenuBar* bar=menuBar();//将菜单栏放入到窗口中,此时因为内部还没有菜单,所以不会显示出来setMenuBar(bar);//菜单栏中放入菜单 返回值为QMenuQMenu* fileMenu= bar->addMenu("file");QMenu* editMenu= bar->addMenu("edit");//创建菜单项fileMenu->addAction("new");//添加分割线fileMenu->addSeparator();fileMenu->addAction("open");

2. 工具栏,可以有多个

//工具栏,可以有多个
QToolBar* toolBar=new QToolBar(this);
addToolBar(toolBar);

🍉 工具栏默认摆放在上方,怎么修改摆放位置呢?

可以看到它里面包含了位置摆放的参数,但是如何使用呢?进入assistant查找:

点进去之后可以看到其参数中的数据类型有这么多的枚举值,选择你想要的填写进去。在Qt中枚举值都是以"Qt::"的形式书写。

将工具栏添加到左侧,则将命令改为:

addToolBar(Qt::LeftToolBarArea,toolBar);

🍇 设置只允许左右停靠

//后期设置 只允许左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);

移动到上方时,可以看到其为一个浮动的状态

🍓  那怎么设置其不能浮动呢?

//设置浮动
toolBar->setFloatable(false);

设置移动 总开关

toolBar->setMovable(false);

🍈工具栏中添加内容:

//工具栏中可以设置内容
QAction* debug=fileMenu->addAction("debug");
QAction* run=fileMenu->addAction("run");
toolBar->addAction(debug);
toolBar->addAction(run);

🍒 在工具栏中添加按钮

在Qt中所有的控件都可以使用addwidget来添加

QPushButton* btn=new QPushButton("aa",this);
toolBar->addWidget(btn);

(3)源码: 

#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QPushButton>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{//重置窗口大小的设置resize(600,400);//菜单栏创建 菜单栏只能有一个QMenuBar* bar=menuBar();//将菜单栏放入到窗口中,此时因为内部还没有菜单,所以不会显示出来setMenuBar(bar);//菜单栏中放入菜单 返回值为QMenuQMenu* fileMenu= bar->addMenu("file");QMenu* editMenu= bar->addMenu("edit");//创建菜单项fileMenu->addAction("new");//添加分割线fileMenu->addSeparator();fileMenu->addAction("open");//工具栏,可以有多个,默认停靠在上侧QToolBar* toolBar=new QToolBar(this);//设置工具栏停靠在左侧addToolBar(Qt::LeftToolBarArea,toolBar);//后期设置 只允许左右停靠toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);//设置浮动toolBar->setFloatable(false);//设置移动 总开关toolBar->setMovable(false);//工具栏中可以设置内容QAction* debug=fileMenu->addAction("debug");QAction* run=fileMenu->addAction("run");toolBar->addAction(debug);toolBar->addSeparator();toolBar->addAction(run);//工具栏中添加按钮QPushButton* btn=new QPushButton("aa",this);toolBar->addWidget(btn);
}MainWindow::~MainWindow()
{
}

http://www.xdnf.cn/news/7271.html

相关文章:

  • 分布式事务
  • SID 2025上的天马,用“好屏”技术重构产业叙事
  • 【NLP】36. 从指令微调到人类偏好:构建更有用的大语言模型
  • [Spring Boot]整合Java Mail实现Outlook发送邮件
  • 《AI高效运维体系建设创新》技术连载(四)
  • 数据库连接问题排查全攻略:从服务状态到网络配置的深度解析
  • PCL点云库点云数据处理入门系列教材目录(2025年5月更新....)
  • HttpMessageConverter 的作用是什么? 它是如何实现请求体到对象、对象到响应体的自动转换的(特别是 JSON/XML)?
  • Qwen3 - 0.6B与Bert文本分类实验:深度见解与性能剖析
  • 遨游科普:三防平板是什么?应用在什么场景?
  • Perl数据库测试实战:从基础到高级的完整解决方案
  • 视觉-和-语言导航的综述:任务、方法和未来方向
  • Python编程从入门到实践 PDF 高清版
  • 【深度学习基础】损失函数与优化算法详解:从理论到实践
  • A3B和AWQ 是什么;Safetensors 是什么?
  • 解决 Linux Bash 脚本因换行符问题导致的 “bash^M: No such file or directory“ 错误
  • 在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!
  • ubuntu下配置vscode生成c_cpp_properties.json
  • 【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页
  • 展锐Android14及更新版本split_build编译方法
  • 百度OCR:证件识别
  • Python将Excel单元格某一范围生成—截图(进阶版—带样式+批量+多级表头)
  • 《黑马前端ajax+node.js+webpack+git教程》(笔记)——ajax教程(axios教程)
  • 确保高质量的音视频通话,如何最大化利用视频带宽
  • win10 上删除文件夹失败的一个原因:sqlYog 备份/导出关联了该文件夹
  • 【QT】一个界面中嵌入其它界面(二)
  • 星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态
  • 线程池模式与C#中用法
  • 解决服务器重装之后vscode Remote-SSH无法连接的问题
  • Vue百日学习计划Day33-35天详细计划-Gemini版