14. Qt 程序菜单实现,基于QMainWindow

目录

前言:

技能:

内容:

一、ui中直接添加控件实现

[二、 完全通过代码实现菜单](#二、 完全通过代码实现菜单)

参考:


前言:

基于QMainWindow,两种方式实现菜单:通过直接添加ui控件快速添加菜单和完全通过代码实现菜单,前者极为快速方便,后者更能练习技能

展示效果:

技能:

菜单栏的三个成分QMenuBar、QMenu、QAction使用

内容:

两种方式都是基于QMainWindow,所以创建工程的时候需要选择基类QMainWindow

在Qt中,菜单的各个部分名称如下图

上面照片来自参考链接,讲的很好,可以直接点参考链接去看哦

法一、ui中直接添加控件实现

如果是基于QMainWindow,直接点开ui文件,上面已经提供了QMenuBar

直接双击修改名称就可以

重要的是,一定要回车保存才行,根据上面介绍,这个叫QMenu

当前QMenu回车后会出来这个样子,或者单机一个QMenu也是

这里继续就可以添加QAction

但是在这里无法直接输入中文,上面的QMenu是可以的

解决方法是:先输入一个英文名称创造出来一个QAction,点下面的信号编辑器中双击"文本",这里编辑名称就可以正常输入中文

在这里编辑功能很多,比如图标和快捷方式,快捷方式设置是从键盘读取按键,可以组合。详细内容看参考链接

点击QAction旁边的小图标可以创建进一步的QAction,方法同理

创建完界面后要实现槽函数,在Qt creator中可以直接右键Action编辑器中的QAction,有熟悉的"转到槽",后面的内容就和之前一样了。如果是用的VS2022联机的Qt designer或者不想用直接转到槽,可以看我之前的文章->在VS2022中使用QT

法二、 完全通过代码实现菜单

首先在头文件中在Qt类中添加私有成员,这里是两个QMenu,两个QAction

cpp 复制代码
#include<QMenu>
#include<QMenuBar>
#include<QAction>
#include<QFileDialog>

private:
    QMenu *pMenuFile;
    QMenu *pMenuEdit;
    QAction *pActNew;
    QAction *pActOpen;

在QMainWindow的构造函数里面,创建、添加合并,也差不多看得懂。详情看参考链接讲得好

cpp 复制代码
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    pMenuFile= new QMenu("文件(&File)");//快捷键ALT+F   &后字母表示快捷键
    pMenuEdit= new QMenu("编辑(&Edit)");//快捷键ALT+E
    ui->menubar->addMenu( pMenuFile);
    ui->menubar->addMenu( pMenuEdit);

    pActNew=new QAction("新建");
    pActNew->setShortcut(Qt::CTRL|Qt::Key_N);

    pActOpen=new QAction("打开");
    pActOpen->setShortcut(Qt::CTRL|Qt::Key_O);

    pMenuFile->addAction(pActNew);
    pMenuFile->addAction(pActOpen);

    //下面是手动连接槽函数的
    //connect(pActOpen,SIGNAL(triggered(bool)),this,SLOT(OpenClicked()));
    //connect(pActNew,SIGNAL(triggered(bool)),this,SLOT(NewClicked()));

}

参考:

【Qt学习系列】14.Qt程序菜单

【Qt学习系列】14_Qt程序菜单(2)

【Qt学习系列】14.Qt程序菜单(3)这个是实现右键菜单的,欢迎大家学习

相关推荐
枫叶丹43 小时前
【Qt开发】多元素类控件(二)-> QTableWidget
开发语言·qt
bin91533 小时前
当AI开始‘映射‘用户数据:初级Python开发者的创意‘高阶函数‘如何避免被‘化简‘?—— 老码农的函数式幽默
开发语言·人工智能·python·工具·ai工具
怀揣小梦想3 小时前
跟着Carl学算法--哈希表
数据结构·c++·笔记·算法·哈希算法·散列表
Nebula_g3 小时前
Java哈希表入门详解(Hash)
java·开发语言·学习·算法·哈希算法·初学者
努力努力再努力wz4 小时前
【C++进阶系列】:万字详解unordered_set和unordered_map,带你手搓一个哈希表!(附模拟实现unordered_set和unordered_map的源码)
java·linux·开发语言·数据结构·数据库·c++·散列表
加油=^_^=4 小时前
【C++】哈希表
数据结构·c++·散列表
对纯音乐情有独钟的阿甘4 小时前
【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数
c++·哈希算法·散列表
励志不掉头发的内向程序员4 小时前
【STL库】哈希表的原理 | 哈希表模拟实现
开发语言·c++·学习·散列表
玩镜的码农小师兄4 小时前
[从零开始面试算法] (04/100) LeetCode 136. 只出现一次的数字:哈希表与位运算的巅峰对决
c++·算法·leetcode·面试·位运算·hot100