【笔记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);
}

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

相关推荐
库玛西18 分钟前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研
计算机毕设定制辅导-无忧学长39 分钟前
《基于SpringBoot的未成年人健康知识科普平台的设计与实现》
java·开发语言·vue.js·spring boot·未成年人健康知识科普平台
Ivanqhz1 小时前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
m0_734571761 小时前
深入理解C++ RAII
开发语言·c++
泡海椒1 小时前
jquick-pdf 表格实战:动态数据 PDF 报表生成
java·开发语言·pdf
aramae1 小时前
模拟实现memset()(C语言)
c语言·开发语言·后端
wuyk5552 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
船厂电气自动化ai大模型2 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习
Rabitebla2 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西2 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法