本篇介绍Qt菜单栏相关操作,分为三部分:1.菜单栏相关的类介绍;2.系统菜单的生成和响应;3.弹出菜单的生成和响应;菜单栏通常只有以QMainWindow为基类的程序中才用到,以QWidget为基类的程序通常没有菜单栏。

1. 菜单相关类

  QMenuBar --菜单栏类,即下图中红色区域标记,菜单栏类给窗口提供水平菜单栏,此菜单栏占用窗口上方区域,垂直高度不变,水平宽度为窗口宽度,可随窗口大小变化而变化。如下图中“测试”,“test1”,"test2"所在的栏几位QMenuBar

  QMenu --菜单项,即下图中绿色区域,下图中“测试”,"test1","test2"都是一个独立的菜单,包含各个子菜单。QMenu还可以用来创建弹出菜单

  QAction --子菜单,即下图中蓝色区域标记的内容,一个子菜单对应一个操作。

2.系统菜单的生成和响应

2.1.使用代码添加系统菜单

示例源码:

.h文件

 1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QMenuBar>
6
7 QT_BEGIN_NAMESPACE
8 namespace Ui { class MainWindow; }
9 QT_END_NAMESPACE
10
11 class MainWindow : public QMainWindow
12 {
13 Q_OBJECT
14
15 public:
16 MainWindow(QWidget *parent = nullptr);
17 ~MainWindow();
18
19 //菜单栏
20 QMenuBar *pMenuBar;
21 //菜单项
22 QMenu *pMenuTest;
23 QMenu *pMenuTest1;
24 QMenu *pMenuTest2;
25 //子菜单
26 QAction *pActionTest;
27 QAction *pActionTest1;
28 QAction *pActionTest2;
29 QAction *pActionTest3;
30 QAction *pActionTest4;
31 QAction *pActionTest5;
32 QAction *pActionTest6;
33
34 public slots:
35 //菜单响应函数
36 void OnActionTest();
37 void OnActionTest1();
38
39 private:
40 Ui::MainWindow *ui;
41 };
42 #endif // MAINWINDOW_H

.cpp文件

 1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3 #include <QDialog>
4
5 //是否启用QMainWindow自带的菜单栏
6 //#define USE_DEFAULT_MENU_BAR
7
8 MainWindow::MainWindow(QWidget *parent)
9 : QMainWindow(parent)
10 , ui(new Ui::MainWindow)
11 {
12 ui->setupUi(this);
13
14 //指定菜单栏
15 #ifdef USE_DEFAULT_MENU_BAR
16 //添加菜单栏(此处添加为的为QMainWindow自带的菜单)
17 pMenuBar = this->menuBar();
18 #else
19 //添加自定义菜单
20 pMenuBar = new QMenuBar(this);
21 #endif
22
23 //定义菜单项
24 //(&n)代表快捷方式,当窗口获得焦点时按alt+n即可打开“测试”菜单项
25 pMenuTest = new QMenu("测试(&n)",this);
26 pMenuTest1 = new QMenu("test1",this);
27 pMenuTest2 = new QMenu("test2",this);
28
29 //定义子菜单
30 //(&s)为子菜单快捷键,当打开该菜单项后,按下‘s’键即可响应
31 pActionTest = new QAction("测试(&s)",this);
32 //新建一个带图标的菜单项,图标使用资源文件中的资源
33 pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),"测试1",this);
34 pActionTest2 = new QAction("测试2",this);
35 pActionTest3 = new QAction("测试3(&Y)",this);
36 pActionTest4 = new QAction("测试4",this);
37 pActionTest5 = new QAction("测试5(&M)",this);
38 pActionTest6 = new QAction("测试6",this);
39
40 //将菜单项添加到子菜单
41 pMenuTest->addAction(pActionTest);
42 pMenuTest->addAction(pActionTest1);
43 //在菜单项之间添加分割线
44 pMenuTest->addSeparator();
45 pMenuTest->addAction(pActionTest2);
46
47 pMenuTest1->addAction(pActionTest3);
48 pMenuTest1->addAction(pActionTest4);
49
50 pMenuTest2->addAction(pActionTest5);
51 pMenuTest2->addAction(pActionTest6);
52
53 //将子菜单添加到菜单栏
54 pMenuBar->addMenu(pMenuTest);
55 pMenuBar->addMenu(pMenuTest1);
56 pMenuBar->addMenu(pMenuTest2);
57
58 #ifndef USE_DEFAULT_MENU_BAR
59 //当不使用QMainWindow自带的菜单栏时,必须要加上此行
60 setMenuBar(pMenuBar);
61 #endif
62
63 //添加菜单响应函数
64 connect(pActionTest,&QAction::triggered,this,&MainWindow::OnActionTest);
65 connect(pActionTest1,&QAction::triggered,this,&MainWindow::OnActionTest);
66 }
67
68
69 //菜单响应函数
70 void MainWindow::OnActionTest()
71 {
72 QDialog dlg;
73 dlg.setWindowTitle("测试菜单响应");
74 dlg.exec();
75 }
76
77 void MainWindow::OnActionTest1()
78 {
79
80 QDialog dlg;
81 dlg.setWindowTitle("测试菜单响应");
82 dlg.exec();
83 }
84
85 MainWindow::~MainWindow()
86 {
87 delete ui;
88 }

  上面的代码中定义了两种创建系统菜单的方式:调用QMainWindow自带的菜单栏和自己新建菜单栏,由第6行定义的宏控制,显示效果相同。

  第25行为“测试”子菜单添加快捷键,当窗口获得焦点时按alt+n可展开“测试”子菜单。

  第31行为“测试”子菜单“测试”菜单项添加快捷键,当“测试”子菜单弹出后按‘s’键,程序即可做出响应。

  第33行为“测试”子菜单的“测试2”菜单项添加了图标。

  第44行为“测试”子菜单的“测试2”和“测试3”之间添加了分割线。

2.2.使用UI设计器设计系统菜单

  进入“设计”页面,进入如下图所示的界面,具体操作方法见如下两张图,注意:输入菜单名称后一定要按“Enter”键才能生效

1

Qt基础之菜单栏的更多相关文章

  1. 基于C/S架构的3D对战网络游戏C++框架 _04客户端详细设计与OpenGL、Qt基础

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  2. QT学习之菜单栏与工具栏

    QT学习之菜单栏与工具栏 目录 简单菜单栏 多级菜单栏 上下菜单栏 工具栏 简单菜单栏 程序示例 from PyQt5.QtWidgets import QApplication, QMainWind ...

  3. qt 工具栏和菜单栏

    在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序.虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜 ...

  4. QT基础:QMainWindow学习小结

    简述 普通的桌面应用程序有个共同的特性,有菜单栏.工具栏.状态栏.中央窗口等部件.菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口.那么这些典型的 ...

  5. C++ Qt基础知识

    时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 记录C++ Qt的基础知识学习记录 <C++ Qt设计模式(第二版)>

  6. qt基础知识之类库概述

    qt是用标准c++编写的跨平台开发类库,它对标准c++进行拓展,引入元对象系统.信号&槽.属性等特征 全局定义 容器类及对应迭代器 qt的模块化体系,分为 基本模块和拓展模块,一个模块通常就是 ...

  7. 【Qt开发】菜单栏,工具栏和状态栏

    概述 菜单栏,工具栏,状态栏应用中经常见到,下图解释一目了然,实际开发中 两种方式来实现,一种是使用纯代码QMenuBar,QToolBar,QStatusBar来设计开发,另一种使用Qt Desig ...

  8. C/C++ Qt 基础通用组件应用

    QT 是一个跨平台C++图形界面开发库,利用QT可以快速开发跨平台窗体应用程序,在QT中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率. 目前,QT开发中常用的基础 ...

  9. [Qt基础内容-08] Qt中MVC的M(Model)

    Qt中MVC的M(Model)简单介绍 Qt有自己的MVC框架,分别是model(模型).view(视图).delegate(委托),这篇文章,简单的介绍以下Qt中有关model(模型)的类以及一些基 ...

随机推荐

  1. 从0到1进行Spark history分析

    一.总体思路 以上是我在平时工作中分析spark程序报错以及性能问题时的一般步骤.当然,首先说明一下,以上分析步骤是基于企业级大数据平台,该平台会抹平很多开发难度,比如会有调度日志(spark-sub ...

  2. 学习WebDav

    目录 前言 初识WebDav 有哪些支持webdav的网盘? WebDAV的特性和优势 服务端的搭建 调用WebDav接口 PROPFIND方法 PROPPATCH方法 MKCOL方法 PUT方法 G ...

  3. 唯品会Java开发手册》1.0.2版阅读

    <唯品会Java开发手册>1.0.2版阅读 1. 概述 <阿里巴巴Java开发手册>,是首个对外公布的企业级Java开发手册,对整个业界都有重要的意义. 我们结合唯品会的内部经 ...

  4. golang 进行grpc调用

    参考https://blog.csdn.net/qq_32744005/article/details/105606383 go get google.golang.org/grpc go get - ...

  5. 52.Qt-Charts动态显示多条折线电压值(实现示波器效果)

    Qt 5.7过后Qt添加了官方的Chart库,之前就用的比较习惯,这次把源码发出来,给入门的同学们参考参考. 效果如下所示: 1.chartsView.h如下所示: #ifndef VIEW_H #d ...

  6. Apache Jmeter 性能测试

    今天在写性能测试报告的时候需要使用到数据,打算用做一下性能测试,然后在百度后发现了一款Apache开源的Jmeter压测工具 Jmeter概述: Apache JMeter是一款纯java编写负载功能 ...

  7. linux centos 03

    linux用户权限相关 root用户  相当于qq群的群主 sudo命令  相当于qq群的管理员 普通用户  相当于qq群的 水军 超级用户root的UID是 0  组ID也是 0  普通用户的UID ...

  8. 【源码项目】C语言编程之火车票管理系统!(最强代码)

    大学计算机软件技术基础课程设计任务书 一.题目: 火车票信息管理系统: 二.目的与要求 : ● 目的培养学生综合利用C++语言进行程序设计的能力, ● 培养学生的编程能力.用计算机解决实际问题的能力, ...

  9. hdu6376 度度熊剪纸条-----01背包

    题目:度度熊有一张纸条和一把剪刀.   纸条上依次写着 N 个数字,数字只可能是 0 或者 1.     度度熊想在纸条上剪 K 刀(每一刀只能剪在数字和数字之间),这样就形成了 K+1 段.   他 ...

  10. centOS7 查看防火墙状态 开放端口

    一.防火墙的开启.关闭.禁用命令 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:systemctl disable fire ...