QStyle类用法总结(三)

1.前言

      为了更容易搞懂Qt自定义风格绘制,在平时开发中,实现定制自己风格的UI,本人推出有关QStyle自定义风格系列文章。说明如下:

  1. QStyle类用法总结(一)》。该文是对Qt自定义风格简单描述,对QStyle及其相关类作了概念性的描述。
  2. QStyle类用法总结(二)》。该文是对QStyle及其相关类作了详细描述。
  3. QStyle类用法总结(三)》。也就本博文,对QStyle中的各widget元素的层次继承树做了详细描述。
  4. QProxyStyle用法简述》。通过一个简单的例子,演示了QProxyStyle类用法。
  5. QStyle实现自绘界面项目实战(一)》。通过一个实战化例子,讲解了如何自定义风格的实现。
  6. QStyle实现自绘界面项目实战(二)》通过项目实战来理解前几篇提到的内容,理解QStyle及其子类在自绘时的工作机制。

 本文是接续上篇《QStyle类用法总结(二)》而写。

2.widget属性

       在后文描述中,对每种widget,给出如下几项:

  • 一个表格,该表格包含了每种widget对应的style option相应的成员变量说明。
  • 状态标志表格。该表格数据来自于枚举QStyle::StateFlag中的值,这些枚举值能够设置到widget上,从而表示widget的某种状态。
  • 图形层次树(参见《QStyle类用法总结(二)》中4节“风格元素”)。
  • widget图形元素层次树的缩略图。

      元素树包含primitive、control、 complex风格元素。通过从元素树顶部到底部遍历,可以得到需要绘制元素的序列。在绘制层次树节点表示的元素时,还需考虑树节点中列出的子元素外包围矩形、子控件元素、像素度量信息。

2.1. widget通用属性

           某些状态、变量对所有widgets是通用的。通过QStyleOption::initFrom()函数来设置它们。但不是所有的元素都用这个函数来设置。该函数被widgets创建风格选项(style options);然而对某些元素来说,来自QStyleOption::initFrom()中的某些信息是不需要的。下表列出了通用状态:

widget通用成员变量如下:

  • rect:被绘制的元素的最小外包围矩形。 
  • direction:布局器方向;其是Qt::LayoutDirection枚举值。
  • palette:绘制元素时用到的调色板。
  • fontMetrics:当绘制widget中的文本时,用来计算文本的各种尺寸。

        继承自QStyleOptionComplex的复杂控件风格选项被用于风格化复杂控件中的子元素。复杂控件风格选项有subControls 和 activeSubControls变量。这两个变量可以用或(|)操作进行组合。这意味这个子控件QStyle::SubControl也是当前复杂控件的活动子控件。

2.2. 各种widget元素层次树

      widget层次树以树的形式列出构成每种widget的元素、元素占据的外包围矩形。其中处于叶子节点的以PE开头的元素通过drawPrimitive函数来绘制,处于叶子节点的以CE开头的元素通过drawControl函数绘制。关于PE、CE开头的元素的区别,请参见QStyle类用法总结(二)》文章。通过对树从顶部到底部做遍历,可以得到被绘制元素的序列。

2.2.1.Push Buttons(按钮)

      push buttons的结构树状图如下:

                                                          图1:按钮层次结构树

 各个元素在button上表示的区域位置示意图如下:

 图2:按钮各元素示意图

绘制按钮的信息一般都包含在QStyleOptionButton类对象中。QStyleOptionButton类的state成员变量包含按钮的各状态及状态何时设置,如下表描述: 

状态

状态何时

 被设置

State_Sunken

按钮被按下或菜单被按下显示时

State_On

按钮(一般指复选框、单选框)被选中

State_Raised

按钮不是扁平的且没被按下

QStyleOptionButton类还包含下表成员变量:

成员变量名含义

features

其取值是枚举

QStyleOptionButton::ButtonFeatures

中某一个,表示按钮的类型

icon

按钮图标(如果有图标)

iconSize

按钮图标大小(如果有图标)

text

按钮上的文本

2.2.2.Check 、Radio Buttons (复选、单选按钮)

结构树状图如下:

                                                                 图3 复选、单选按钮元素层次结构树

同push button一样,绘制复选、单选按钮的信息也包含在QStyleOptionButton类对象中。QStyleOptionButton类的state成员变量包含按钮的各状态及状态何时设置,如下表描述: 

状态状态何时被设置

State_sunken

按钮被按下

State_NoChange

按钮被部分选中

(仅仅对三态复选框有效)

State_On

按钮被勾选

State_Off

按钮取消勾选

其它成员变量和push button一样,参见push button描述。

2.2.3.Tabs(tab页签)

       tabs要么存在于QTabWidget中,要么作为一个单独的bar存在。如果bar不是tab widget的一部分,则它绘制自己基本部分。QTabBar对其上的tabs进行布局,所以风格不会对其tabs进行排列控制。然而,当布局tabs时,bar会向style请求PM_TabBarTabHSpace 和 PM_TabBarTabVSpace,这两个值表示相对最小tab文本或图标的额外宽度和高度。在对tab布局之前,style能进一步影响到tab的尺寸大小。

结构树状图如下:

                                                          图4 tabwidget层次结构图树

各个元素表示的区域位置示意图如下:

                                                             图5 tab bar 各元素区域位置图 

 

图5 tab bar 各元素区域位置图 

 绘制tabs的信息一般都包含在QStyleOptionTab类对象中。QStyleOptionTab类的state成员变量包含tabs的各状态及状态何时设置,如下表描述: 

状态状态何时设置

State_Sunken

tab被鼠标按下

State_Selected

该tab是当前tab

State_HasFocus

该tab有焦点且被选中

QStyleOptionTab类还包含下表成员变量:

成员变量含义

cornerWidgets

角部件枚举。指示某个窗体部件插入到tab控件的哪个角

icon

图标。

iconSize

图标大小。

position

TabPosition类型枚举值。指示在tab bar上

相对其它tab的位置

row

tab位于哪一行,类似tab的索引号

selectedPosition

SelectedPosition类型枚举。描述被选中tab的位置。一些

风格在绘制某些tab时,需要依据是否和被选中的tab相邻。

shape

QTabBar::Shape类型枚举,指示tab是圆角还是三角形及放置的方向。

text

tab上的文本。

cornerWidgets理解如下:

#include "QtWidgetsApplication1.h"
#include<QPushButton>
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

	QPushButton* pBtn = new QPushButton("fff", this);
	ui.tabWidget->setCornerWidget(pBtn, Qt::TopLeftCorner);
}

上述代码将QPushButton插入了QTabWidget控件的左上角,运行界面如下:

图6 tab bar 角落窗体部件 

QStyleOptionTabWidgetFrame来描述tab widgets的边框,下面列出了它的成员变量,它仅仅包含一些常用属性,并没有对这些属性进行状态设置。

成员变量含义

leftCornerWidgetSize

左角落中的widget部件尺寸大小

(如果存在widget部件)

rightCornerWidgetSize

右角落中的widget部件尺寸大小

(如果存在widget部件)

lineWidth

面板线宽度

midLineWith

该值当前一直为0

shape

tab bar中的tab的形状

tabBarSize

tab bar的尺寸大小

2.2.4.Scroll Bars(滚动条)

    滚动条的风格树结构如下:

图7 Scroll Bars 层次树结构

QScrollBar简单创建它自己的风格选项(style option),然后绘制CC_ScrollBar。一些styles利用PE_PanelButtonBevel标识绘制添加的页和子页。用箭头指示器绘制滚动到上一行、下一行的指示器。上面的树中并没有包含PE_PanelButtonBevel和箭头指示器,因为它们跟各自要实现的风格有关。style的PM_MaximumDragDistance标识最大距离。该距离以像素为单位,该距离表示拖动鼠标能在滚动条上移动的最大距离。

                                                   

 图8 tab bar 各元素区域位置图 

滚动条的状态能在其风格选项(style option)中设置,如下为其状态:

状态状态何时被设置

State_Horizontal

滚动条呈水平状态时

QScrollBar的风格选项 QStyleOptionSlider类,下表列出其成员变量,这些风格选项被所有

QAbstractSliders使用,下表仅仅列出和滚动条相关的成员变量:

成员名含义

maximum

滚动条最大值

minimum

滚动条最小值

notchTarget

滚动条刻痕之间占据的像素数

orientation

其是Qt::Orientation类型枚举。

指示滚动条当前是水平方向还是垂直方向。

pageStep

滚动条上翻或下翻一页时,滑块移动的值。

singleStep

滚动条上翻或下翻一行时,滑块移动的值。

sliderValue

滑块当前值。

sliderPosition

滑块手柄的位置。如果滚动条的

QAbstractSlider::tracking属性被启用,则该值和sliderValue相同;如果没启用,则手柄被用户按住鼠标一直拖动时,不会更新该值,只有用户释放鼠标时,该值才会更新。

upsideDown

该属性保存滚动条增加滑块值的方向。对所有抽象的

sliders,该属性用于替代QStyleOption::direction枚举。

2.2.5.Sliders(滑块) 

      当计算Slider的尺寸时,将从style中查询PM_SliderThickness 、PM_SliderLength。同滚动条一样,QSlider仅仅让用户在slider控件包围矩形的PM_MaximumDragDistance范围内移动手柄。当绘制自己的时候,它创建风格选项且用CC_Slider作为参数调用drawComplexControl函数。

Slider的风格树结构如下:

图8 QSlider 层次树结构

  图9 QSlider 各元素区域位置图 

         QSlider 利用 QStyleOptionSlider类对象来绘制,就像所有的l QAbstractSliders 类做的一样。下表列出能够影响QSlider 的成员变量:

成员名含义

maximum

最大值

minimum

最小值

notchTarget

刻痕之间占据的像素数

orientation

其是Qt::Orientation类型枚举。

指示当前是水平方向还是垂直方向。

pageStep

上翻或下翻一页时,滑块移动的值。

singleStep

上翻或下翻一行时,滑块移动的值。

sliderValue

滑块当前值。

sliderPosition

手柄的位置。如果

QAbstractSlider::tracking属性被启用,则该值和sliderValue相同;如果没启用,则手柄被用户按住鼠标一直拖动时,不会更新该值,只有用户释放鼠标时,该值才会更新。

upsideDown

该属性保存增加滑块值的方向。对所有抽象的

sliders,该属性用于替代QStyleOption::direction枚举。

注意:slider并没有用到反向布局(如:从右到左),它用的是upsideDown。

2.2.6.Spin Boxes

          QSpinBox 绘制自己时,它创建一个QStyleOptionSpinBox类对象且向style请求绘制CC_SpinBox。编辑域是spin box子控件,编辑域尺寸大小是被风格通过SC_SpinBoxEditField参数计算出来的。

下面是spin boxes风格元素树结构图:

 图10 QSpinBox 层次树结构

它并不要求风格用按钮面板图元去绘制指示器背景。

  图11 QSpinBox 各元素区域位置图 

QStyleOptionSpinBox类是QSpinBox风格选项类。它能为spin box 设置下面表格的状态:

状态状态何时被设置

State_Sunken

当用户用鼠标按住

CC_SpinUp 、 CC_SpinDown即上下箭头时被设置

下表列出QStyleOptionSpinBox类成员变量:

属性功能

frame

如果该值为true,则

spin box将会绘制边框。

buttonSymbols

ButtonSymbols类型枚举,

该枚举决定上下箭头按钮显示的符号

stepEnabled

StepEnabled类型枚举,

指示spin box中的哪个按钮被按下

2.2.7.Title Bar 

     title bar 复杂控件CC_TitleBar,被用来绘制QMdiArea(多文档窗体部件)内部窗体的标题栏。它典型有窗体标题、关闭按钮、最小最大化按钮、系统菜单构成。一些风格还提供显隐窗体按钮、上下文帮助按钮。CC_TitleBar没有任何子元素,风格如何绘制按钮和风格相关。风格元素结构树如下:

 图12 Title Bar 层次树结构

  图13  Title Bar 各元素区域位置图 

QStyleOptionTitleBar是 Title Bar的风格选项类,其成员变量如下:

成员含义

icon

标题栏图标

text

标题栏文本

windowFlags

Qt::WindowFlag类型枚举,

QMdiArea用该枚举来管理其下的窗体

titleBarState

QWidget::windowState类型枚举,指出了标题栏所在窗体的状态,如:是否全屏、最大化、激活等。

2.2.8.Combo Box(组合框)

    QComboBox用风格绘制以CC_ComboBox 、 CE_ComboBoxLabel表示的按钮和不可编辑框的文本。用户点击combo box弹出的列表是通过delegate来绘制的。通过style用SC_ComboBoxListBoxPopup可以combo box弹出列表的大小和位置;通过SC_ComboBoxEditField可以对combo box的编辑框进行控制。风格元素结构树如下:

  图14Combo Box层次树结构

   图15  Combo Box各元素区域位置图 

SC_ComboBoxEdit域既被QComboBox用来计算编辑域大小(size)又被风格用来计算combo box标签大小。QStyleOptionComboBox是Combo Box风格选项类,该类包含的状态及状态何时被设置,如下表描述:

状态该状态何时被设置

State_Selected

编辑框不可编辑且具有焦点

State_Sunken

SC_ComboBoxArrow

即Combo Box的箭头处于激活时

State_on

Combo Box项的列表是可见、弹出时

QStyleOptionComboBox成员变量及含义:

成员变量含义

currentIcon

当前选择项的图标

currentText

当前选择项的文本

editable

Combo Box是否可编辑

frame

combo box是否有边框

iconSize

当前项的图标大小

popupRect

combo box弹出的下拉列表框的外包围矩形

2.2.9.Group Boxes(组框)

     当计算Group Boxes尺寸大小时,QGroupBox从风格中取出PM_IndicatorWidth、PM_CheckBoxLabelSpacing、PM_IndicatorHeight三个像素度量标识。QGroupBox风格元素树如下:

  图16 group Box层次树结构

 图17 group box各元素区域位置图 

Qt并没有强制规定怎样绘制group box上的check box子控件。QStyleOptionGroupBox

group box风格选项类,该类包含的状态及状态何时被设置,如下表描述:

状态状态何时设置

State_On

group box上的check box子控件被勾选

State_Sunken

group box上的check box子控件被按下

State_Off

group box上的check box子控件取消勾选

或group box没有check box子控件

QStyleOptionComboBox成员变量及含义如下表:

成员名含义

features

QStyleOptionFrame::FrameFeatures类型枚举

描述group box边框

lineWidth

用于绘制面板的线宽度,该值一直为1

text

group box文本

textAlignment

group box文本对齐方式

textColor

group box文本颜色

2.2.10. Splitters(分裂器)

 分裂器的结构简单且并没包含任何子元素,所以这里就不给出其结构图。CE_Splitter并没用到任何子元素和度量标识。分裂器用基类QStyleOption作为其风格选项类,它能设置下述状态标记:

状态状态何时被设置

State_Horizontal

当该分裂器是水平分裂器时

QSplitter并没有调用initFrom()函数来设置自己的风格选项;它自己设置State_MouseOver and State_Disabled状态。

2.2.11. Progress Bar(进度条)

CE_ProgressBar子元素被QProgressBar使用,且是为一个被使用的子元素。Progress Bar(进度条)元素结构树如下:

  图18 Progress Bar层次树结构

  图19 Progress Bar各元素区域位置图 

QProgressBar的风格选项类是QStyleOptionProgressBar类。 Progress Bar并没有设置任何状态标志,但是其它QStyleOptionProgressBar类成员如下表所示:

成员成员含义

minimum

 Progress Bar最小值

maximum

Progress Bar最大值

progress

Progress Bar当前值

textAlignment

Progress Bar文本对齐方式

textVisible

Progress Bar文本是否被绘制

text

Progress Bar的文本

orientation

Progress Bar是水平还是垂直

invertedAppearance

Progress Bar是否被反转(例如:对水平进度条来说,进度从右到左)

bottomToTop

如果为true,对于垂直进度条,则使进度条文本逆时针旋转90°

2.2.12.Tool Buttons(工具栏按钮)

Tool buttons要么自己单独存在,要么作为工具栏的一部分存在,在这两种情况下,它们绘制的方式是一样的。QToolButton绘制的时候仅仅用到了CC_ToolButton风格子元素。如下是其风格元素结构树:

图20Tool buttons层次树结构

 图21 Tool buttons元素区域位置图 

tool buttons状态表如下:

状态状态何时被设置

State_AutoRise

tool button的autoRise属性被设置时

State_Raised

The button不是sunken

(例如:不是通过鼠标使按钮被勾选或按下)

State_Sunken

按钮通过鼠标被按下

State_On

按钮是checkable的且被勾选

QStyleOptionToolButton作为其风格选项类,其成员如下:

成员名含义

arrowType

Qt::ArrowType类型枚举。该枚举值表示了按钮箭头方向

(如果一个箭头被用在icon的位置)

features

QStyleOptionToolButton::ButtonFeature类型枚举。描述

了按钮是否有箭头、菜单、弹出延迟特性。

font

按钮文本上的字体

icon

按钮图标

iconSize

按钮图标尺寸

pos

按钮位置,一般通过

QWidget::pos()设置

text

按钮文本

toolButtonStyle

Qt::ToolButtonStyle enum类型枚举值。该值描述了

按钮是否显示图标、文本、或者图标文本都显示

2.2.13.Toolbars(工具栏)

    Qt中的Toolbars有三个元素组成:CE_ToolBar、PE_IndicatorToolBarHandle、 PE_IndicatorToolBarSeparator。QMainWindowLayout计算外包围矩形(例如:位置和toolbars的大小尺寸及它们的内容)。主窗体也利用Toolbars中项的sizeHint()函数去计算工具栏的大小尺寸。Toolbars风格元素层次结构树如下:

 图22.Toolbars元素层次结构树

虚线表示QToolBar有一个QToolBarLayout类的实例对象,QToolBarLayout类有一个QToolBarSeparators类对象。当toolbar浮动时(例如:有它自己的窗体),PE_FrameMenu元素被绘制,否则QToolBar仅仅绘制CE_ToolBar。

 图23 Toolbars元素区域位置图 

       QToolBarSaparator用QStyleOption作为它的风格选项,当toolbar是水平时,QToolBarSaparator设置State_Horizontal标志,否则,它使用initFrom()函数来初始化。

QToolBar风格选项类为QStyleOptionToolBar类,当工具栏呈水平放置时,其唯一的状态标志(属于通用状态标志)被设置为State_Horizontal。QStyleOptionToolBar类成员及含义如下表:

成员含义

features

表示工具栏是否可移动。其是

QStyleOptionToolBar::ToolBarFeatures枚举值类型。要么是可移动的,要么是不可移动。

lineWidth

tool bar边框线宽度

midLineWidth

该变量当前未被使用,一直为0

positionOfLine

位于the toolbar区域之内的the toolbar线的位置

positionWithinLine

位于the toolbar线内的the toolbar位置

toolBarArea

the toolbar能够活动的区域

2.2.14. Menus(菜单)

       当QMenus收到绘制事件时,它计算每个菜单项且用CE_MenuItem各自绘制菜单项。菜单项并没和它的标签文本(内容)通过某个元素隔开,所以全部绘制工作都在CE_MenuItem实现。菜单项通过PE_FrameMenu绘制菜单边框。如果风格支持滚动,菜单项也会绘制CE_MenuScroller。如果菜单很大(一般是菜单项很多导致的),导致菜单的外包围矩形很大,则CE_MenuTearOff会被绘制。在下面的风格结构树中,我们也包含QMenu,因为QMenu也计做了一些风格相关的工作。当菜单被显示或调整大小时,size hint作用于菜单项的外包围矩形的计算。

  图24.Menus元素层次结构树

CE_MenuScroller 和CE_MenuTearOff 被QCommonStyle处理且一般不会显示除了菜单太大而不能适应屏幕(即在屏幕下显示全部的菜单项)。仅仅只有弹出菜单才会绘制PE_FrameMenu。

如果风格支持,QMenu将会基于它的actions并且调用CE_MenuItem和CE_MenuScroller来计算外包围矩形。

 通常用PE_IndicatorCheckBox(代替用PE_IndicatorMenuCheckMark)和PE_IndicatorRadioButton来绘制checkable类型菜单项;在上面的风格树中并没有包含PE_IndicatorCheckBox和PE_IndicatorRadioButton,原因是这是可选的,且不同风格差别很大。

  图25 menus元素区域位置图 

菜单项的风格选项类是QStyleOptionMenuItem类,状态及状态何时设置,如下面所示:

风格

风格何时

被设置

State_Selected

鼠标在action上面且该

action不是一个分隔器

State_Sunken

鼠标在菜单项上按下

State_DownArrow

如果菜单项目是一个菜单滚动器且它向下滚动菜单

成员及含义如下表:

成员含义

checkType

CheckType类型枚举值。

不可勾选、互斥、非互斥 三个值中的某一个

checked

如果菜单项被勾选,则该值为true

font

菜单项文本的字体

icon

菜单项的图标

maxIconWidth

菜单项图标最大允许宽度

menuHasChecableItem

菜单中至少有一个菜单项是

checkable的,则该值为true

menuItemType

菜单项类型,其是

MenuItemType枚举中的某一个值

menuRect

菜单项所在菜单的外包围矩形

tabWidth

菜单项文本和该菜单项快捷热键的距离值

text

菜单项的文本

风格选项有关CE_MenuTearOff 和CE_MenuScroller中也用到了QStyleOptionMenuItem。它们在QStyleOption中的initFrom()函数中仅仅设置了menuRect成员变量。

2.2.15. Menu Bar(菜单栏)

QMenuBar用style去绘制每个菜单栏中的菜单及菜单栏中的空白区域。菜单栏元素结构树如下:

   图26.Menu bar 元素层次结构树

 面板和空区域被绘制在菜单项的后面。QMenuBarQPainter会向style发送绘制菜单项需要裁剪的矩形,所以不需要在菜单项上过度关心。当计算菜单项的外包围矩形时,QMenuBar的像素度量会被用到。

   图27 menu bar元素区域位置图 

QStyleOptionMenuItem类对象被用于绘制菜单栏中的菜单项。其成员变量如下表:

成员含义

menuRect

该菜单项才该菜单栏中占据的矩形区域

text

菜单项中的文本
icon菜单项中的图标

QStyleOptionMenuItem也被用来绘制CE_EmptyMenuBarArea。QStyleOptionFrame被用来绘制面板边框。lineWidth被设置为PM_MenuBarPanelWidth,midLineWidth当前一直被设置为0。

2.2.16. Item View Headers(项、视图、头)

     style绘制Qt项视图中的表头,项视图保持各自的尺寸。代理(delegates)会用style绘制各种和项相关的装饰和边框。例如:绘制E_FrameFocusRect 和PE_IndicatorViewItemCheck

 图28.Item View Headers元素层次结构树

下图显示了QTableWidget各种外包围矩形:

 图29.Headers各种外包围矩形

QHeaderView 用CT_HeaderSection, PM_HeaderMargin、PM_HeaderGripMargin用于大小尺寸及碰撞测试计算。PM_HeaderMarkSize当前并没有被Qt使用。QTableView绘制左上角(如:垂直表头和水平表头相交的区域)按钮当作为CE_Header来绘制。

视图表头风格选项类是QStyleOptionHeader,其成员变量如下表所示:

成员含义

icon

头视图的图标

iconAlignment

头视图图标对齐方式

orientation

Qt::Orientation类型枚举值。指示头视图方向:水平时,在数据视图上面,垂直时,在数据视图左边。

position

QStyleOptionHeader::SectionPosition类型枚举。该值表示头区域(列)相对其它区域(列)位置。

section

保持被绘制的区域(列)

selectedPosition

QStyleOptionHeader::SelectedPosition枚举值。该值表示被选中区域(列)相对正在绘制区域(列)位置。

sortIndicator

QStyleOptionHeader::SortIndicator类型枚举值。该值表示

排序区域(列)的排序指示器方向。

text

当前绘制区域(列)的文本。

textAlignment

在头区域(列)的文本对齐方式。

2.2.17. Tree Branch Indicators(树分支指示器) 

风格通过PE_IndicatorBranch绘制树分支指示器。树分支指示器描述了树中各个子节点之间关系。通用QStyleOption风格类被发送给style用来绘制元素,QStyleOption风格类中的状态成员用来描述各种不同分支类型。因为没有特定的风格选项类型,下表仅仅列出各种状态:

状态状态何时被设置

State_Sibling

树中的节点有兄弟节点

State_Item

分支指示器有一个项

State_Children

分支指示器有孩子节点

State_Open

分支指示器是一个打开的子树

tree view ( tree widget)用风格绘制树分支(节点)。下图每种状态用指定颜色矩形来标识:

 图30.树分支状态图

2.2.18. Tool Boxes(工具箱)

QToolBox是一个容器,该容器保持多个widget,其中的每个widget都会有一个tab进行管理,每次在同一时刻,只能展示其中的一个tab页。工具箱通过QVBoxLayout布局器来布局其中展示的控件。风格层次树如下:

 图31.QToolBox元素层次结构树

 图32 QToolBox元素区域位置图 

tool boxes风格选项类是QStyleOptionToolBox,它包含文本和工具箱内容图标。被QToolBox唯一设置的状态是State_Sunken,当用户用鼠标按下一个tab时,该状态会被设置,余下的成员变量如下表:

成员含义

icon

toolbox的tab页图标

text

toolbox的tab页文本

2.2.19.Size Grip(尺寸调节手柄)

size grip通过CT_SizeGrip来计算其大小尺寸。像素度量参数PM_SizeGripSize当前没有被Qt使用。其树层次结构图如下:

  图33.size grip元素层次结构树

 图34.size grip元素区域位置图 

上图显示了QMainWindow右下角的size grip控件。size grip风格选项类是QStyleOptionSizeGrip类,该类有一个成员变量如下表:

成员含义

corner

Qt::Corner类型枚举。描述size grip控件

位于窗体部件的哪一个角落

2.2.20.Rubber Band(橡皮筋)

QRubberBand类层次树如下:

 图35.Rubber Band元素层次结构树

QMdiArea内的一个窗体通过Rubber Band被移动如下图所示:

 图36.Rubber Band元素区域位置图 

 rubber bands风格选项类是QStyleOptionRubberBand类,它的成员变量及含义如下表:

成员名含义

opaque

该值为true时,则

rubber band以不透明风格来绘制

shape

QRubberBand::Shape枚举。保持橡皮筋的形状,

如:矩形还是直线

2.2.21.Dock Widgets(停靠窗体部件)

          当dock widget布局它内容时,它向style请求PM_DockWidgetSeparatorExtent、 PM_DockWidgetTitleBarButtonMargin、PM_DockWidgetFrameWidth、 PM_DockWidgetTitleMargin。通过SE_DockWidgetCloseButton 、SE_DockWidgetFloatButton计算浮动和关闭按钮的外包围矩形。其层次结构树如下:

  图37.Dock Widgets层次结构树

虚线表示发送者持有箭头指向的接收者的一个实例(例如:它不是一个被绘制的风格元素)。当dock widget 从主窗体分离时(例如:它是一个顶层窗体),dock widget仅仅只绘制PE_frameDockWidget;如果dock widget被停靠,则它绘制停靠指示器通过调整手柄。

 图38.Dock Widgets元素区域位置

dock widget风格选项类为:QStyleOptionDockWidget,其成员变量及含义如下表:

成员名含义

closeable

布尔值。保存

Dock Widgets是否能够被关闭属性

floatable

布尔值。保存Dock Widgets是否能浮动(即从主窗体分离)

movable

布尔值。保存Dock Widgets是否能移动

title

Dock Widgets标题

 Dock Widgets按钮风格选项类采用QStyleOptionButton类,该类说明参见Tool Buttons小节描述。dock widget的大小调节手柄风格选项采用通常的QStyleOption类。

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: qstyleoptionbutton是Qt框架中用于描述按钮外观的结构体。它包含了按钮的各种属性,如按钮的状态、位置、文本、图标等。在Qt中,可以使用QStyle的各种函数来设置或修改qstyleoptionbutton的属性,以实现按钮的定制化外观。 ### 回答2: QStyleOptionButton是Qt中的一个,用于描述一个按钮的相关属性和状态信息。 QStyleOptionButton是QStyleOption的子,是用于描述按钮的样式选项的。它可以用于自定义按钮的绘制,通过设置其中的属性,可以改变按钮的外观和行为。 QStyleOptionButton中的一些重要属性包括: 1. state:按钮的状态,可以是普通状态、按下状态、禁用状态等等。 2. rect:按钮的矩形区域,用于确定按钮在父容器中的位置和大小。 3. text:按钮显示的文本内容。 4. state:按钮的状态,可以通过设置不同状态来改变按钮的外观和交互行为。 5. icon:按钮显示的图标。 根据实际需要,还可以设置其他属性,如:是否绘制边框、背景颜色、文本对齐方式、自动重复等。 使用QStyleOptionButton可以实现自定义按钮的绘制,例如可以绘制具有特定风格的按钮、绘制带有图标的按钮、实现按钮的按下和释放等交互效果。 总之,QStyleOptionButton是Qt中描述按钮属性和状态的,通过设置其中的属性可以改变按钮的外观和行为,并且可以用于自定义按钮的绘制和交互效果的实现。 ### 回答3: QStyleOptionButton是Qt中的一个,用于描述并存储按钮的样式选项。 该的主要成员变量有: 1. state:按钮的状态,如是否被点击、是否可用等。 2. stateSet:按钮的状态集合,用于表示按钮支持的不同状态的组合。 3. features:按钮的特征,如是否支持自动排他性。 4. text:按钮上显示的文本内容。 5. icon:按钮上显示的图标。 6. iconSize:按钮上图标的尺寸。 7. fontMetrics:按钮上文本的字体度量。 通过使用QStyleOptionButton,我们可以对按钮的样式进行自定义,包括按钮的背景、边框、文本和图标等。我们可以通过设置不同的状态和特征来改变按钮的外观和行为。 对于自定义按钮样式,可以继承QStyleOptionButton,然后重写其paint()函数来绘制自定义的按钮样式。在paint()函数中,可以使用QStyle绘制引擎提供的函数来绘制按钮的各个部分,如绘制按钮的背景、边框、文本和图标等。 总之,QStyleOptionButton是一个用于描述并存储按钮样式选项的,通过使用该,我们可以对按钮的样式进行自定义,实现个性化的按钮外观和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值