QMenuBar和QACtion的使用

news2024/9/24 17:10:35

1. 主界面:QMainWindow

包含了菜单栏、工具栏、状态栏以及工作区等功能

菜单栏:使用QMenuBar类管理,管理菜单栏中的菜单或者执行动作

执行动作:QAction类管理

工具栏:使用QToolBar类管理

状态栏:使用QStatusBar类管理

工作区:使用QDockWidget类管理

菜单项:QMenu类管理菜单项

各个模块大致分区

2. 创建菜单栏 QMenuBar

2.1 函数原型

QAction *addAction(const QString &text) //添加执行的动作
 QAction *addAction(const QString &text, const QObject *receiver, const char *member)
 QAction *addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)
 QAction *addAction(const QString &text, Functor functor)
 QAction *addMenu(QMenu *menu) //添加菜单或菜单项
 QMenu *addMenu(const QString &title)
 QMenu *addMenu(const QIcon &icon, const QString &title)

2.1.1 注意

1)向菜单栏中添加菜单,如果设置接收了返回值,这个返回值的作用就是方便我们纵向添加菜单项

2如果 不使用 返回值 向后继续addMenu()创建菜单项的话,就是横向添加的

3addAction是执行一个动作,但是addAction后面不能执行addMenu了

2.2 添加菜单的基本函数

QMianWindow

mainwindow.h

 //实例化菜单栏
    QMenu* menu1;
    //实例化执行一个动作
    QAction* action1 = new QAction();
    QAction* action2 = new QAction();

mainwindow.cpp

//菜单栏的使用********************************************************************
    //向菜单栏中添加菜单,注意这里menu1接收了返回值,这个返回值的作用就是方便我们纵向添加菜单项,如果 不使用 返回值 向后继续addMenu()创建菜单项的话,就是横向添加的
    menu1 = ui->menubar->addMenu("文件(F)");

    //比如这样就是没使用返回值addMenu(),是横向添加
    ui->menubar->addMenu("编辑(E)")->addMenu("打开1")->addMenu("打开2")->addMenu("打开3");
    ui->menubar->addMenu("视图(V)");

    //这个就是使用返回值添加。是纵向添加
    this->menu1->addMenu("参考")->addMenu("打开1")->addMenu("打开2");
    this->menu1->addMenu("新建");
    this->menu1->addMenu("打开");
    this->menu1->addMenu("保存");

    //addAction是执行一个动作,但是addAction后面不能执行addMenu了
    action1 = this->menu1->addAction("另存为...");

    //菜单栏也可以添加一个执行动作,addAction是执行一个动作
    action2 = ui->menubar->addAction("调试");

    //向指定位置插入菜单项
//    ui->menubar->insertMenu(action2,this->menu1);//在执行动作action2即“调试”之前插入 菜单项1 即“文件(F)”

2.3 执行动作: QAction

2.3.1执行动作的信号

2.3.2 举例

QMainWindow

绑定

mainwindow.cpp

//绑定用户点击  另存为...   执行一个动作,就会触发一个信号
    connect(action1,SIGNAL(triggered()),this,SLOT(other_Save()));

    //用户点击  调试  执行一个动作,就会触发一个信号
    connect(action2,SIGNAL(triggered()),this,SLOT(other_Save2()));

定义

mainwindow.h


public slots://执行一个动作的槽
    void other_Save();
    void other_Save2();

实现

mainwindow.cpp


public slots://执行一个动作的槽
    void other_Save();
    void other_Save2();

实现

mainwindow.cpp

void MainWindow::other_Save(){
    qDebug()<<"实现另存为功能"<<endl;
}

void MainWindow::other_Save2(){
    qDebug()<<"实现调试功能"<<endl;
}

2.4 练习:试着模拟记事本的菜单栏的搭建

Moni_Text_Menu

mianwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenu>
#include <QAction>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void rece_lingcunwei();

private:
    Ui::MainWindow *ui;

    QAction* action_dakai = new QAction();
    QAction* action_lingcunwei = new QAction();
};
#endif // MAINWINDOW_H

mianwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

//模拟记事本菜单栏
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QMenu* menu_dir = ui->menubar->addMenu("文件(F)");
    menu_dir->addMenu("新建(N)");
    menu_dir->addMenu("新窗口(W)");

    action_dakai = menu_dir->addAction("打开(O)");

    menu_dir->addMenu("保存(S)");

    action_lingcunwei = menu_dir->addAction("另存为(A)");

    menu_dir->addMenu("页面设置(U)");
    menu_dir->addMenu("打印(P)");
    menu_dir->addMenu("退出(X)");

    QMenu* menu_edit = ui->menubar->addMenu("编辑(E)");
    menu_edit->addMenu("撤销");
    menu_edit->addMenu("剪切");
    menu_edit->addMenu("复制");
    menu_edit->addMenu("粘贴");
    menu_edit->addMenu("删除");
    menu_edit->addMenu("查找");
    menu_edit->addMenu("替换");

    QMenu* menu_geshi = ui->menubar->addMenu("格式(O)");
    menu_geshi->addMenu("自动换行");
    menu_geshi->addMenu("字体");

    QMenu* menu_look = ui->menubar->addMenu("查看(V)");
    menu_look->addMenu("缩放");
    menu_look->addMenu("状态栏");

    QMenu* menu_help = ui->menubar->addMenu("帮助(H)");
    menu_help->addMenu("查看帮助");
    menu_help->addMenu("发送反馈");
    menu_help->addMenu("关于记事本");


    //绑定用户点击  另存为...   执行一个动作,就会触发一个信号
    connect(this->action_lingcunwei,SIGNAL(triggered()),this,SLOT(rece_lingcunwei()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::rece_lingcunwei(){
    qDebug()<<"执行另存为..."<<endl;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1380498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑扩容升级硬盘选1T还是2T

SSD固态有必要升级2TB吗&#xff1f;----------吴中函 某大二学生用的一台笔记本电脑&#xff0c;512GB的硬盘空间已经严重不够用了&#xff0c;想给笔记本扩容升级一下硬盘&#xff1b; 这位学生是学设计专业的、平时也喜欢摄影、电脑里面也装了一些游戏&#xff0c;经常整理、…

vue v-for循环拖拽排序,实现数组选中的数据拖拽后对应的子数据也进行重新排序

如下图所有&#xff0c;有个需求更新&#xff0c; 实现拖拽。 1&#xff0c;当新增了测点类型的时候每个对应的回路子数据都会新增对应的测点类型。 2&#xff0c;当拖动测点类型结束的时候对应的回路里面的内容也会跟着测点类型的排序自动排序 其实很简单&#xff0c;只要会了…

高效办公:在文件夹名称左边插入关键字,提高文件管理效率

在繁忙的工作环境中&#xff0c;经常要处理大量的文件和文件夹。有效的文件管理是一个挑战&#xff0c;大量的文件和文件夹难以找到所需的资料。下面一起来看云炫文件管理器如何在文件夹名称左边批量插入关键字。 文件夹名称左边添加关键字前后对比图。 文件夹名称左边批量插…

智能分析网关V4:搭建智慧幼儿园视频AI智能监管方案

一、背景需求 随着科技的日新月异&#xff0c;智慧化监管在幼儿园管理领域的应用已成为不可逆转的趋势。在传统的幼儿园管理模式中&#xff0c;校园安全管理往往依赖于人工查看监控&#xff0c;难以及时发现安全隐患。智慧幼儿园监管解决方案通过引入物联网、大数据、人工智能…

【AI的未来 - AI Agent系列】【MetaGPT】1. AI Agent如何重构世界

上篇文章我们跑起来了第一个MetaGPT程序。本文主要学习了一下理论&#xff0c;什么是智能体&#xff0c;以及智能体如何重构世界。 0. 什么是智能体 智能体 LLM观察思考行动记忆 多智能体 智能体环境SOP评审路由订阅经济 用人话说&#xff0c;我理解的Agent&#xff1a; 智…

vue前端开发自学,插槽练习第二次,name属性的使用

vue前端开发自学,插槽练习第二次,name属性的使用!可以使用name属性&#xff0c;来自定义一个名字&#xff0c;这样&#xff0c;就可以在一个组件内同时出现多个插槽的内容了。在子组件内接收的时候&#xff0c;很简答&#xff0c;只需要在slot标签里面加上name“mz”&#xff1…

物理机本地和集群部署Spark

一、单机本地部署 1&#xff09;官网地址&#xff1a;http://spark.apache.org/ 2&#xff09;文档查看地址&#xff1a;https://spark.apache.org/docs/3.1.3/ 3&#xff09;下载地址&#xff1a; https://spark.apache.org/downloads.html https://archive.apache.org/dist/…

Spring Boot - Application Events 的发布顺序_ApplicationFailedEvent

文章目录 Pre概述Code源码分析 Pre Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent 概述 Spring Boot 的广播机制是基于观察者模式实现的&#xff0c;它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦&#…

Redis实现分布式会话

Redis实现分布式会话 1 什么是分布式会话 1 这是我么之前学过的注册登录模式 2 如果非常多的人访问&#xff0c;因为单台服务器的访问承受能力是有限的&#xff0c;那么我们就想用多态服务器来承担压力 3 一般通过负载均衡的方式来实现&#xff0c;来分担服务器的压力。 4 负…

了解集群,以及集群是什么?

每个集群即一个独立运行的文档数据库&#xff0c;分片集群架构由路由&#xff08;mongos&#xff09;、配置&#xff08;config&#xff09;和分片&#xff08;shard&#xff09;组成。 数据读写请求经mongos分发&#xff0c;通过查询config信息&#xff0c;并行分配到相应sha…

基于完整熵编码系数组的JPEG图像加密方案

论文题目&#xff1a;JPEG image encryption with grouping coefficients based on entropy coding 期刊&#xff1a;Journal of Visual Communication and Image Representation 分区&#xff1a;中科苑三区&#xff0c;老牌图像处理期刊 文章目录 摘要概要整体架构流程实验结…

在MinIO中添加Pools(池)并扩展容量

服务器池可帮助您快速轻松地扩展现有 MinIO 集群的容量。这篇博文重点介绍如何增加一个集群的容量&#xff0c;这与添加另一个集群并在多个集群之间复制相同数据不同。将服务器池添加到现有群集时&#xff0c;可以增加该群集的整体可用容量。如果设置了复制&#xff0c;则需要平…

2024年广东省安全员C证第四批(专职安全生产管理人员)证模拟考试题库及广东省安全员C证第四批(专职安全生产管理人员)理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;证模拟考试题库及广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;理论考试试题是由安全生产模拟考试一点通提供&#…

分布式数据库原理及技术实验及个人思考

Hive的数据库及表的存储结构体系讨论 1.显示hive所在数据库的位置 方法一&#xff1a;一次性临时存储 >hive set hive.cli.print.current.dbtrue 方法二&#xff1a;永久存储 在conf文件夹下修改hive-site.xml配置文件&#xff0c;添加 <property> <name>…

报错解决:No module named ‘pytorch_lightning‘ 安装pytorch_lightning

报错记录 执行如下代码&#xff1a; import pytorch_lightning报错&#xff1a; No module named ‘pytorch_lightning’ 解决方式 安装pytorch_lightning包即可。 一般情况下&#xff0c;缺失的包通过pip安装&#xff0c;即&#xff1a; pip install pytorch_lightning然…

构建 Maven 项目时可能遇到的问题

文章目录 构建 Maven 项目时可能遇到的问题1. Maven 自动下载依赖后&#xff0c;在本地仓库中找不到2. 运行时报错如下&#xff1a;Error: java 不支持发行版本 53. 创建 Maven 项目后 pom.xml 文件为空4. 在 Settings 中 Update 了阿里云远程仓库&#xff0c;导致整个项目不能…

【Web】NSSCTF Round#16 Basic个人wp(全)

出题友好&#xff0c;适合手生复健。 目录 ①RCE但是没有完全RCE ②了解过PHP特性吗 ①RCE但是没有完全RCE 上来就是一段md5八股 (string)就是不让用数组了&#xff0c;然后强比较需要md5碰撞 ?md5_1%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc…

【Python机器学习】分类器的不确定估计——决策函数

scikit-learn接口的分类器能够给出预测的不确定度估计&#xff0c;一般来说&#xff0c;分类器会预测一个测试点属于哪个类别&#xff0c;还包括它对这个预测的置信程度。 scikit-learn中有两个函数可以用于获取分类器的不确定度估计&#xff1a;decidion_function和predict_pr…

Portalgraph VR空间投影仪:可以将VR空间投射到任意平面上的新型VR投影技术

通过一项创新的科技突破&#xff0c;Portalgraph VR空间投影仪成功地在现实与虚拟空间之间搭建起了一座神奇的“时空传送门”。这投影一技术不仅打破了传统虚拟现实设备的局限&#xff0c;更让人们无需佩戴任何头戴显示器&#xff0c;仅凭裸眼就能在任何平面上看到虚拟现实空间…

平衡小车——PID控制理论

开环控制 开环控制,全称开环控制系统(Open Loop Control System),又称为无反馈系统。即系统的输入可以影响输出,但是 输入不受输出影响 的系统。输入到输出的信号是单向传递的。 以下为生活中的例子: 控制系统 输入量 控制器 受控对象 输出量 风扇调速