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

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

相关推荐
刘琦沛在进步3 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
Hello_Embed4 分钟前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
张祥64228890414 分钟前
RTKLIB源码和理论结合分析笔记三
笔记
机器视觉的发动机15 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
日更嵌入式的打工仔22 分钟前
0欧电阻作用
笔记
HyperAI超神经23 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L33 分钟前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan42 分钟前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
云姜.1 小时前
java多态
java·开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法