打开PC端软件有的会带有菜单栏, 如下:
记录下学习QT时 , 如何添加使用菜单栏, 在菜单栏下添加菜单项, 以及这些菜单项触发动作
过程: 在窗口添加菜单栏,然后在菜单栏添加一个 "文件" 菜单,在 "文件" 菜单下添加 "新建" 和 "打开" 选项, 点击新建 通过qDebug打印"按下新建" 点击 "打开" 打印 "按下打开"
(1). 添加空白菜单栏
(2). 在菜单栏中添加 "文件" 菜单
(3). 在 "文件" 菜单中添加 "新建" 和 "打开" 菜单选项
(4). 菜单选项触发后的动作(使用信号triggered和槽连接)
源码下载:https://download.csdn.net/download/dianzishi123/10897121
1.创建一个基于QMainWindow的且不添加UI的Qt工程
工程下这些文件只需要修改两个文件 mainwindow.cpp和工程管理目录.pro文件即可
mainwindow.cpp主要实现菜单的功能;
.pro文件主要是添加 "CONFIF += C++11" 使用Lambda表达式 实现信号和槽的匿名函数关联
Lambda表达式 匿名函数对象
C++11增加的新特性, 项目文件:CONFIG += C++11 Qt配合信号一起使用,非常方便
[] 的作用是把外部的参数传进来 ;
[=] : 把外部所有局部变量,类中所有成员以值传递方式
this: 类中所有成员以值传递方式
&: 把外部所有局部变量, 引用符号
2. mainwindow.cpp文件 , 在构造函数中初始化菜单界面
#include "mainwindow.h"
#include //菜单栏
#include //菜单
#include //动作
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 1. 添加菜单栏
QMenuBar *mBar = menuBar();//返回主窗口的菜单栏。如果菜单栏不存在,此函数将创建并返回一个空菜单栏。
// 2. 菜单栏上添加一个 "文件" 的菜单
QMenu *pFile = mBar->addMenu("文件");
// 3. 在文件的菜单上添加添加菜单项
QAction *pNew = pFile->addAction("新建");//添加 "新建" 菜单项动作
// 4. 新建菜单选项的触发动作信号和槽 使用Lambda表达式的匿名槽函数
connect(pNew,&QAction::triggered,// "新建" 按下后的动作打印信息
[=] ()
{
qDebug()<<"新建按下";
}
);
pFile->addSeparator();//添加分割线
//添加 "打开" 菜单项
QAction *pOpen = pFile->addAction("打开");
connect(pOpen,&QAction::triggered,
[=] ()
{
qDebug()<<"打开按下";
}
);
}
MainWindow::~MainWindow()
{
}
3. mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
#endif // MAINWINDOW_H
4. main.cpp文件
#include "mainwindow.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
5. 工程管理文件 ".pro" 文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test #生成的软件名称
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
CONFIG += C++11 #Lambda表达式
三.
1.菜单栏下有一个 "文件" 菜单, "文件" 菜单下有 "新建" 和 "打开" 两个选项
添加菜单栏动作 1: https://blog.csdn.net/dianzishi123/article/details/85854321