Qt: QToolBar的右侧下拉菜单和QAction的setMenu延迟弹出问题
QToolBar的右侧下拉菜单。在QMainWindow下,QToolBar内容较多/显示不全时,右侧下拉按钮是展开模式,即工具栏展开显示,不会弹出下拉菜单。在其他情况下,比如QDialog中,则启用下拉菜单模式。
当启用下拉菜单模式时,QToolBar会判断所有的Action,下拉菜单只显示QAction,不显示QToolButton以及其他自定义Widget的Action。
而如果Action添加了setMenu的情况下,如果是工具条中显示这个Action,实际就是QToolButton;如果这个Action被收缩到下拉菜单中,则是一个二级菜单形式。此时,在QToolButton样式下的这个Action,菜单是采用DelayedPopup样式的,延迟时间默认是600ms,时间较长,所以,需要按下鼠标左键等待一会儿才弹出,显然,这样并不好。
因此,简单的修改方案有两个。其一,在窗口宽度变化后,重新遍历QToolBar下的所有QToolButton,调用setPopupMode设置为QToolButton::InstantPopup。其二,使用QSS修改延迟弹出时间,setStyleSheet(“QToolButton{toolbutton-popup-delay:0;}”); ,实际效果是修改了QStyle::SH_ToolButton_PopupDelay的数值。
这里采用后者。方案取自Qt源码,Qt文档中并未给出toolbutton-popup-delay的相关介绍。
转载请注明来源,谢谢。
有偿解决C++编程问题,承接项目定制开发;寻一份全职或兼职Windows C++开发工作。联系邮箱:[email protected]。