一、QWidget 类,总体的属性归类,如下图所示
1、大小控制
① geometry
geometry属性保存的是,组件相对于其父级对象的位置和大小,Qt实际上是以一个长方形来表示组件的位置和大小的,包括当前组件,左上角的坐标位置(x,y)、以及它的宽度和高度
相关函数
- 使用
geometry()
查询该属性的值 - 使用
setGeometry(int x, int y, int w, int h)
或setGeometry(QRect )
设置该属性的值(注:QRect类是Qt的一个类,该类提供了一组函数,它们返回各种矩形坐标,并支持对它们进行操作。QRect还提供了相对于各种坐标移动矩形的函数。详细介绍可参考官方文档“QRect Class | Qt Core 5.15.5”和博客“QRect类参考”) - 其他与该属性关联的函数有:
frameGeometry()
、rect()
、move()
、resize()
、moveEvent()
、resizeEvent()
、minimumSize()
和maximumSize()
②sizePolicy
在理解sizePolicy前,先介绍两个Qt内置的部件属性
sizeHint
和minimumSizeHint
- sizeHint:是布局管理器中部件的缺省大小,如果部件不在布局管理中,那么这就是无效的值;该值是Qt中对每个部件大小的建议值,也是缺省值,不能修改。
- minimumSizeHint:是Qt推荐的部件最小尺寸,如果部件不在布局管理中,那么这就是无效的值,在布局管理器中的话minimumSizeHint 就是部件的缺省最小值,除非当前部件的大小策略为QSizePolicy.Ignore或者minimumSize被设置,否则布局管理器不会调整一个部件的大小到,比minimumSizeHint 返回的值,更小,也就是说minimumSizeHint是底线了。
sizePolicy属性用于说明部件在布局管理中的缩放方式,当部件没有在布局管理器中时,该设置无效。
sizePolicy由四个值组成,分别是水平缩放策略、垂直缩放策略、水平伸缩因子、垂直伸缩因子。
- 水平缩放策略、垂直缩放策略的值都是枚举类型Policy,该枚举类型的取值及含义如下:
- 水平伸缩因子、垂直伸缩因子,相关值内的常量由枚举类型 QSizePolicy.PolicyFlag定义,对应取值及含义如下:
③mimimumSize
mimimumSize表示部件能被缩小到的最小尺寸,单位为像素,部件在缩小到该尺寸后,就不能再进一步缩小了。
如果部件处在某一布局管理器中,且布局管理器也设置了最小尺寸,则部件本身的最小尺寸,应该是以部件的mimimumSize为准,布局管理器设置的不起作用
相关函数
- 部件的最小尺寸可以调用方法
setMinimumSize(QSize)
或setMinimumSize(int minw, int minh)
来设置 - 使用
minimumSize()
返回当前值,如果值被设置为QSize(0,0)则表示最小尺寸无效
④maximumSize
maximumSize表示部件能被放大到的最大尺寸,放大到该尺寸后不能再进一步放大了。部件的缺省最大值为QSize(16777215,16777215)
相关函数
- 部件的最小尺寸可以调用方法
setMaximumSize(QSize)
或setMaximumSize(int maxw, int maxh)
来设置 - 使用maximumSize()返回当前值,部件的最大值不能超过系统设置部件的最大值常量QWIDGETSIZE_MAX
⑤sizeIncrement
sizeIncrement表示组件调整大小时,每次变化的增量大小的基数(单位:像素),实际调整大小计算公式如下:
width = baseSize().width() i * sizeIncrement().width()
height = baseSize().height() j * sizeIncrement().height()
其中i,j为非负整数。
相关函数
- 可以调用
setSizeIncrement(QSize)
、setSizeIncrement(int w, int h)
设置sizeIncrement - 可以调用
sizeIncrement()
获取当前sizeIncrement的值
注意:所有组件都可以设置sizeIncrement,但只有窗口对象会生效。
⑥baseSize
组件的 baseSize是组件的基础大小(单位:像素)
如果组件设定了sizeIncrement,该属性用于在调整组件尺寸时计算组件应该调整到的合适值,但这个属性缺省值是QSize(0,0)
相关函数
- 使用
setBaseSize(int basew, int baseh)
设置该值 - 使用
baseSize()
方法查询该值
2、界面响应事件控制
界面响应事件控制属性是指针对组件对键盘、鼠标事件以及平板触控笔的事件响应的控制
①windowModality
windowModality属性只对窗口对象有效,保存的是哪些类型的窗口被模式窗口阻塞。
模式窗口防止其他窗口中的部件获取输入。
此属性的值控制对应窗口可见时阻塞哪些类型的窗口获取输入。
在模式窗口可见时更改此属性无效,必须先调用hide()隐藏模式窗口,然后再调用show()显示模式窗口。
相关取值及含义如下:
②enabled
enabled属性用于表示部件是否可用,一个可用的部件可以接收和处理鼠标和键盘事件,当部件不可用时则无法接收和处理鼠标和键盘事件
有些部件在被禁用时会以不同的方式显示自己。例如,按钮可能会将其标签灰显。
如果部件需要知道它何时被启用或禁用,则可以使用
changeEvent()
方法来捕获事件,事件类型设置为QEvent.EnabledChange
禁用一个部件时,会隐式的禁用其所有子部件;
启用部件时,将顺序启用所有子部件,除非子部件已被显式禁用。
当父部件保持禁用状态时,不可能显式启用不是窗口的子部件。
enabled属性缺省值为True,
可以 通过
isEnabled()
访问部件的启用状态,通过
setEnabled(bool)
设置部件的启用状态。
③cursor
部件的cursor属性保存该部件的鼠标光标形状。
当鼠标位于该部件上时就会呈现该属性设置的光标形状,对应类型为枚举类型Qt.CursorShape,可取值的范围及含义如下:
注意:
1、上述列表中,最后4个取值在Designer中没有,这是因为这4个取值不是在属性编辑中静态设置的,而是在运行时调整的;
2、上述列表中英文和译文都列出的是取值解释,但是怕翻译得不够准确,所以列出英文进行对照。
④mouseTracking
mouseTracking属性用于保存是否启用鼠标跟踪,缺省情况是不启用的。
没启用的情况下,对应部件只接收在鼠标移动同时至少一个鼠标按键按下时的鼠标移动事件;
启用鼠标跟踪的情况下,任何鼠标移动事件部件都会接收。
相关函数
hasMouseTracking()
用于返回当前是否启用鼠标跟踪setMouseTracking(bool enable)
用于设置是否启用鼠标跟踪- 与鼠标跟踪相关的函数主要是
mouseMoveEvent()
⑤tabletTracking
tabletTracking属性保存是否启用部件的平板跟踪,缺省是不起用的。
没有启用平板跟踪的情况下,部件仅接收触控笔与平板接触或至少一个触控笔按键按下时的触控笔移动事件。
如果部件启用了平板跟踪功能,部件能接收触控笔靠近但未真正接触平板时的触控笔移动事件,这可以用于监视操作位置以及部件的辅助操作功能(如旋转和倾斜),并为图形界面提供这些操作的信息接口。
相关函数
hasTabletTracking()
用于返回当前是否启用平板跟踪setTabletTracking(bool enable)
用于设置是否启用平板跟踪- 与平板跟踪相关的函数主要是
tabletEvent()
⑥focusPolicy
在Qt Designer中可以设置部件的焦点策略
部件的焦点策略属性取值范围由枚举类型Qt.FocusPolicy来定义,该枚举类型及其含义如下表所示:
相关函数
- 通过
focusPolicy()
可以获取当前部件的焦点策略 - 通过
setFocusPolicy(Qt.FocusPolicy policy)
设置焦点策略
⑦contextMenuPolicy
contextMenuPolicy为部件的快捷菜单策略,快捷菜单通过在部件上点击鼠标右键触发。
快捷菜单策略通过枚举类型Qt.ContextMenuPolicy来定义,对应枚举类型取值及含义如下
相关函数
- 通过
contextMenuPolicy()
可以获取当前部件的快捷菜单策略; - 通过
setContextMenuPolicy(Qt.ContextMenuPolicy policy)
可以设置当前部件的快捷菜单策略
⑧acceptDrops
acceptDrops属性表示当前部件是否接受鼠标拖放事件,鼠标拖放应该是与鼠标拖拽结合在一起的,
如果部件接受拖放,则在鼠标拖放时,拖放事件会发送给鼠标当前光标下接受拖放的第一个部件。
如果一个部件设置了acceptDrops属性为True,则是通知系统,该部件是可以接受鼠标拖放事件的。
注意:
1、若当前部件是一个桌面(windowType() == Qt.Desktop), 并且此时有另一应用,正在使用这个桌面,则这个属性设置可能失效;
2、不要在拖、放事件的处理方法中修改该属性。
相关函数
- 使用
acceptDrops()
获取当前部件是否支持拖放; - 使用
setAcceptDrops(bool on)
设置当前部件是否支持拖放。
⑨inputMethodHints
inputMethodHints属性只对输入部件有效。
输入法使用它来检索有关输入法应如何操作的提示;
例如,如果设置了只允许输入数字的标志,则输入法可能会更改其可视组件,以反映只能输入数字。
相关取值及含义如下:
输入提示是多种值的组合,多个值之间通过或操作组合。
如果几个独占标志被放在一起,则生成的字符集将由指定集的并集组成。例如,指定ImhNumbersOnly 和ImhUppercaseOnly 将产生一个由数字和大写字母组成的集合。
该属性缺省值为Qt.ImhNone,
可通过
inputMethodHints()
和setInputMethodHints(Qt.InputMethodHints )
进行访问和修改。注意:
1、 修改时最好先取到当前设置,再与要修改值进行或后再设置;
2、 该属性仅作为一个输入提示,并不是所有输入法都会支持,部分输入法不支持。
该属性实际上并没有多大用途,一是因为输入法不一定支持,二是因为程序不应该严格限制输入数据。
3、信息管理
信息管理属性都与帮助、提示、窗口标题、残障人士辅助信息、语言国际化支持等方面,都与应用要呈现给用户的文本信息有关
①windowTitle
windowTitle是窗口的标题,仅对window和dialog类型的对象生效。
可以通过
windowTitle()
进行读取
setWindowTitle(const QString &)
进行设置
②toolTip
toolTip属性用于设置部件的toolTip提示信息,
toolTip提示信息,就是当鼠标放到控件上时,会浮动出一个小框显示提示信息。
默认情况下,仅显示活动窗口子部件的toolTip,可以通过在窗口对象设置
Qt.WA_AlwaysShowToolTips
属性来改变,但是不能在需要显示tooTip的部件对象中设置。
如果要控制tooTip显示的行为(如控制显示位置),可以重写部件的
event()
方法捕获事件类型为QEvent.ToolTip
的事件。
缺省值为空,可以通过
toolTip()
来读取toolTip
setToolTip( QString )
来设置toolTip
③toolTipDuration
toolTipDuration 属性控制toolTip显示的时长,单位是毫秒,如果设置为-1,则显示时长根据toolTip内容的长度来计算。
toolTipDuration 缺省值为-1,可以通过
toolTipDuration ()
来读取toolTipDuration
settoolTipDuration ( int msec)
来设置toolTipDuration
④statusTip
statusTip属性保存statusTip提示信息,如果窗口无状态栏则不显示
statusTip属性 缺省值为空字符串,可以通过
statusTip()
来读取statusTip
setstatusTip ( QString )
来读取和设置statusTip
⑤whatsThis
whatsThis属性保存部件的帮助信息。
whatsThis的帮助信息一般在部件获得焦点后,按
Shift F1
弹出显示,如果这个快捷键被别的功能占用,则whatsThis的帮助信息可能无法展示。
有些对话窗提供一个带问号的按钮可以点击显示whatsThis的帮助信息。
whatsThis属性 缺省值为空字符串,可以通过
whatsThis()
来读取whatsThis
setwhatsThis ( QString )
来设置whatsThis
⑥accessibleName
accessibleName属性是用于残疾人辅助阅读的,这个属性也有国际化属性
accessibleName是辅助阅读中显示的部件名称,对于大多数小部件,是无需设置此属性的,因为Qt会调用部件相关属性显示,如按钮将显示按钮的文本,但当小部件不提供任何文本时,设置此属性很重要。
例如,只包含图标的按钮需要将此属性设置为与屏幕阅读器一起使用。
此属性默认为空,通过
accessibleName()
可以对该属性进行查询
setAccessibleName(QString )
可以对该属性进行设置
⑦accessibleDescription
accessibleDescription属性是用于残疾人辅助阅读的,这个属性也有国际化属性
此属性保存辅助技术所看到的部件描述,是对accessiblename的补充说明
此属性默认为空,通过
accessibleDescription ()
可以对该属性进行查询。
setAccessibleDescription (QString )
可以对该属性进行设置
⑧locale
locale属性用于设置语言环境,包括语言和国家。
如果一个部件没有设置语言环境,则使用父对象的语言环境或者默认语言环境(如果部件是顶层部件)。
相关函数
- 可以使用
locale()
获取部件的语言环境 - 可以通过
setLocale(QLocale )
设置部件的语言环境 - 可以通过
unsetLocale()
取消部件的语言环境设置。
补充扩展:每个显示的文本信息包括Label的文本、按钮的文本等、以及输入控件的输入内容、帮助信息的文本等,都可以在部件属性编辑中设置国际化子属性,例如:
它们都有三个子属性,分别是translatable、 disambiguation和comment,这三个属性的含义分别如下:
1、translatable可译:表示对应属性文字不用翻译成其他语言;
2、disambiguation消除歧义(澄清):这是当有多个需要翻译文字的对象有相同文字时,避免出现歧义而额外添加的消除歧义字符,缺省为空,一般歧义字符设置为其所在对象对应类的名字,此消歧参数是为转换器指定注释的首选方法。
3、comment注释:添加注释用于辅助对属性文字的翻译,注释将在翻译属性文字时传递到翻译的函数tr()中并与需要翻译对象关联,这样会有助于理解翻译的文字含义。
这部分的内容,无需写国际化的程序的话,就不需要关注;需要写国际化的程序时,可能在这基础上,还需要另外深入研究一下。
⑨windowFilePath
windowFilePath属性仅对窗口对象有效,用于关联一个窗口和对应的文件及路径。
当窗口没有设置标题属性的情况下,则窗口标题展示的是windowFilePath对应的文件名的信息(路径信息不展示),
如果二者都有设置,则优先使用窗口标题属性的设置作为标题。
该属性缺省为空,可以通过
windowFilePath()
来访问windowFilePath属性
setWindowFilePath(QString )
来设置windowFilePath属性
这个功能在窗口打开文件进行操作时可以用来标记打开的文件。
注意:该属性具有国际化设置的子属性
4、外观控制
①palette(调色板)
调色板palette用于管理控件的一组外观显示设置组成,组中每条记录包括颜色角色、颜色组、具体颜色,对应PyQt中的QPalette类。QPalette类相当于对话框或控件的调色板,管理着控件和窗体的所有颜色
- color role颜色角色
上图中的color role颜色角色,是指界面中,颜色对应的部分界面外观组合,又称为颜色职责,即对应界面中哪些部分使用指定某个颜色。
通过枚举变量QPalette.ColorRole来定义,取值及其含义如下:
颜色角色 | 值 | 对应的外观组合 |
---|---|---|
QPalette.Window | 10 | 一个常规的背景颜色 |
QPalette.Background | Window | 这个值是废弃的,使用window代替,值也是10 |
QPalette.WindowText | 0 | 通用的前景颜色 |
QPalette.Foreground | WindowText | 这个值是废弃的,使用windowText代替,值是0 |
QPalette.Base | 9 | 常使用来作为整个部件的text背景颜色,但是也能被用来为其他地方绘制,像combobox的上下清单的背景和工具栏句柄,它通常是白色或者其他亮的颜色 |
QPalette.AlternateBase | 16 | 通常被用来作为具有交替行颜色的视图的可选背景色 |
QPalette.ToolTipBase | 18 | 被用来作为QToolTip和QWhatsThis的背景颜色,ToolTip使用QPalette不活跃的颜色组,因为ToolTip不是活跃的窗口 |
QPalette.ToolTipText | 19 | 被用来作为QToolTip和QWhatsThis的背景颜色,ToolTip使用QPalette不活跃的颜色组,因为ToolTip不是活跃的窗口 |
QPalette.Text | 6 | 与Base一起使用的前景色,通常情况下和windowText效果相同,在与Base一起使用的情况下,它的颜色设置必须与Window和Base对应的颜色有良好的对比 |
QPalette.Button | 1 | button背景颜色,此背景可能与Window指定的背景色不同,因为某些样式要求按钮使用不同的背景色 |
QPalette.ButtonText | 8 | 使用按钮文本颜色作为前景颜色 |
QPalette.BrightText | 7 | 一种与WindowText指定的前景色有很大不同的文本/前景色,并且与诸如阴暗的颜色能形成很好的对比,通常用于使用Text或WindowText指定前景色对比度差的地方来绘制文本,例如按下的按钮上。请注意,该颜色可用于除文字以外的其他用途:一般文本颜色通常用于文本,但对于行,图标等使用文本颜色校色是很罕见的 |
- ColorGroup颜色组
颜色组是指对应同一外观组合在
激活状态(active,指获得焦点 ) 、
非激活状态(inactive,未获得焦点但可以获得焦点的状态 )、
失效状态(disable,不能获得焦点 )时的对应颜色。
上图中只有active 激活状态的,其他两种状态颜色是电脑根据规则计算出来的,如果要查看或者设置颜色组的三种状态,在上图中选择“show details”(显示细节)即可,如下图
②font(字体设置)
注意:如果
Qt Style Sheets
与setFont()
在同一个部件上使用,则如果设置冲突,样式表将优先
在Qt Designer中部件的Font属性中可以设置对应部件的字体属性,包括字体的
- 字体簇(Family)
- 大小(Size)
- 是否粗体(Bold)
- 是否斜体(Italic)
- 是否带下划线(Underline)
- 是否带删除线(Strikeout)
- 是否调整字符间距(Kerning)
调整字形间距,且基本上是英文字符形状的间距,因为英文字符形状都是不规则的,有宽有窄,有的圆乎乎,有的棱角分明,就会导致排列在一起的时候疏密不一致,而kerning可以有效利用字符形状间的间隙,使字形之间的空间更加相似
- 是否反走样抗锯齿(Antialiasing)
请参考《QT QPainter::antialiasing QPainter::textAntialiasing 反走样、抗锯齿探究》
③windowIcon
注意:如果theme设置了,则优先使用theme去加载图标,只有找不到的情况下才使用Normal off…Selected On
这8种状态的图标
windowIcon是部件对象的属性,只对窗口对象有效,其他派生对象如pushButtong对象无效。
有如下子属性设置
- Theme(图标主题)
- Normal off…Selected On
上图中所示的Normal off到Selected On这8个子属性应该是QIcon的两个属性的组合,
分别指定部件在这8种状态下使用哪个图标。这两个属性分别是QIcon的如下两个枚举类型成员
Ⅰ、enum Mode { Normal, Disabled, Active, Selected },这四个值分别表示:
1)QIcon.Normal:部件为使能状态,但未激活,没有获得焦点。
2)QIcon.Disabled:部件为禁用状态。
3)QIcon.Active:部件为激活状态,获得了焦点(如鼠标悬停在上面,或Tab键移动焦点)。
4)QIcon.Selected:部件被选中。
当部件的状态切换时,默认的图标绘制函数会自动根据部件的状态重绘图标
Ⅱ、enum State { Off, On }
某些部件还有所谓的开关状态(比如一个按钮可以有按下和弹起两个状态),
则还可以根据 state 参数来选择不同的图像。
④windowOpacity
这个属性仅对window对象生效。
windowOpacity为浮点数,表示透明度,为1完全不透明,为0完全透明,缺省是1。
可以通过
windowOpacity()
、setWindowOpacity(qreal level)
进行读取和设置
⑤layoutDirection
layoutDirection属性保存的是部件的布局方向,有三个取值
在部件上设置布局方向时,它将传播到部件的子级,
但不会传播到作为窗口的子级,
也不会传播到已显式调用
setLayoutDirection()
的子级。此外,为父级调用
setLayoutDirection()
之后添加的子部件不会继承父级的布局方向。
注意:在Qt Designer中修改了一个部件的布局方向时,所有未单独设置布局方向的子部件的布局方向全部跟随调整,单独设置了不跟随调整
⑥autoFillBackground
autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景。使用的颜色由部件调色板中的QPalette.window 颜色角色定义。
此外,除非设置了
WA_OpaquePaintEvent
或WA_NoSystemBackground
属性,否则窗口始终使用QPalette.Window
对应颜色填充。
如果部件的父级对象背景具有静态渐变,则无法关闭此属性(即不能设置为False)。
警告:在使用Qt Style Sheets时请小心使用此属性。当部件具有具有有效背景或边框图像的样式表时,此属性将自动禁用。
默认情况下,此属性为False。
可以使用
autoFillBackground()
和setAutoFillBackground(bool enabled)
对该属性进行读取和设置
⑦styleSheet(样式表)
这部分具体怎么实现,可以看一下白月黑羽的教程,他讲的很详细,还有视频教程,很不错“显示样式 | 白月黑羽 (byhy.net)”