Qt下拉菜单

1,QComboBox

2,setMenu()---设置下拉菜单

AI对话未来丨智能写作对话:
`setMenu()`是`QWidget`类的一个成员函数,在`Qt`中用于将一个菜单作为一个控件的下拉菜单设置。具体来说,它会把相应的菜单对象与该控件关联,并在控件上添加下拉箭头来表示该控件有一个下拉菜单。

以下是`setMenu()`函数的使用示例:

```cpp
QMenu *menu = new QMenu(this); // 创建一个QMenu对象
menu->addAction("Action 1"); // 为菜单添加一个操作
menu->addAction("Action 2"); // 为菜单添加另一个操作

QPushButton *button = new QPushButton(this); // 创建一个QPushButton对象
button->setText("Button"); // 设置按钮的文本
button->setMenu(menu); // 设置按钮的下拉菜单为menu对象
```

在上面的代码中,我们首先创建了一个`QMenu`对象,并给它添加了两个`QAction`对象,然后创建了一个`QPushButton`对象,并将上述`QMenu`对象和该按钮对象关联。此时,该按钮控件右边会出现下拉箭头,用户可以点击它来显示和选择下拉菜单中的操作。

需要注意的是,`setMenu()`函数只能用于某些具有下拉菜单功能的控件(比如`QPushButton`、`QToolButton`、`QComboBox`等)。如果该控件已经有一个下拉菜单了,则使用`setMenu()`函数将替换原有的菜单。如果

AI对话未来丨智能写作对话:
该控件上尚未设置任何下拉菜单,则使用`setMenu()`函数将新设置一个下拉菜单。

 

 

因为控件是按钮,所以此时点击按钮就会弹出下来菜单;

action---setmenu

如果控件不是按钮,而是工具栏的action,点击也不出现下来菜单。

 

设置action对象点击按钮就显示下拉菜单

#include "mainwindow.h"
#include "./ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->pushButton->setMenu(ui->menu_open);ui->actToolOpen->setMenu(ui->menu_open);connect(ui->actToolOpen,&QAction::hovered,[this]{// 获取QAction所在位置的矩形QRect rect = ui->toolBar->widgetForAction(ui->actToolOpen)->rect();// 转换为全局坐标系下的位置//QPoint pos =  ui->toolBar->widgetForAction(ui->actToolOpen)->mapToGlobal(rect.bottomLeft());QPoint pos =  ui->toolBar->widgetForAction(ui->actToolOpen)->mapToGlobal(rect.bottomLeft());// 显示下拉菜单ui->menu_open->popup(pos); });
}MainWindow::~MainWindow()
{delete ui;
}

 

widgetForAction()


`widgetForAction()`函数是`QWidget`类的一个成员函数,用于获取与给定`QAction`对象相关联的`QWidget`部件(再利用这个widget可以获取widget的其他属性)。

该函数原型如下:

```cpp
QWidget *QWidget::widgetForAction(QAction *action) const
```

该函数接受一个`QAction`对象作为参数,并返回一个指向该对象关联的`QWidget`的指针。如果该`QAction`在窗口部件中没有相关联的部件,则该函数返回一个`NULL`指针。

通常情况下,我们可以在`QToolBar`中使用`widgetForAction()`函数来获取与工具栏中的`QAction`对象相关联的工具栏部件,然后使用该部件来计算下拉菜单的位置和大小等。例如,在使用一个包含下拉菜单的`QAction`对象时,我们可以使用该`QAction`关联的部件,计算其所在位置和大小,并将下拉菜单的位置和大小相应地进行设置。

以下是一个示例:

```cpp
QToolBar *toolbar = new QToolBar(this); // 创建一个工具栏

// 在工具栏中添加一个包含下拉菜单的QAction对象
QAction *action = new QAction("Tool Item", this);
QMenu *menu = new QMenu(this);
menu->addAction("Sub Item 1");
menu->addAction("Sub Item 2");
action->s

AI对话未来丨智能写作对话:
etMenu(menu);
toolbar->addAction(action);

// 获取与QAction对象相关联的工具栏部件,并计算其大小与位置
QWidget *widget = toolbar->widgetForAction(action);
QRect rect = widget->geometry();
QPoint pos = widget->mapToGlobal(rect.bottomLeft());

// 显示下拉菜单
menu->popup(pos);
```

在上述代码中,我们首先创建了一个工具栏`toolbar`,并在其中添加一个包含下拉菜单的`QAction`对象。接着,我们使用`widgetForAction()`函数获取该`QAction`对象相关联的工具栏部件,并计算其位置和矩形大小。最后,我们在相应位置调用`popup()`函数来显示下拉菜单。

需要注意的是,`widgetForAction()`函数并不保证返回的部件是一个`QAction`部件,而是返回与给定`QAction`相关联的部件。在实际使用中,我们需要根据具体情况来判断该部件是否合适。


 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Element通过v-for循环渲染的form表单校验

需求&#xff1a;有个表单信息是v-for渲染的&#xff0c;例如下图&#xff0c;通过循环遍历实现新增和删除模块&#xff0c;按照平时的写法实现校验&#xff0c;是不能实现我们想要的效果&#xff0c;根据这个需求&#xff0c;我找到了一个解决方法 1.HTML <el-form ref&qu…

ESD门禁管理系统的主要功能和优势

ESD门禁管理系统是一种用于控制和管理人员进出特定区域的系统。它通常由门禁控制器、门禁读卡器、门禁管理软件等组成。 ESD门禁管理系统的主要功能包括&#xff1a; 1. 门禁控制&#xff1a;通过门禁控制器实现对门禁设备的控制&#xff0c;如开关门、锁定门等。 2. 门禁验…

Go与Rust的对比与分析

Rust 和 Go 是两种现代语言&#xff0c;近年来获得了巨大的关注&#xff0c;每种语言都有自己独特的优势和权衡。在这篇文章中&#xff0c;我们将深入探讨 Rust 和 Go 之间的差异&#xff0c;重点关注性能、语言功能和其他关键因素&#xff0c;以帮助您针对您的开发需求做出明智…

【面试】项目经理面试题

文章目录 一、项目管理面试中通常会问到的问题1.项目管理软件工具知识2.做项目计划的技能3.人员管理技能4.沟通技巧5.方法论知识 二、问面试官的问题三. 面试系列推荐 一、项目管理面试中通常会问到的问题 1.项目管理软件工具知识 问题 1: 工期和工作量之间的差异是什么? 答案…

视频汇聚平台EasyCVR安防视频监控在地下停车场中的具体应用方案

一、背景 随着我国城市化进程的加快&#xff0c;汽车已成为人们生活中不可缺少的交通工具&#xff0c;但在许多城市中&#xff0c;买车容易&#xff0c;停车难的问题愈发突出。特别是在人群密集的商场、写字楼和地下停车场&#xff0c;车流量大、车况复杂。传统的人工判断方式耗…

5、Spring_DI注解开发

DI 注解开发 1.目前面临问题 建立 mapper public interface EmployeeMapper {void save(); }建立 mapper 实现类 Repository public class EmployeeMapperImpl implements EmployeeMapper {public void save(){System.out.println("保存员工信息");} }建立 service …

【Unity】如何制作小地图

我们为什么要制作小地图呢&#xff1f; 原因很简单&#xff1a; 导航和定位&#xff1a;小地图可以显示玩家当前位置以及周围环境的概览。这使得玩家能够更好地导航和定位自己在游戏中的位置&#xff0c;找到目标或避开障碍物。场景了解&#xff1a;通过小地图&#xff0c;玩…

芯片验证板卡设计原理图:446-基于VU440T的多核处理器多输入芯片验证板卡

基于VU440T的多核处理器多输入芯片验证板卡 一、板卡概述 基于XCVU440-FLGA2892的多核处理器多输入芯片验证板卡为实现网络交换芯片的验证&#xff0c;包括四个FMC接口、DDR、GPIO等&#xff0c;北京太速科技芯片验证板卡用于完成甲方的芯片验证任务&#xff0c;多任务…

大数据 算法

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。这些数据集合通常包括结构化数据&#xff08;如数据库中的表格数据&#xff09;、半结构化数据&#xff08;如XML文件&#xff09;和非结构化数据&#xff08;如文本、音频和视频文件&#xff09;。大数据…

Blazor Session设置

文章目录 前言SessionProtectedSessionStorage 类信息加密使用场景 代码部分Nuget扩展安装源码使用&#xff0c; 相关资料 前言 微软官方封装了一些浏览器的操作&#xff0c;其中就有Session的操作的封装 ProtectedSessionStorage 微软文档 因为我们知道&#xff0c;依赖注入…

【Redis】Redis哨兵模式

【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;需要人工干预费事费力&#xff0c;为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具&#xff0c;它可以实现对 Redis 的监控…

PHP自己的框架session()使用(完善篇六)

1、PHP自己的框架session() 2、session类&#xff08;SessionBase.php&#xff09; <?php class SessionBase {/*** 设置session*/public static function set($name, $data, $expire600){$session_data array();$session_data[data] $data;$session_data[expire] time…

零阶矩、一阶矩、二阶矩、…

数学中矩的概念来自物理学。在物理学中&#xff0c;矩是表示距离和物理量乘积的物理量&#xff0c;表征物体的空间分布。矩在统计学和图像中都有很重要作用&#xff0c;我们常用的Adam优化器其全称为自适应矩估计优化器。本文将介绍各阶矩的理解和不同场景的应用。 Key Words&a…

wazuh初探系列一 : wazuh环境配置

目录 方法一&#xff1a;一体化部署 安装先决条件 第一步、安装所有必需的软件包 第二步、安装Elasticsearch 1、添加 Elastic Stack 存储库 安装 GPG 密钥&#xff1a; 添加存储库&#xff1a; 更新源&#xff1a; 2、Elasticsearch安装和配置 安装 Elasticsearch 包…

2023年8月第3周大模型荟萃

2023年8月第3周大模型荟萃 2023.8.22版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、LLM-Adapters&#xff1a;可将多种适配器集成到大语言模型 来自新加坡科技设计大学和新加坡管理大学的研究人员发布了一篇题为《LLM-Adapters: An …

引领娱乐潮流:邀请明星办个人演唱会的五大关键步骤

随着娱乐产业的不断壮大和观众对明星的热情高涨&#xff0c;举办个人演唱会已经成为了一种广受欢迎的文化现象。这种活动不仅让粉丝们有机会亲身近距离感受偶像的音乐魅力&#xff0c;同时也为明星和品牌提供了一个宝贵的互动平台。然而&#xff0c;要成功地邀请明星办个人演唱…

【JAVA基础】 IO详解

【JAVA基础】 IO详解 文章目录 【JAVA基础】 IO详解一、概述二、IO流的作用三、IO流的使用场景四、IO流的分类4.1 传输数据的单位分&#xff1a;4.2 数据传输的方向分&#xff1a;4.3 流的角色的不同分&#xff1a; 五、IO流体系六、字节输入流InputStream七、字节输出流 Outpu…

华为云开发工具CodeArts IDE for C/C++ 开发使用指南

简介 CodeArts IDE是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了开发语言和调试服务。本文主要介绍CodeArts IDE for C/C的基本功能。 1.下载安装 CodeArts IDE for C/C 已开放公测&#xff0c;下载获取免费体验 2.新建C/C工程 CodeArts IDE for C/…

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆&#xff1f;如何克隆浅克隆深克隆 Java设计模式什么是设计模式&#xff1f;为什么要学习设计模式&#xff1f; 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…

学Pyhton静不下来,看了一堆资料还是很迷茫是为什么

一、前言 最近发现&#xff0c;身边很多的小伙伴学Python都会遇到一个问题&#xff0c;就是资料也看了很多&#xff0c;也花了很多时间去学习但还是很迷茫&#xff0c;时间长了又发现之前学的知识点很多都忘了&#xff0c;都萌生出了想半路放弃的想法。 让我们看看蚂蚁金服的大…