Qmenu和Qaction

简介

如下是实现一个菜单栏及下拉菜单的制作:
在mainwindow.h中添加
class QAction;
class QMenu;
在pro中添加 QT += widgets
QMenu类作为菜单栏,QAction类作为点击菜单栏的下拉菜单使用 QMenu类对象的addaction(QAction类的对象)来添加

代码片段

 //mainwindow.h---------------------------------------------------------------------
ifndef MAINWINDOW_H
define MAINWINDOW_H
include 
//#include 
//包含QPlainTextEdit  QAction  QMenu  才能够使用这个类
class QPlainTextEdit;
class QAction;
class QMenu;
class MainWindow : public QMainWindow
{
 Q_OBJECT
public:
 explicit MainWindow();
 ~MainWindow();
private slots:
 void test();
private:
    void createActions();
 void createMenus();
 //文本框
 QPlainTextEdit *textEdit;
 //file菜单
 QMenu * fileMenu;
 //定义了file的下拉菜单为 new  open  save  saveAS  exit
 QAction *newAct;
 QAction *open;
 QAction *Save;
 QAction *saveAs;
 QAction *exit;
};


//mainwindow.cpp---------------------------------------------------------------------
MainWindow::MainWindow()
{
 //创建一个文本编辑器
 textEdit = new QPlainTextEdit;
 //设置文本编辑器为中心位置
 setCentralWidget(textEdit);
 //首先创建file下拉的菜单栏
 createActions();
 //再来创建菜单目录,把下拉菜单的内容addaction加入到menu中
 createMenus();
}
MainWindow::~MainWindow()
{
}
void MainWindow::test()
{
}
 //file下拉菜单 名字为 new  open  Save  saveAs exit new.png为图标 添加了快捷键  以及添加点击这个下拉菜单所条用的槽函数,这里使用test作为测试使用
void MainWindow::createActions()
{
"
 newAct = new QAction(QIcon(":/image/new.png"), tr("&New"), this);
 newAct->setShortcuts(QKeySequence::New);  //为action设置快捷键ctrl+N
 newAct->setStatusTip(tr("Create a new file")); //设置提示
 connect(newAct, SIGNAL(triggered()), this, SLOT(test())); //New点击事件调用test 
"
 open = new QAction(QIcon(":/image/open.png"), tr("&Open"), this);
 open->setShortcuts(QKeySequence::Open);
 open->setStatusTip(tr("open a new file"));
 connect(open, SIGNAL(triggered()), this, SLOT(test())); //点击Open事件调用test
 Save = new QAction(QIcon(":/image/save.png"), tr("&Save"), this);
 Save->setShortcuts(QKeySequence::Save);
 Save->setStatusTip(tr("Save a new file"));
 connect(Save, SIGNAL(triggered()), this, SLOT(test())); //点击Save事件调用test
 saveAs = new QAction( tr("&SaveAs"), this);
 saveAs->setShortcuts(QKeySequence::SaveAs);
 newAct->setStatusTip(tr("SaveAs a new file"));
 connect(saveAs, SIGNAL(triggered()), this, SLOT(test())); //saveAS点击事件调用test
  exit = new QAction( tr("&exit"), this);
 exit->setShortcuts(QKeySequence::Close);
 exit->setStatusTip(tr("exit a new file"));
 connect(exit, SIGNAL(triggered()), this, SLOT(close()));   //点击exit事件调用test

}
void MainWindow::createMenus()
{
 //创建一个name为file的菜单栏
 fileMenu = menuBar()->addMenu(tr("&File"));
 //在这个菜单栏添加action即下拉菜单
 fileMenu->addAction(newAct);
 fileMenu->addAction(open);
 fileMenu->addAction(Save);
 fileMenu->addAction(saveAs);
 //添加一个分割器
 fileMenu->addSeparator();
 //推出下拉菜单
 fileMenu->addAction(exit);
}

总结

QMenuBar:就是所有窗口的菜单栏,在此基础上添加不同的QMenu和QAction

QMenu:菜单栏里面菜单,可以显示文本和图标,但是并不负责执行操作,有点类似label的作用

QAction: Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。

用一个简单的图来表示三者关系:

Qmenu和Qaction_第1张图片

你可能感兴趣的:(Qt)