【Qt】添加菜单栏

发布于:2025-09-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

为Qt MainWindow添加菜单栏

下面是一个使用Qt创建带有菜单栏的主窗口的示例代码:

#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QMessageBox>

class MainWindow : public QMainWindow
{
public:
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)
    {
        // 创建菜单栏
        QMenuBar *menuBar = new QMenuBar(this);
        setMenuBar(menuBar);
        
        // 创建文件菜单
        QMenu *fileMenu = menuBar->addMenu(tr("文件(&F)"));
        
        // 添加新建动作
        QAction *newAction = new QAction(tr("新建(&N)"), this);
        newAction->setShortcut(QKeySequence::New);
        fileMenu->addAction(newAction);
        connect(newAction, &QAction::triggered, this, &MainWindow::onNew);
        
        // 添加打开动作
        QAction *openAction = new QAction(tr("打开(&O)"), this);
        openAction->setShortcut(QKeySequence::Open);
        fileMenu->addAction(openAction);
        connect(openAction, &QAction::triggered, this, &MainWindow::onOpen);
        
        // 添加分隔线
        fileMenu->addSeparator();
        
        // 添加退出动作
        QAction *exitAction = new QAction(tr("退出(&X)"), this);
        exitAction->setShortcut(QKeySequence::Quit);
        fileMenu->addAction(exitAction);
        connect(exitAction, &QAction::triggered, this, &MainWindow::close);
        
        // 创建编辑菜单
        QMenu *editMenu = menuBar->addMenu(tr("编辑(&E)"));
        
        // 添加撤销动作
        QAction *undoAction = new QAction(tr("撤销(&U)"), this);
        undoAction->setShortcut(QKeySequence::Undo);
        editMenu->addAction(undoAction);
        
        // 添加重做动作
        QAction *redoAction = new QAction(tr("重做(&R)"), this);
        redoAction->setShortcut(QKeySequence::Redo);
        editMenu->addAction(redoAction);
        
        // 创建帮助菜单
        QMenu *helpMenu = menuBar->addMenu(tr("帮助(&H)"));
        
        // 添加关于动作
        QAction *aboutAction = new QAction(tr("关于(&A)"), this);
        helpMenu->addAction(aboutAction);
        connect(aboutAction, &QAction::triggered, this, &MainWindow::onAbout);
        
        // 设置窗口属性
        setWindowTitle(tr("带菜单栏的主窗口"));
        resize(800, 600);
    }

private slots:
    void onNew()
    {
        QMessageBox::information(this, tr("新建"), tr("新建文件操作被触发"));
    }
    
    void onOpen()
    {
        QMessageBox::information(this, tr("打开"), tr("打开文件操作被触发"));
    }
    
    void onAbout()
    {
        QMessageBox::about(this, tr("关于"), tr("这是一个带菜单栏的Qt主窗口示例"));
    }
};

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

代码说明

  1. 创建菜单栏:使用QMenuBar创建菜单栏,并通过setMenuBar()方法将其设置为主窗口的菜单栏。

  2. 添加菜单:使用menuBar->addMenu()方法添加顶级菜单(如"文件"、“编辑”、“帮助”)。

  3. 添加菜单项:使用QAction创建菜单项,并通过menu->addAction()方法添加到对应菜单中。

  4. 添加快捷键:使用setShortcut()方法为菜单项设置快捷键,可以使用标准快捷键如QKeySequence::New

  5. 添加分隔线:使用addSeparator()方法在菜单项之间添加分隔线。

  6. 连接信号槽:使用connect()将菜单项的triggered信号连接到相应的槽函数。

  7. 槽函数实现:实现菜单项触发时的响应功能。

编译运行

要编译此代码,需要在Qt项目中包含相应的模块,或者使用qmake/cmake进行构建。如果你使用qmake,确保.pro文件中包含:

QT += widgets

这个示例创建了一个完整的主窗口,包含文件、编辑和帮助菜单,以及一些基本的菜单项和功能。