在 Qt 中,你可以使用 QMenu
创建二级菜单(子菜单)。以下是一个简单的示例,展示如何创建包含二级菜单的主菜单。
示例代码
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QMessageBox>
class MainWindow : public QMainWindow {
public:
MainWindow() {
// 创建菜单栏
QMenuBar *menuBar = this->menuBar();
// 创建“文件”菜单
QMenu *fileMenu = menuBar->addMenu("文件");
// 添加一级操作
QAction *newAction = fileMenu->addAction("新建");
QAction *openAction = fileMenu->addAction("打开");
// 创建“编辑”菜单
QMenu *editMenu = menuBar->addMenu("编辑");
// 添加一级操作
QAction *copyAction = editMenu->addAction("复制");
// 创建“粘贴”子菜单并添加到“编辑”菜单中
QMenu *pasteSubmenu = new QMenu("粘贴选项", this);
QAction *pastePlainTextAction = pasteSubmenu->addAction("粘贴为纯文本");
QAction *pasteRichTextAction = pasteSubmenu->addAction("粘贴为富文本");
editMenu->addMenu(pasteSubmenu); // 将子菜单添加到“编辑”菜单
// 连接信号和槽以响应动作点击
connect(newAction, &QAction::triggered, this, []() {
QMessageBox::information(nullptr, "信息", "新建文件被选择!");
});
connect(openAction, &QAction::triggered, this, []() {
QMessageBox::information(nullptr, "信息", "打开文件被选择!");
});
connect(copyAction, &QAction::triggered, this, []() {
QMessageBox::information(nullptr, "信息", "复制被选择!");
});
connect(pastePlainTextAction, &QAction::triggered, this, []() {
QMessageBox::information(nullptr, "信息", "粘贴为纯文本被选择!");
});
connect(pasteRichTextAction, &QAction::triggered, this, []() {
QMessageBox::information(nullptr, "信息", "粘贴为富文本被选择!");
});
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.resize(400, 300);
window.setWindowTitle("带有二级菜单的示例");
window.show();
return app.exec();
}
代码解释
- 创建主窗口: 使用
QMainWindow
来创建一个主窗口。 - 添加菜单栏: 使用
this->menuBar()
获取窗口的菜单栏。 - 创建第一级菜单:
"文件"
和"编辑"
是两个顶级菜单。- 每个顶级菜单使用
addMenu()
方法进行添加。
- 添加操作:
- 使用
addAction()
向每个顶级菜单添加单独的操作,如"新建"
、"打开"
和"复制"
。
- 使用
- 创建二级子菜单:
- 在
"编辑"
菜单中,首先创建一个新的QMenu
实例作为子菜,并使用editMenu->addMenu(pasteSubmenu)
将其添加到父菜中。然后向此子菜中添加了两个选项:"粘贴为纯文本"
和"粘贴为富文本"
。
- 在
- 信号与槽连接:
- 为各个动作连接相应的槽,以便在用户点击这些动作时显示对应的信息框。
运行上述代码后,你将看到一个带有二级(子)菜单位于“编辑”中的示例应用程序。
内容由零声教学AI助手提供,问题来源于学员提问