- Qt窗口由以下几部分组成
- Window Tile:标题
- Menu Bar:菜单栏,点开后会出现很对选项
- Tool Bar Area:工具栏,类似于菜单栏,一点就生效;本质是菜单栏常用选项,位置可以改变
- Dock Widget Area:铆接部件,子窗口
- Central Widget:中央控件,窗口最核心部分
- Status Bar:状态栏

1. 菜单栏
- 使用 QMenuBar 表示菜单栏
- 一个主窗口只有一个菜单栏,位于主窗口顶部,主窗口标题栏下面
- 一个菜单栏有很多菜单,每个菜单有很多菜单项 QAction
- 菜单栏(QMenuBar)->菜单(QMenu)->菜单项(QAction)

- QtDesigner里面:
- 在这里输入:
- 上面的:创建新的菜单
- 下面的:创建菜单项
- 添加分隔符

- 在这里输入:
1.1 构建菜单
1.1.1 构建菜单结构

1.1.2 关联信号
- 菜单项被点击的时候会触发一个 triggered 信号
cpp
// 4. 给action添加信号槽
connect(action1,&QAction::triggered,this,&MainWindow::hanle);
connect(action5,&QAction::triggered,this,&MainWindow::close);
1.2 给菜单设置快捷键
- 通过给文本中添加 &F 这样的操作,就是添加了快捷键 alt+F
- &不显示
cpp
QMenu* menu1=new QMenu("文件(&F)"); // ()是装饰用的,快捷键是 &+按键
QMenu* menu2=new QMenu("编辑(&E)");
QMenu* menu3=new QMenu("视图(&V)");
QMenu* menu4=new QMenu("关于(&H)");

1.3 给菜单项设置快捷键
- 和上面一样的操作

1.4 添加子菜单
- 多个子菜单嵌套,通过 QMenu 的 addMenu 实现

1.5 添加分割线和图标
1.5.1 添加分割线

1.5.2 添加图标
- 添加图标
- 如果给 QMenu 是长在 QMenuBar 上的,此时文本就不显示,图标覆盖了文本
- QMenu 是子菜单,图标和文本是都能显示的

1.6 关于QMenuBar创建方法
- 推荐这样创建
cpp
QMenuBar* menubar=this->menuBar();
-
- 如果 QMenuBar 已经存在,直接获取并返回
-
- 如果 QMenuBar 不存在,就先创建一个新的再返回
2. 工具栏
- 工具栏是应用程序中集成各种功能实现快捷键的一个区域
- 使用 QToolBar 表示工具栏对象,可以有0到多个
- 工具栏往往可以手动移动位置
2.1 创建工具栏
- 如果设置了图片,图片会覆盖文字
- 文字会以 toolTip 的形式存在,鼠标停在上面会显示提示

2.2 同时在菜单和工具栏添加菜单项
- 一个 Qaction 既是 QMenu 的子元素,又是 QToolBar 的子元素,释放的时候,是否会重复释放?
- 只会释放一次,不会重复释放
cpp
// 创建菜单栏
QMenuBar* menuBar=this->menuBar();
this->setMenuBar(menuBar);
// 创建菜单
QMenu* menu=new QMenu("文件");
menuBar->addMenu(menu);
// 工具栏是需要手动创建出来的,自身不会自动创建
QToolBar* toolBar=new QToolBar;
this->addToolBar(toolBar);
// 创建两个菜单项
QAction* action1=new QAction("保存");
QAction* action2=new QAction("打开");
action1->setIcon(QIcon(":/1.png"));
action2->setIcon(QIcon(":/2.png"));
// 菜单项还可以放到菜单中
menu->addAction(action1);
menu->addAction(action2);
// 菜单项放到工具栏中
toolBar->addAction(action1);
toolBar->addAction(action2);
connect(action1,&QAction::triggered,this,&MainWindow::handle1);
connect(action2,&QAction::triggered,this,&MainWindow::handle2);
2.2 同时有两个工具栏
-
默认是挨着的

-
如果把工具栏拖出来放到窗口任意位置,称之为=="浮动"状态==

-
可以设置工具栏出现的初始位置(上下左右) ,允许停放到哪些边缘,是否可以浮动,是否可以移动
cpp
// 设置初始位置 停靠在左侧
this->addToolBar(Qt::LeftToolBarArea,toolBar2);
// 只允许停靠在左边和右边
toolBar2->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
// 设置不允许浮动
toolBar2->setFloatable(false);
// 设置不允许移动
toolBar2->setMovable(false);