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`相关联的部件。在实际使用中,我们需要根据具体情况来判断该部件是否合适。


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PySpark-核心编程

2. PySpark——RDD编程入门 文章目录 2. PySpark——RDD编程入门2.1 程序执行入口SparkContext对象2.2 RDD的创建2.2.1 并行化创建2.2.2 获取RDD分区数2.2.3 读取文件创建 2.3 RDD算子2.4 常用Transformation算子2.4.1 map算子2.4.2 flatMap算子2.4.3 reduceByKey算子2.4.4 Wor…

(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)

(二)Git在公司中团队内合作和跨团队合作和分支操作的全部流程(一篇就够)https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*,可以快速高效地…

mongodb 数据库管理(数据库、集合、文档)

目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1)update() 方法 2)replace() 方法 一、数据库操作 1、创建数据库 创建数据库…

hive表的全关联full join用法

背景:实际开发中需要用到全关联的用法,之前没遇到过,现在记录一下。需求是找到两张表的并集。 全关联的解释如下; 下面建两张表进行测试 test_a表的数据如下 test_b表的数据如下; 写第一个full join 的SQL进行查询…

树莓派时间更新为中国区时间

一、测试环境为:树莓派3B piraspberrypi:~/workfile/lorawan/lorawan-gw $ uname -a Linux raspberrypi 6.1.21-v7 #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l GNU/Linux 测试过程中,请确保树莓派连接网络 ; 二、安装ntp相关命令&…

RK3399平台开发系列讲解(内核调试篇)Valgrind使用案例

🚀返回专栏总目录 文章目录 一、使用未初始化的内存案例二、内存泄露三、在内存被释放后进行读/写案例四、从已分配内存块的尾部进行读/写案例五、两次释放内存案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于…

【计算机网络篇】TCP协议

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! TCP协议 1,TCP 简介 TCP(Transmission Control Protocol)是…

CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 …

阿里云服务器-修改ecs操作系统,把window系统更换成Linux操作系统

其他sql格式也在更新中,可直接查看这个系列,要是没有你需要的格式,可在评论或私信我 总目录 目录-后期更新打算 hive的nvl中的子查询 总目录我这个是window,默认应该都是window,我需要改成Linux系统第一步&#xff…

如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

排序算法之详解冒泡排序

引入 冒泡排序顾名思义,就是像冒泡一样,泡泡在水里慢慢升上来,由小变大。虽然冒泡排序和冒泡并不完全一样,但却可以帮助我们理解冒泡排序。 思路 一组无序的数组,要求我们从小到大排列 我们可以先将最大的元素放在数组…

UE4/5Niagara粒子特效之拖尾渐变

目录 开始操作 发射器一的制作 添加新的模块 ​编辑 让粒子长久存在 添加颜色 发射器二的制作 第三人称模板添加Niagara 效果 添加颜色 效果 隐藏第一个发射器 开始操作 首先创建一个粒子系统,用Fountain这个模板: 发射器一的制作 将不需要的…

MPLS与SD-WAN哪个更适合企业组网?

MPLS专线和SD-WAN是最为人熟知的两种组网方式,而且二者一个是传统组网方式,一个是新兴产品,所以难免会被放在一起比较。有人会问,MPLS专线和SD-WAN哪个更适合企业组网?其实,MPLS专线和SD-WAN都是企业实现高…

【linux】2 Linux编译器-gcc/g++和Linux调试器-gdb

文章目录 一、Linux编译器-gcc/g使用1.1 背景知识1.2 gcc如何完成1.3 函数库1.4 gcc选项 二、linux调试器-gdb使用2.1 背景2.2 开始使用 总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ" 一、Linux编译器-gcc/g使用 1.1 背景…

【仿写tomcat】一、tomcat工作流程

仿写tomcat 简介tomcat简介流程分析tomcat是怎么和访问者交互的?流程图 简介 作者前不久刚仿写了一个简易的tomcat,在此分享给各位,此篇为对tomcat的简介和流程分析,具体仿写内容后续会贴在这里 扫描java文件,获取带…

新高-新低指数(NH-NL)指标公式,判断多空力度

在《以交易为生》这本书中,作者埃尔德根据其经验,认为新高-新低指数(NH-NL)是股市的最佳领先指标。在任意一天中,创一年新高的股票是强势股,而创一年新低的股票是弱势股。新高-新低指数通过比较强势股和弱势股的数量来跟踪市场领导…

springMVC 已解密的登录请求

问题描述: 解决方案: 1.对用户所输入的密码在页面进行MD5加密并反馈至密码输入框。 2. 手动生成SSL安全访问证书;在此不做介绍,相关方法可通过网上查找; 3. 将产品HTTP访问方式改为SSL安全访问方式;在Ap…

【JAVA程序设计】基于SpringBoot+vue的在线考试系统-以计算机网络为例,可自行录入题库-附下载地址

基于SpringBootvue的在线考试系统-以计算机网络为例,可自行录入题库 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着信息技术的迅猛发展,教育行业正面临着巨大的变革和挑战。…

SIP播放解码器

SIP-7101 SIP播放解码器 一、描述 SIP-7101是我司的一款壁挂式SIP网络播放终端,具有10/100M以太网接口,配置一路继电器输出和一路线路输出,可将内部音源输出到外接功放,可实现广播播放功能。SIP-7101作为网络SIP系统的播放终端&…

bh003- Blazor hybrid / Maui 使用蓝牙BLE快速教程

1. 建立工程 bh003_ble 源码 2. 添加 nuget 包 <PackageReference Include"BlazorHybrid.Maui.Permissions" Version"0.0.2" /> <PackageReference Include"BootstrapBlazor" Version"7.*" /> <PackageReference In…