【笔记1-11】Qt 关闭QToolbar的拓展菜单

  • QToolbar是Qt中管理工具栏的类,按照默认设定,当工具栏的宽度不足以显示所有的action时,就会创建拓展按钮和拓展菜单,如下图所示,>>是拓展按钮,5555所在位置就是拓展菜单。
  • 按照默认设定,只有在鼠标离开拓展菜单和点击拓展按钮时才会关闭拓展菜单,那如何实现手动控制拓展菜单关闭呢,首先看一下这部分源码

  • 拓展菜单的源码在Qt6.7.2\6.7.2\Src\qtbase\src\widgets\widgets\QToolBarLayout.cpp中,这里有setExpanded函数用于控制拓展菜单开关

  • 而想要使用setExpanded函数,就需要头文件qtoolbarlayout_p.h,但是这个头文件中明确表示了,这是一个private类,无法在应用层使用

  • 那么就需要用其他间接的方法来实现,先看一下setExpanded函数被调用的地方,是在qtoolbar.cpp的事件处理函数中,当leave事件发生时关闭拓展菜单

  • 所以可以向工具栏发送一个leave事件,从而关闭拓展菜单

  • 这里我们给action5555的点击事件链接一个槽函数,在槽函数中发送leave事件,从而实现点击拓展菜单中的action555后立即关闭拓展菜单的效果

c 复制代码
connect(m_pActTest5555DockShow, SIGNAL(triggered()), this, SLOT(updateExtensionButton()));
c 复制代码
void MainWindow::updateExtensionButton()
{

    QEvent leaveEvent(QEvent::Leave);
    QApplication::sendEvent(m_pTBTest, &leaveEvent);
}

虽然算不上好办法,但目前只能这样了。。。

相关推荐
小王C语言10 分钟前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
TMedical38 分钟前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
我是唐青枫1 小时前
Kotlin Delegation 委托详解
开发语言·kotlin
qq_406981031 小时前
共享变量一 关于extern与const
开发语言·c++
FRing031 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
海绵宝宝的月光宝盒1 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad
小嘉丶学长2 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
白山编程大哥3 小时前
接口幂等性是什么?如何设计?
笔记
ACP广源盛139246256733 小时前
6 盘位存储扩展方案选型笔记:YLB3116 @ACP评估记录
笔记·硬件架构·硬件工程·国产芯片
迪菲赫尔曼3 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测