关于使用QT实现菜单栏功能的Demo
具体实现效果如下
代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QAction>
#include <QFileDialog>
#include <QMenuBar>
#include <QMainWindow>
#include <QDebug>
#include <QStyle>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
CreateMenu();
}
Widget::~Widget()
{
delete ui;
}
void Widget::CreateMenu()
{
QStyle *style = QApplication::style();
QMenu *menu=new QMenu("菜单:常规1");
QAction *action1=new QAction(QIcon(style->standardIcon(QStyle::SP_ArrowForward)),"action1");
QAction *action2=new QAction(QIcon(style->standardIcon(QStyle::SP_ArrowForward)),"action2");
QList<QAction*> list;
list.append(action1);
list.append(action2);
menu->addActions(list);
QMenuBar *menuBar=new QMenuBar;
menuBar->addMenu(menu);
menuBar->addSeparator(); //分隔栏
connect(action1, &QAction ::triggered, this, [=] (){
qDebug() << "action1";
});
connect(action2, &QAction ::triggered, this, [=] (){
qDebug() << "action2";
});
QMenu *menu2=new QMenu("菜单:常规2");
QAction *action3=new QAction(QIcon(style->standardIcon(QStyle::SP_ArrowForward)),"action3");
QAction *action4=new QAction(QIcon(style->standardIcon(QStyle::SP_ArrowForward)),"action4");
QList<QAction*> list2;
list2.append(action3);
list2.append(action4);
menu2->addActions(list2);
QMenuBar *menuBar2=new QMenuBar;
menuBar->addMenu(menu2);
menuBar->addSeparator(); //分隔栏
connect(action3, &QAction ::triggered, this, [=] (){
qDebug() << "action3";
});
connect(action4, &QAction ::triggered, this, [=] (){
qDebug() << "action4";
});
ui->gridLayout->addWidget(menuBar);
}
每个action用了信号槽,都有debug输出,具体功能可以自己写。