QComboBox是Qt中的一个下拉列表框控件,在该控件中每个选项都可以作为一个子菜单,因此可以实现二级菜单。
以下是一些实现二级菜单的步骤:
- 添加选项:使用addItem()函数添加每个主菜单选项。
- 添加子菜单:使用setModel()函数设置下拉列表框的QAbstractItemModel模型,并通过其来设置每个主菜单对应的子菜单。可以使用自定义的QStandardItemModel或在代码中创建QStandardItem对象来实现这一点。
- 选择响应:可以为选项设置信号槽,当用户选择某个主菜单时,会触发相应的信号,从而根据模型内容修改下拉列表框的选项。
以下是一个简单的示例代码:
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QComboBox comboBox;
comboBox.addItem("File");
comboBox.addItem("Edit");
comboBox.addItem("View");
QStandardItemModel model(3, 1);
QStringList fileMenu = { "New", "Open", "Save" };
QStringList editMenu = { "Cut", "Copy", "Paste" };
QStringList viewMenu = { "Zoom In", "Zoom Out", "Full Screen" };
// 设置子菜单
model.setItem(0, 0, new QStandardItem("File"));
for (int i = 0; i < fileMenu.size(); ++i)
model.setItem(i+1, 0, new QStandardItem(fileMenu.at(i)));
model.setItem(1+fileMenu.size(), 0, new QStandardItem("Edit"));
for (int i = 0; i < editMenu.size(); ++i)
model.setItem(i+2+fileMenu.size(), 0, new QStandardItem(editMenu.at(i)));
model.setItem(2+fileMenu.size()+editMenu.size(), 0, new QStandardItem("View"));
for (int i = 0; i < viewMenu.size(); ++i)
model.setItem(i+3+fileMenu.size()+editMenu.size(), 0, new QStandardItem(viewMenu.at(i)));
comboBox.setModel(&model);
// 响应选择事件
QObject::connect(&comboBox, SIGNAL(currentIndexChanged(int)), &app, SLOT(quit()));
comboBox.show();
return app.exec();
}
在上述代码中,我们首先定义了一个QComboBox对象,并添加了三个主菜单选项。然后,我们使用QStandardItemModel模型设置了每个主菜单对应的子菜单,最后将该模型应用于下拉列表框。在响应选择事件的槽函数中,我们简单地退出应用程序。
运行以上代码,当用户点击下拉按钮时,可以看到File、Edit和View三个主菜单以及它们各自的子菜单。