QStyle Menus 样式设计(二十一)

Qt中的菜单在QMenu中实现。 QMenu保留一个动作列表,将其绘制为菜单项。 当QMenu接收到绘制事件时,它将计算每个菜单项的大小,并使用CE_MenuItem分别绘制它们。

(菜单项的标签(内容)没有单独的元素,因此所有绘制都在CE_MenuItem中完成。菜单还使用PE_FrameMenu绘制菜单的框架。如果样式支持滚动,

则菜单还将绘制CE_MenuScroller。如果绘制样式,则绘制CE_MenuTearOff 菜单的边框较大。

在样式结构树中,我们还包括QMenu,因为它也进行样式相关的工作。 菜单项的边界矩形是针对菜单大小提示以及菜单的显示或调整大小而计算的。

 

 

 

CE_MenuScroller和CE_MenuTearOff元素由QCommonStyle处理,除非菜单较大以适合屏幕,否则它们不会显示。 仅为弹出菜单绘制PE_FrameMenu。

QMenu根据其动作计算矩形,如果样式支持,则调用CE_MenuItem和CE_MenuScroller。

通常也使用PE_IndicatorCheckBox(而不是使用PE_IndicatorMenuCheckMark)和PE_IndicatorRadioButton绘制可检查的菜单项。

我们没有将它们包括在样式树中,因为这是可选的,并且因样式而异。

 

 菜单项的样式选项是QStyleOptionMenuItem。 下表描述了其状态标志和其他成员。

StateSet When
State_Selected 鼠标悬停在操作上,该操作不是分隔符。
State_Sunken 在菜单项上按下鼠标。
State_DownArrow 设置菜单项是否为菜单滚动器,并向下滚动菜单。

 

 

MemberContent
checkType CheckType枚举的值,它是NotCheckable,Exclusive或NonExclusive。
checked 布尔值,如果选中菜单项,则为true。
font 用于菜单项文本的QFont。
icon 菜单项的QIcon。
maxIconWidth 图标允许的最大宽度
menuHasChecableItem 布尔值,如果可以检查菜单中的至少一项,则为true。
menuItemType 菜单项的类型。 这是MenuItemType的值。
menuRect 菜单项所在的QMenu的边界矩形。
tabWidth 这是菜单项的文本和快捷方式之间的距离。
text 菜单项的文本。

 

CE_MenuTearOff和CE_MenuScroller的样式选项的设置也使用QStyleOptionMenuItem。 除了使用QStyleOption的initFrom()的常用设置外,它们仅设置menuRect变量。

 

posted @ 2020-11-04 22:15  流浪侠客  阅读(478)  评论(0编辑  收藏  举报