当前位置: 首页 > news >正文

Qt应用开发(基础篇)——菜单 QMenu

一、前言

        QMenu类继承于QWidget,它提供了一个菜单样式的小部件,用于菜单栏、上下文菜单和一些弹出式菜单。

        QMenu菜单的选项是可选的,它可以是一个下拉的菜单,也可以是独立的上下文菜单。下拉菜单通常作用于当用户单击相应的项目或按下指定的快捷键时,使用QMenuBar::addMenu()将菜单插入到菜单栏中,菜单栏将显示下拉菜单。上下文菜单通常通过一些特殊的键盘键或右键来调用。它们可以用popup()异步执行,也可以用exec()同步执行。当然菜单也可以在一些触发事件中调用,比如按下按钮时。

       QMenu菜单由一系列操作项QAcion组成,QAcion在QMenu调用addAction()addActions()、insertAction()的时候添加,动作垂直表示,样式由QStyle呈现。此外,操作可以有一个文本标签,在最左边绘制一个可选的图标,以及快捷键序列。

void MainWindow::on_pushButton_clicked()
{QMenu *menu = new QMenu();                menu->addAction(QIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon)),"copy");menu->addAction("cut");menu->addAction("paste");menu->popup(QPoint(this->pos().x()+100,this->pos().y()+100));
}

        QMenu菜单有四种类型的操作项:分隔符子菜单小部件执行操作。使用addSeparator()插入分隔符,使用addMenu()插入子菜单。当插入动作项时,通常指定一个接收器和插槽,此外,QMenu提供了两个信号,triggered()hover(),它们向从菜单触发的QAction发出信号,我们也可以从这里知道哪个QAction被触发。        

        在下面的示例中,我们指定copy动作的同时定义信号槽,并且绑定menu的triggered信号,点击copy就会打印“copy Triggered”两次。

        警告:要使QMenu在软件上可见,应该使用exec()或popup()而不是show()。如果使用show(),没有指定坐标的情况下,菜单会直接显示屏幕的左上角。

void MainWindow::on_pushButton_clicked()
{
QMenu *menu = new QMenu();                
QAction *copyAcy = menu->addAction(QIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon)),"copy",this,SLOT(onCopyTriggered()),QKeySequence(Qt::CTRL + Qt::Key_C));
menu->addAction("cut");
menu->addSeparator();
QMenu *sub_menu = new QMenu("help");
menu->addMenu(sub_menu);
menu->addMenu(sub_menu);
sub_menu->addAction("about");
menu->popup(QPoint(this->pos().x()+100,this->pos().y()+100));connect(menu,&QMenu::triggered,[=](QAction *action *action){if(action == copyAcy){qDebug()<<"copy Triggered";}});
}void MainWindow::onCopyTriggered()
{qDebug()<<"copy Triggered";
}

二、QMenu类

1、icon

        该属性表示菜单的选项图标,默认是一个空的图标。

bool autoRepeat() const
void setAutoRepeat(bool)

         在上面的实例我们添加一句:

sub_menu->setIcon(QIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon)));

2、separatorsCollapsible

        该属性表示是否连续分隔符是否应在视觉上折叠为单个分隔符,菜单开头或结尾的分隔符也被隐藏,该属性默认为true。

separatorsCollapsible = false

       

separatorsCollapsible = true

3、tearOffEnabled

        该属性表示菜单是否可以被撕下,当为true时,菜单包含一个特殊的可撕毁项(通常显示为菜单顶部的虚线)。用户可以“撕掉”经常使用的菜单,该项在触发时创建菜单的副本。这个“撕下来的”副本位于屏幕上一个单独的窗口中。这个概念通常不会在微软Windows上使用,所以我们一般也不回使用,当做了解就行了。此属性默认为false。

bool isTearOffEnabled() const
void setTearOffEnabled(bool)

4、title

        该属性表示菜单的标题,默认情况下是一个空的字符串,所以不显示。

QString title() const
void setTitle(const QString &title)

5、toolTipsVisible

        该属性表示是否要显示工具提示,默认为false。

bool toolTipsVisible() const
void setToolTipsVisible(bool visible)
QAction *copyAcy = menu->addAction(QIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIIcon)),"copy",this,SLOT(onCopyTriggered()),QKeySequence(Qt::CTRL + Qt::Key_C));
copyAcy->setToolTip("this is copy");

6、公共函数

1)addAction

        添加动作QAction,返回QAction指针,可以传入文本,图标,触发响应的槽函数和按键快捷方式。

QAction *addAction(const QString &text)
QAction *addAction(const QIcon &icon, const QString &text)
QAction *addAction(const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
QAction *addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
QAction *addAction(const QString &text, Functor functor, const QKeySequence &shortcut = 0)
QAction *addAction(const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
QAction *addAction(const QIcon &icon, const QString &text, Functor functor, const QKeySequence &shortcut = 0)
QAction *addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)

2)actionAt

        返回指定坐标pos下的QAction指针,如果不存在则返回空指针。

QAction *actionAt(const QPoint &pt) const

3)actionGeometry

        返回指定坐标pos下的QAction指针,如果不存在则返回空指针。

QRect actionGeometry(QAction *act) const

4)activeAction

        返回当前高亮显示的QAction指针,如果当前没有高亮显示的操作,则返回空指针。

QAction *activeAction() const

5)setActiveAction

        设置指定的QAction为高亮。

void setActiveAction(QAction *act)

6)defaultAction

        返回当前默认的QAction指针。

QAction *defaultAction() const

 7)setDefaultAction

        返回某QAction为默认操作,默认操作会有一个视觉提示,通常表示在发生删除时默认会发生什么。

QAction *defaultAction() const

8)addMenu

        添加子菜单,参考上文示例。

QAction *addMenu(QMenu *menu)
QMenu *addMenu(const QString &title)
QMenu *addMenu(const QIcon &icon, const QString &title)

9)insertMenu

        在before之前插入菜单。

QAction *insertMenu(QAction *before, QMenu *menu)

10)addSection

        添加section动作,样式是一个分隔符带文本和图标,返回QAction指针。就好像一个QAction::setSeparator(true)但是又有文本和图标提示的动作。样式取决与系统的GUI样式。

QAction *addSection(const QString &text)
QAction *addSection(const QIcon &icon, const QString &text)
QMenu *menu = new QMenu();
menu->addAction(QIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon)),"copy");
menu->addSection("handle");
menu->addAction("cut");
menu->addAction("paste");

 11)insertSection

        在before之前插入seciton动作。

QAction *insertSection(QAction *before, const QString &text)
QAction *insertSection(QAction *before, const QIcon &icon, const QString &text)

12)addSeparator

        添加分隔符。

QAction *addSeparator()

13)addSeparator

        在before之前插入分隔符。

QAction *insertSeparator(QAction *before)

14)exec

        同步执行此菜单,相当于exec(pos())。返回在弹出菜单或其子菜单中触发的QAction,如果没有触发项(通常是因为用户按了Esc),则返回空指针。

QAction *exec()
QAction *exec(const QPoint &p, QAction *action = nullptr)
//静态函数
QAction *exec(QList<QAction *> actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr)

        在大多数情况下,需要自己指定位置,比如:

exec(QCursor::pos());
exec(somewidget.mapToGlobal(QPoint(0,0)));
exec(e->globalPos());

15)popup

        显示菜单,使动作atAction位于指定的全局位置p。

void popup(const QPoint &p, QAction *atAction = nullptr)

16)clear

        删除所有菜单的操作。

void clear()

 17)isEmpty

       返回菜单操作项数量是否为空。

bool isEmpty() const

 18)setAsDockMenu

        通过选项单击应用程序dock图标,将此菜单设置为可用的dock菜单。仅在macOS上可用。

void setAsDockMenu()

  19)menuAction

        返回与此菜单关联的QAction指针

QAction *menuAction() const

7、信号

1)hovered

        该信号在菜单操作被高亮显示时触发,action是触发信号的动作,通常用于更新状态信息。

void hovered(QAction *action)

2)triggered

        该信号在触发此菜单中的操作时触发,action是触发信号的动作,通常将每个菜单动作的触发器()信号连接到它自己的自定义槽,但有时你会想要将几个动作连接到一个槽,例如,当你有一组密切相关的动作,如“左对齐”,“居中”,“右对齐”。

void triggered(QAction *action)

3)aboutToShow

        该信号在菜单显示的时候触发。 

void aboutToShow()

4)aboutToHide

        该信号在菜单隐藏的时候触发。 

void aboutToHide()

相关文章:

Qt应用开发(基础篇)——菜单 QMenu

一、前言 QMenu类继承于QWidget&#xff0c;它提供了一个菜单样式的小部件&#xff0c;用于菜单栏、上下文菜单和一些弹出式菜单。 QMenu菜单的选项是可选的&#xff0c;它可以是一个下拉的菜单&#xff0c;也可以是独立的上下文菜单。下拉菜单通常作用于当用户单击相应的项目或…...

MySQL-DDL语句

MySQL-DDL语句 数据库操作语句增删数据库查看数据库列表创建数据库进入&#xff08;使用&#xff09;数据库/查看当前所在的数据库查看数据库的建库语句查看数据库的编码集和校验集删除数据库修改数据库的编码集查看数据库支持的编码集和校验集 数据库备份备份单个数据库恢复数…...

总结987

考研倒计时102天 时间记录&#xff1a; 6:20起床 7:00~7:40早读&#xff0c;13年tex2 7:50~8:20实验室 8:30~8:34列日计划 8:40~11:18进步本回顾&#xff0c;记录 11&#xff1a;20~12:20计算机网络网课 2:10~3:05计网20道选择题 3:07~4:42政治1000题25道选择题纠错 …...

【服务器 | 测试】如何在centos 7上面安装jmeter

安装之前需要几个环境&#xff0c;以下是列出的几个环境 CentOS 7.7 64位JDK 1.8JMeter 5.2 1. 下载jmeter安装包 JMeter是开源的工具&#xff0c;安装 JMeter 要先安装好 JDK 的环境&#xff0c;安装JDK在前面的文章已经讲到 JMeter最新版下载地址&#xff1a;Apache JMeter…...

20.04部署cartographer

部署cartographer sudo apt-get update sudo apt-get install -y python3-wstool python3-rosdep ninja-build stow下载cartographer新建了一个ws mkdir carto_ws cd carto_ws wstool init src wstool merge -t src https://raw.githubusercontent.com/cartographer-project/…...

djangoMTV初探

1.restful请求方式 一个视图对应多个操作&#xff08;增删改查&#xff09; 老的方式 views.py from django.shortcuts import render from django.http import HttpResponse,request,QueryDict, JsonResponse from myapp.models import User from django.views.generi…...

Minecraft--基于云服务器搭建自己的服务器--简易搭建

阿丹&#xff1a; 上一个项目结束了。但是看着自己的服务器想着能不能做点啥子吧。想到了之前和兄弟们玩的麦块。好久没和兄弟们一起玩耍了。怀念之前一起连一个wifi玩我的世界的时候是真快乐。于是尝试自己动手搭建一个我的世界服务器&#xff0c;邀请兄弟们重温一下快乐。 提…...

【数据结构与算法】十大经典排序算法

文章目录 前言一、常见十大排序算法总结1、名词解释2、时间复杂度 二、排序算法与C语言实现1、冒泡排序2、选择排序3、插入排序4、希尔排序5、归并排序6、快速排序7、堆排序8、计数排序9、桶排序10、基数排序 总结 前言 排序算法是《数据结构与算法》中最基本的算法之一。 排序…...

Android 12.0 SystemUI下拉状态栏定制化之隐藏下拉通知栏布局功能实现(一)

1.前言 在12.0的系统定制化开发中,由于从12.0开始SystemUI下拉状态栏和11.0的变化比较大,所以可以说需要从新分析相关的SystemUI的 布局,然后做分析来实现不同的功能,今天就开始实现关于隐藏SystemUI下拉状态栏中的通知栏布局系列一 如图: 2.SystemUI下拉状态栏定制化之…...

665. 非递减数列-先改后验法

665. 非递减数列 给你一个长度为 n 的整数数组 nums &#xff0c;请你判断在 最多 改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的&#xff1a; 对于数组中任意的 i (0 < i < n-2)&#xff0c;总满足 nums[i] < …...

调教 文心一言 生成 AI绘画 提示词(Midjourney)

文章目录 第一步第二步第三步第四步第五步第六步第七步第八步 文心一言支持连续对话 我瞎玩的非专业哈哈 第一步 你好&#xff0c;今天我们要用扩散模型创建图像。我会给你提供一些信息。行吗? 第二步 这是Midjourney的工作原理:Midjourney是另一个基于ai的工具&#xff0c;能…...

半导体制造工艺(一)光刻

在这里开个新专题&#xff0c;主要详细描述半导体制造整个流程中所用到的设备工艺步骤。 在集成电路制造工艺中&#xff0c;光刻是决定集成器件集成度的核心工序&#xff0c;该工序的作用是将图形信息从掩模版&#xff08;也称掩膜版&#xff09;上保真传输、转印到半导体材料衬…...

【海思SS626 | 开发环境】VMware17安装Ubuntu 18.04.6

目录 一、下载 Ubuntu 18.04.6 LTS二、VMware17创建虚拟机三、安装Ubuntu18.04LTS四、安装其他软件五、总结 一、下载 Ubuntu 18.04.6 LTS 问题&#xff1a;为什么要下载 Ubuntu18.04.6 LTS 而不是使用最新的&#xff0c;或者其他Linux发行版&#xff1f; 答&#xff1a;在ss6…...

Vue知识系列(3)每天10个小知识点

目录 系列文章目录Vue知识系列&#xff08;1&#xff09;每天10个小知识点Vue知识系列&#xff08;2&#xff09;每天10个小知识点 知识点**21. Vue不同生命周期**的概念、作用、原理、特性、优点、缺点、区别、使用场景**22. Vue 子组件和父组件执行顺序****23. created 和 mo…...

Java基础入门·多线程·线程池ThreadPool篇

前言 特点分析 线程池ThreadPool 销毁线程池 Executor类 ​​​​​​​ ​​​​​​​ ​​​​​​​ Callable接口 线程池使用 ​​​​​​​…...

Trinitycore学习之在vscode查看远端服务器上源码配置

1&#xff1a;安装vscode&#xff0c;去官网下载&#xff0c;这里下载windows版本安装包 .zip https://code.visualstudio.com/Download 2&#xff1a;安装后&#xff0c;安装扩展chinese&#xff0c;使用中文设置&#xff0c;需要重启vscode。 3&#xff1a;安装ssh相关插件…...

583. 两个字符串的删除操作 -- 动规

583. 两个字符串的删除操作 class MinDistance:"""583. 两个字符串的删除操作https://leetcode.cn/problems/delete-operation-for-two-strings/description/"""def solution(self, text1: str, text2: str) -> int:"""这道题…...

SOME/IP

介绍 SOME/IP是一种汽车中间件解决方案&#xff0c;可用于控制消息。它从一开始就被设计为完美地适应不同尺寸和不同操作系统的设备。这包括小型设备&#xff0c;如相机、AUTOSAR 设备&#xff0c;以及头戴设备或远程通信设备。它还确保SOME/IP支持信息娱乐域以及车辆中其他域…...

[2023.09.12]: Yew应用开发的第一个hook--use_state

Yew的SSR模式推荐使用function_component组件&#xff0c;并且在function_component中使用hooks。其中&#xff0c;我使用到的第一个hook是use_state。use_state的设计意图与React中的useState非常相似&#xff0c;都是为了保存并修改当前的状态。然而&#xff0c;由于Yew是用R…...

使用Langchain+GPT+向量数据库chromadb 来创建文档对话机器人

使用LangchainGPT向量数据库chromadb 来创建文档对话机器人 一.效果图如下&#xff1a; 二.安装包 pip install langchainpip install chromadbpip install unstructuredpip install jieba三.代码如下 #!/usr/bin/python # -*- coding: UTF-8 -*-import os # 导入os模块&…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

c++算法学习3——深度优先搜索

一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略&#xff0c;其核心思想是&#xff1a; 深度优先&#xff1a;从起点出发&#xff0c;选择一个方向探索到底&#xff0c;直到无路可走 回溯机制&#xff1a;遇到死路时返回最近…...