在QT dialog界面中想实现菜单栏
一. 基础:
QMenuBar:就是所有窗口的菜单栏,在此基础上添加不同的QMenu和QAction
QMenu:菜单栏里面菜单,可以显示文本和图标,但是并不负责执行操作,有点类似label的作用
QAction: Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。
继承关系:
QMenuBar、QMenu:QWidget
QAction:QObject
二:实现方法 在dialog界面中实现菜单栏需要代码去实现。
新建一个dialog UI 界面。
在.CPP中添加如下代码
#include "dialog.h"
#include "ui_dialog.h"
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QDebug>
#include <QDebug>
#include <QAction>
#include <QPushButton>
#include <QCursor>
#include <QKeySequence>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
dialog_menu[0] = new QMenu("文件");
dialog_menu[0]->addAction("编辑");
dialog_menu[0]->addAction("查看");
dialog_menu[0]->addAction("工具");
dialog_act[0] = new QAction("新建",this);
dialog_act[0]->setShortcut(Qt::CTRL | Qt::Key_A );
dialog_act[0]->setStatusTip("这是一个新建菜单");
dialog_act[1] = new QAction("打开",this);
dialog_act[1]->setCheckable(true);
dialog_menu[1] = new QMenu("保存");
dialog_menu[1]->addAction(dialog_act[0]);
dialog_menu[1]->addAction(dialog_act[1]);
dialog_menu[2] = new QMenu("打印");
dialog_menu[2]->addAction("打印设置");
dialog_menu[2]->addMenu(dialog_menu[1]);
dialog_menuBar = new QMenuBar(this);
dialog_menuBar->addMenu(dialog_menu[0]);
dialog_menuBar->addMenu(dialog_menu[2]);
dialog_menuBar->setGeometry(0,0,this->width(),30);
qDebug()<<"新建菜单被按下";
connect(dialog_act[1] ,SIGNAL(triggered()),this,SLOT(slotOpen()));
// connect(dialog_act[0], &QAction::triggered,this,SLOT(trigerMenu(QAction*)));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::trigerMenu(QAction* act)
{ qDebug()<<"新建菜单被按下";
if(act->text() == "新建")
{
qDebug()<<"新建菜单被按下";
}
}
void Dialog::slotOpen()
{
qDebug() << "Open file is:" ;
ui->label->setText("打开按键被按下");
}
.H文件中添加如下代码
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
QMenu* dialog_menu[10];
QAction* dialog_act[10];
QMenuBar* dialog_menuBar ;
QStatusBar* dialog_status ;
private:
Ui::Dialog *ui;
public slots:
void trigerMenu(QAction* act);
void slotOpen();
};
#endif // DIALOG_H
运行 效果如下