QMenuBar,QMenu,QAction
2025/6/12大约 1 分钟
QMenuBar,QMenu,QAction

一个QMenuBar可以有多个QMenu,一个QMenu可以有多个QAction,每个QAction可以对应多个类成员函数(图中只画出了对应一个函数的情况)

#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QMessageBox>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
// 创建菜单栏
QMenuBar *menuBar = new QMenuBar(this);
setMenuBar(menuBar);
// 创建“文件”菜单
QMenu *fileMenu = new QMenu("File", this);
menuBar->addMenu(fileMenu); // 将“File”菜单添加到菜单栏
// 创建“新建”动作并添加到“文件”菜单
QAction *newAction = new QAction("New", this);
fileMenu->addAction(newAction);
// 创建“打开”动作并添加到“文件”菜单
QAction *openAction = new QAction("Open", this);
fileMenu->addAction(openAction);
// 创建分隔符和“退出”动作
fileMenu->addSeparator(); // 添加分隔符
QAction *exitAction = new QAction("Exit", this);
fileMenu->addAction(exitAction);
// 创建“帮助”菜单和“关于”动作
QMenu *helpMenu = new QMenu("Help", this);
menuBar->addMenu(helpMenu); // 将“Help”菜单添加到菜单栏
QAction *aboutAction = new QAction("About", this);
helpMenu->addAction(aboutAction);
// 连接信号与槽
connect(exitAction, &QAction::triggered, this, &MainWindow::close);
connect(aboutAction, &QAction::triggered, this, []() {
QMessageBox::information(nullptr, "About", "This is a basic Qt app.");
});
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.setWindowTitle("QMenuBar, QMenu, QAction Example");
window.show();
return app.exec();
}
#include "main.moc"


// save_action 是某个菜单项对象名, 点击这个菜单项会弹出一个对话框
connect(ui->save_action, &QAction::triggered, this, [=]()
{
QMessageBox::information(this, "Triggered", "我是菜单项, 你不要调戏我...");
});
//发送者,信号,接收者,槽函数
