0%

QMenuBar

摘要

  • QMenuBar 类 相关学习笔记

Qt QMenuBar类 详解

Qt QMenuBar 类详解

QMenuBarQt 中用于创建菜单栏(Menu Bar)的类,通常用于 QMainWindow 作为应用程序的全局菜单。它包含多个 QMenu,每个 QMenu 内可以包含多个 QAction 作为菜单项。


📌 1. 基本用法

✅ 创建菜单栏并添加菜单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>

class MainWindow : public QMainWindow {
public:
MainWindow() {
// 创建菜单栏
QMenuBar *menuBar = new QMenuBar(this);

// 创建"文件"菜单
QMenu *fileMenu = new QMenu("文件(&F)", this);
QAction *openAction = new QAction("打开(&O)", this);
QAction *exitAction = new QAction("退出(&Q)", this);

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

// 创建"编辑"菜单
QMenu *editMenu = new QMenu("编辑(&E)", this);
QAction *copyAction = new QAction("复制(&C)", this);
QAction *pasteAction = new QAction("粘贴(&V)", this);

editMenu->addAction(copyAction);
editMenu->addAction(pasteAction);

// 将菜单添加到菜单栏
menuBar->addMenu(fileMenu);
menuBar->addMenu(editMenu);

// 设置菜单栏到窗口
this->setMenuBar(menuBar);

// 连接信号槽
connect(exitAction, &QAction::triggered, this, &MainWindow::close);
}
};

int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}

📝 代码解析

  • QMenuBar 负责创建菜单栏。
  • QMenu 用于创建下拉菜单,如 **”文件”“编辑”**。
  • QAction 是菜单项,如 **”打开”“退出”**。
  • addSeparator() 添加分隔线。
  • setMenuBar(menuBar) 设置主窗口的菜单栏。

📌 2. QMenuBar 的主要 API

✅ 2.1 添加菜单

1
QMenu *fileMenu = menuBar->addMenu("文件(&F)");
  • &F 是快捷键 Alt+F 访问菜单。

✅ 2.2 添加菜单项

1
QAction *newAction = fileMenu->addAction("新建(&N)");
  • &N 是快捷键 Alt+N 访问 **”新建”**。

✅ 2.3 添加子菜单

1
2
3
QMenu *subMenu = fileMenu->addMenu("导出(&E)");
subMenu->addAction("导出 PDF");
subMenu->addAction("导出 PNG");
  • 这样 “导出” 变成了 子菜单

✅ 2.4 连接菜单项的槽函数

1
connect(newAction, &QAction::triggered, this, &MainWindow::newFile);
  • 当点击 “新建” 时,会触发 newFile() 函数。

✅ 2.5 删除菜单

1
menuBar->removeAction(fileMenu->menuAction());
  • removeAction() 可以删除菜单。

📌 3. 使用快捷键

✅ 3.1 通过 & 定义快捷键

1
QAction *saveAction = fileMenu->addAction("保存(&S)");
  • Alt + S 触发 **”保存”**。

✅ 3.2 通过 QAction::setShortcut() 设置快捷键

1
saveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
  • Ctrl + S 触发 **”保存”**。

📌 4. 在 QWidget 里使用 QMenuBar

如果你的窗口 **不是 QMainWindow**,可以手动添加 QMenuBar

1
2
3
4
5
QVBoxLayout *layout = new QVBoxLayout(this);
QMenuBar *menuBar = new QMenuBar(this);
QMenu *fileMenu = menuBar->addMenu("文件");
fileMenu->addAction("打开");
layout->setMenuBar(menuBar);
  • 适用于 QWidget 界面,而不是 QMainWindow

📌 5. Qt Designer 方式

  1. **在 Qt Designer 里打开 MainWindow.ui**。
  2. 拖动 QMenuBar 到窗口顶部
  3. 添加 QMenu(菜单)和 QAction(菜单项)
  4. 双击菜单项 → 设置 slot(槽函数)

📌 6. QMenuBar 相关信号

triggered(QAction*)

菜单项被点击时触发:

1
2
3
connect(menuBar, &QMenuBar::triggered, this, [](QAction *action) {
qDebug() << "你点击了:" << action->text();
});

hovered(QAction*)

鼠标悬停在菜单项上时触发:

1
2
3
connect(menuBar, &QMenuBar::hovered, this, [](QAction *action) {
qDebug() << "鼠标悬停:" << action->text();
});

📌 7. 显示 / 隐藏菜单

✅ 隐藏菜单栏

1
menuBar->hide();

✅ 显示菜单栏

1
menuBar->show();

📌 8. 右键菜单(QMenu

可以给 QMenuBarQWidget 添加右键菜单:

1
2
3
4
5
6
void MainWindow::contextMenuEvent(QContextMenuEvent *event) {
QMenu contextMenu(this);
contextMenu.addAction("复制");
contextMenu.addAction("粘贴");
contextMenu.exec(event->globalPos());
}
  • 右键时弹出菜单。

🔥 总结

QMenuBar 用于创建菜单栏。
QMenu 用于创建下拉菜单。
QAction 是菜单项,可连接槽函数。
setShortcut() 设定快捷键。
✅ 适用于 QMainWindow,但 QWidget 也可使用。

QMenuBar 是 Qt 应用程序中 菜单栏 的核心组件,掌握它可以让你的界面更加专业!🚀

感谢老板支持!敬礼(^^ゞ