为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();
}
代码说明
创建菜单栏:使用
QMenuBar
创建菜单栏,并通过setMenuBar()
方法将其设置为主窗口的菜单栏。添加菜单:使用
menuBar->addMenu()
方法添加顶级菜单(如"文件"、“编辑”、“帮助”)。添加菜单项:使用
QAction
创建菜单项,并通过menu->addAction()
方法添加到对应菜单中。添加快捷键:使用
setShortcut()
方法为菜单项设置快捷键,可以使用标准快捷键如QKeySequence::New
。添加分隔线:使用
addSeparator()
方法在菜单项之间添加分隔线。连接信号槽:使用
connect()
将菜单项的triggered
信号连接到相应的槽函数。槽函数实现:实现菜单项触发时的响应功能。
编译运行
要编译此代码,需要在Qt项目中包含相应的模块,或者使用qmake/cmake进行构建。如果你使用qmake,确保.pro文件中包含:
QT += widgets
这个示例创建了一个完整的主窗口,包含文件、编辑和帮助菜单,以及一些基本的菜单项和功能。