摘要
QMenuBar
是 Qt 中用于创建菜单栏(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.1 添加菜单
1
| QMenu *fileMenu = menuBar->addMenu("文件(&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());
|
📌 3. 使用快捷键
✅ 3.1 通过 &
定义快捷键
1
| QAction *saveAction = fileMenu->addAction("保存(&S)");
|
✅ 3.2 通过 QAction::setShortcut()
设置快捷键
1
| saveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
|
如果你的窗口 **不是 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 方式
- **在 Qt Designer 里打开
MainWindow.ui
**。
- 拖动
QMenuBar
到窗口顶部。
- 添加
QMenu
(菜单)和 QAction
(菜单项)。
- 双击菜单项 → 设置
slot
(槽函数)。
✅ 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. 显示 / 隐藏菜单
✅ 隐藏菜单栏
✅ 显示菜单栏
可以给 QMenuBar
或 QWidget
添加右键菜单:
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 应用程序中 菜单栏 的核心组件,掌握它可以让你的界面更加专业!🚀