本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找。
声明:
1、如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记;
2、本文为老猿Python学习研究精心整理而成,禁止转载。
内容提纲
引言
概述
QWidget属性列表
Qt Designer组件属性归类
组件大小及位置控制的属性
界面响应事件控制属性
信息管理属性
外观控制属性
后记
一、引言
在Qt Designer中,提供了八大类可视化组件(也称为组件或控件,下同),分别为布局组件(Layouts)、分隔组件(Spacers)、按钮组件(Buttons)、表项视图(item views)、表项组件(item widgets)、容器(Containers)、输入组件(input widgets)、显示组件(Display widgets),在Qt Designer的应用界面设计时,可以将各种功能的组件拖拽到窗口上进行应用的可视化界面设计,而每种组件又可以指定不同的属性。
组件的属性设置在Qt Designer中的组件属性编辑部分进行设置的,如下图右边部分窗口:
可以看到,将相关属性栏目节点收敛后,最顶层的节点为组件对应的类及所有父类,并且从上往下排列的节点,基本上按照父类在上,子类在下的方式排列,很好的体现了类的继承关系以及相关属性是哪个类提供的。上图中类的属性展开后截图如下:
在Qt Designer中对八大类组件逐一浏览后,从组件的设置属性界面我们可以看到,除了布局组件(Layouts)和分隔组件(Spacers),其他六大类组件都有共同的父类QWidget以及QObject,其中QObject 只有简单的属性objectName,而QWidget则有三十一项的设置属性,并且占了所有部件所有属性的大部分,因此组件属性的设置很大一部分就是对组件与QWidget类相关属性的设置。因此本节将详细介绍Qt Designer与QWidget类相关的组件属性的含义。
二、 概述
不同的组件类型,其与QWidget类相关属性在属性设置界面展示的属性有所区别,这是因为虽然所有属性都来自QWidget定义的属性,但不同组件功能方面的差异导致有些属性不需要使用(如组件的标题对按钮就没有作用),因此属性设置界面把与具体组件无关的QWidget属性屏蔽了,但窗口类应该是包含了所有其他组件都会引用的QWidget属性,因此我们接下来的介绍就是以新建窗口时选择Widget模板新建的窗口对应属性来介绍。
Qt Designer新建窗口时的操作界面如下:
窗口新建完成后对应的属性编辑界面截图如下:
注意:
Qt Designer中可以设置的QWidget属性比QWidget类的属性要少,只是QWidget类属性的一个子集,下表是QWidget所有属性(其中标黄色的是属性编辑界面没有的属性)。
老猿没有仔细研究这些未出现在编辑界面的属性,只是大概看了下,发现没有出现的部分属性有几种情况:
- 相关属性包含在另外的属性中,如x、y、height、width属性包含在geometry 属性中,maximumWidth、maximumHeight 包含在maximumSize属性中等;
- 部分属性是只读的,是Qt系统设置的,不能设置,如sizeHint和minimumSizeHint等;
- 有些属性是通过其他属性计算得出的,如Rect可以通过geometry 的height、width属性得出;
- 有些属性是运行时的数据,无需设置,如focus、size、pos、visible、minimized 、maximized 等。
因为没有研究不在属性设置界面的所有属性,只是针对其中简单的看了看,并没有将所有非界面属性都仔细研究,因此除了上述几种情况是否还有其他情况不能确认。
三、 组件大小及位置控制的属性
组件大小控制的属性有geometry 、baseSize、sizeIncrement、minimumSize、maximumSize和sizePolicy,用于控制组件的初始大小以及动态调整大小的控制。属性配置界面的geometry 定义了组件的初始大小,其他属性都与组件大小调整时控制组件的大小相关。
3.1、geometry属性
geometry属性保存组件相对于其父级对象的位置和大小,Qt实际上是以一个长方形来表示组件的位置和大小的,包括左上角的坐标位置、长度和宽带。
当组件的geometry调整时,组件如果可见将立即接收moveEvent事件和/或调整大小事件resizeEvent事件。如果件当前不可见,则保证它在显示之前接收适当的事件。如果组件的geometry被要求调整到超出minimumSize()和maximumSize()定义的范围之外时,则Qt会强制组件的大小必须在定义的范围内。
可以使用geometry()查询该属性的值,使用setGeometry(int x, int y, int w, int h)或setGeometry(QRect )设置该属性的值。与此属性关联的函数有: frameGeometry()、rect()、move()、resize()、 moveEvent()、resizeEvent()、minimumSize()和 maximumSize()。
注意:
1、 大小的计数单位都是像素,相关数字不包括窗口框架占用的位置;
2、 Qt中组件的坐标是以组件的左上角为原点、x轴向右、y轴向下的坐标体系。
3.2、baseSize属性和sizeIncrement属性
3.2.1、baseSize
组件的 baseSize是组件的基础大小(单位:像素),如果组件设定了sizeIncrement,该属性用于在调整组件尺寸时计算组件应该调整到的合适值,但这个属性缺省值是QSize(0,0),需要使用setBaseSize(int basew, int baseh)设置该值,要查询该值使用baseSize()方法。
3.2.2、sizeIncrement
sizeIncrement表示组件调整大小时的每次变化的增量大小(单位:像素)的基数,实际调整大小计算公式如下:
width = baseSize().width() + i * sizeIncrement().width()
height = baseSize().height() + j * sizeIncrement().height()
其中i,j为非负整数。
sizeIncrement的缺省值是QSize(0,0),可以调用setSizeIncrement(QSize)、setSizeIncrement(int w, int h)设置sizeIncrement,调用sizeIncrement()获取sizeIncrement的值。
注意:所有组件都可以设置sizeIncrement,但只有窗口对象会生效。
3.3、mimimumSize属性和maximumSize属性
3.3.1、mimimumSize
mimimumSize表示部件能被缩小到的最小尺寸,单位为像素,缩小到该尺寸后不能再进一步缩小了。如果部件在布局管理器中,且布局管理器也设置了最小尺寸,则部件本身的最小尺寸以部件的mimimumSize为准,布局管理器设置的不起作用。
部件的最小尺寸可以调用方法setMinimumSize(QSize)或setMinimumSize(int minw, int minh)进行设置,使用minimumSize()返回当前值,如果值被设置为QSize(0,0)则表示最小尺寸无效。
3.3.2、maximumSize
maximumSize表示部件能被放大到的最大尺寸,放大到该尺寸后不能再进一步放大了。部件的缺省最大值为QSize(16777215,16777215)
部件的最大尺寸可以调用方法setMaximumSize(QSize)或setMaximumSize(int maxw, int maxh)进行设置,使用maximumSize()返回当前值,部件的最大值不能超过系统设置部件的最大值常量QWIDGETSIZE_MAX 。
3.4、sizePolicy属性
部件的sizePolicy属性用于说明部件在布局管理中的缩放方式,当部件没有在布局管理器中时,该设置无效。
在理解sizePolicy前,先介绍两个Qt内置的部件属性sizeHint和minimumSizeHint,分别表示部件的缺省大小、minimumSizeHint建议最小尺寸。
1、sizeHint:为布局管理器中部件的缺省大小,如果部件不在布局管理中就为无效的值,该值是Qt中对每个部件大小的建议值,也是缺省值,不能修改;
2、minimumSizeHint:为Qt推荐的部件最小大小,如果部件不在布局管理中就为无效的值,在布局管理器中minimumSizeHint 就是部件的缺省最小值,除非当前部件的大小策略为QSizePolicy.Ignore或者minimumSize被设置,布局管理器不会调整一个部件的大小到比minimumSizeHint 返回值更小的大小。
sizePolicy由四个值组成,分别是水平缩放策略、垂直缩放策略、水平伸缩因子、垂直伸缩因子。
1、缩放策略
水平缩放策略、垂直缩放策略的值都是枚举类型Policy,该枚举类型的取值及含义如下:
其中,相关值内的常量由枚举类型 QSizePolicy.PolicyFlag定义,对应取值及含义如下:
2、伸缩
四、 界面响应事件控制属性
界面响应事件控制属性是指针对组件对键盘、鼠标事件以及平板触控笔的事件响应的控制,它包括acceptDrops、contextMenuPolicy、cursor、enabled、focusPolicy、inputMethodHints、mouseTracking、tabletTracking、windowModality、windowTitle这9个属性。
4.1、enabled属性
enabled属性非常简单,最开始老猿没准备介绍该属性的,因为大家都应该知道,但仔细看了看官网文章,觉得还是有些细节可能很少有人注意到,因此还是在此介绍一下。
enabled属性用于表示部件是否可用,一个可用的部件可以接收和处理鼠标和键盘事件,当部件不可用时则无法接收和处理鼠标和键盘事件。
有些部件在被禁用时会以不同的方式显示自己。例如,按钮可能会将其标签灰显。如果部件需要知道它何时被启用或禁用,则可以使用changeEvent()方法来捕获事件,事件类型设置为QEvent.EnabledChange。
禁用一个部件时会隐式禁用其所有子部件,启用部件时将顺序启用所有子部件,除非子部件已被显式禁用。当父部件保持禁用状态时,不可能显式启用不是窗口的子部件。
enabled属性缺省值为True,可以 通过isEnabled()访问部件的启用状态,通过setEnabled(bool)设置部件的启用状态。
4.2、acceptDrops属性
acceptDrops属性表示当前部件是否接受鼠标拖放事件,鼠标拖放应该是与鼠标拖拽结合在一起的,在Qt Designer中可以通过属性acceptDrops设置部件是否接受鼠标拖放事件。如果部件接受拖放,则在鼠标拖放时,拖放事件会发送给鼠标当前光标下接受拖放的第一个部件。
如果一个部件设置了acceptDrops属性为True,则就是通知系统该部件可能接受鼠标拖放事件。
注意:
1、如果当前部件是一个桌面(windowType() == Qt.Desktop), 如果此时另一应用正在使用桌面则这个属性设置可能失败;
2、不要在拖、放事件的处理方法中修改该属性。
使用acceptDrops()获取当前部件是否支持拖放;使用setAcceptDrops(bool on)设置当前部件是否支持拖放。
4.3、contextMenuPolicy属性
contextMenuPolicy为部件的快捷菜单策略,快捷菜单通过在部件上点击鼠标右键触发。
快捷菜单策略通过枚举类型Qt.ContextMenuPolicy来定义,对应枚举类型取值及含义如下:
通过contextMenuPolicy() 可以获取当前部件的快捷菜单策略;通过setContextMenuPolicy(Qt.ContextMenuPolicy policy)可以设置当前部件的快捷菜单策略。
4.4、focusPolicy属性
在Qt Designer中可以设置部件的焦点策略,部件的焦点策略属性取值范围由枚举类型Qt.FocusPolicy来定义,该枚举类型及其含义如下表所示:
部件可以通过focusPolicy()可以获取当前部件的焦点策略,通过setFocusPolicy(Qt.FocusPolicy policy)设置焦点策略。
4.5、mouseTracking和tabletTracking属性
mouseTracking和tabletTracking这两个属性是跟踪鼠标或平板触控笔的移动轨迹的。
4.5.1、mouseTracking
mouseTracking属性用于保存是否启用鼠标跟踪,缺省情况是不启用的。没启用的情况下,对应部件只接收在鼠标移动同时至少一个鼠标按键按下时的鼠标移动事件,启用鼠标跟踪的情况下,任何鼠标移动事件部件都会接收。
部件方法hasMouseTracking()用于返回当前是否启用鼠标跟踪,setMouseTracking(bool enable)用于设置是否启用鼠标跟踪。与鼠标跟踪相关的函数主要是mouseMoveEvent()。
4.5.2、tabletTracking
tabletTracking属性保存是否启用部件的平板跟踪,缺省是不起用的。没有启用平板跟踪的情况下,部件仅接收触控笔与平板接触或至少有个触控笔按键按下时的触控笔移动事件。
如果部件启用了平板跟踪功能,部件能接收触控笔靠近但未真正接触平板时的触控笔移动事件,这可以用于监视操作位置以及部件的辅助操作功能(如旋转和倾斜),并为图形界面提供这些操作的信息接口。
部件方法hasTabletTracking()用于返回当前是否启用平板跟踪,setTabletTracking(bool enable)用于设置是否启用平板跟踪。与平板跟踪相关的函数主要是 tabletEvent()。
4.6、inputMethodHints属性
inputMethodHints属性只对输入部件有效,输入法使用它来检索有关输入法应如何操作的提示,例如,如果设置了只允许输入数字的标志,则输入法可能会更改其可视组件,以反映只能输入数字。相关取值及含义如下:
输入提示是多种值的组合,多个值之间通过或操作组合。
如果几个独占标志被放在一起,则生成的字符集将由指定集的并集组成。例如,指定ImhNumbersOnly 和ImhUppercaseOnly 将产生一个由数字和大写字母组成的集合。
该属性缺省值为Qt.ImhNone,可通过inputMethodHints() 和setInputMethodHints(Qt.InputMethodHints )进行访问和修改。
注意:
1、 修改时最好先取到当前设置,再与要修改值进行或后再设置;
2、 该属性仅作为一个输入提示,并不是所有输入法都会支持,老猿验证了几个中文输入法好像都不支持。
老猿认为该属性没有多大用途,一是因为输入法不一定支持,二是因为并不能严格限制输入数据。
4.7、cursor属性
部件的cursor属性保存该部件的鼠标光标形状,当鼠标位于该部件上时就会呈现该属性设置的光标形状,对应类型为枚举类型Qt.CursorShape,可取值的范围及含义如下:
注意:
1、上述列表中,最后4个取值在Designer中没有,这是因为这4个取值不是在属性编辑中静态设置的,而是在运行时调整的;
2、上述列表中英文和译文都列出的是老猿花时间比较多的取值解释,但还是怕翻译得不够准确,所以列出英文进行对照。
4.8、windowModality属性
windowModality属性只对窗口对象有效,保存的是哪些类型的窗口被模式窗口阻塞。
模式窗口防止其他窗口中的部件获取输入。此属性的值控制对应窗口可见时阻塞哪些类型的窗口获取输入。在模式窗口可见时更改此属性无效,必须先调用hide()隐藏模式窗口,然后再调用show()显示模式窗口。
相关取值及含义如下:
五、 信息管理属性
信息管理属性包括accessibleDescription、accessibleName、statusTip、toolTip、toolTipDuration、whatsThis、locale、windowFilePath、windowTitle这9个属性,这些属性与帮助、提示、窗口标题、残障人士辅助信息、语言国际化支持等方面,都与应用呈现给用户的文本信息有关,因此老猿将其归类到信息管理。
5.1、locale国际化支持
locale属性用于设置语言环境,包括语言和国家。如果一个部件没有设置语言环境,则使用父对象的语言环境或者默认语言环境(如果部件是顶层部件)。
可以使用locale()获取部件的语言环境,也可以通过 setLocale(QLocale )设置部件的语言环境,还可以通过unsetLocale()取消部件的语言环境设置。
5.2、 translatable、 disambiguation和comment子属性
每个显示的文本信息包括Label的文本、按钮的文本等、以及输入控件的输入内容、帮助信息的文本等都可以在部件属性编辑中设置国际化子属性,如:
它们都有三个子属性,分别是translatable、 disambiguation和comment,这三个属性的含义分别如下:
1、translatable可译:表示对应属性文字不用翻译成其他语言;
2、disambiguation消除歧义:这是当有多个需要翻译文字的对象有相同文字时,避免出现歧义而额外添加的消除歧义字符,缺省为空,一般歧义字符设置为其所在对象对应类的名字,此消歧参数是为转换器指定注释的首选方法。
3、comment注释:添加注释用于辅助对属性文字的翻译,注释将在翻译属性文字时传递到翻译的函数tr()中并与需要翻译对象关联,这样会有助于理解翻译的文字含义。
对于国际化,老猿没有研究过,也不准备去研究,之所以列这三个属性的国际化属性,纯粹是因为才开始老猿对这三个属性不知道,并且基本上查不到资料。没接触过的人看到这会一头雾水,因此通过各种方法查阅了很多资料,结合各种资料以及自己的理解单独在此解释一下,可能不完全正确。这这部分内容,无需国际化的人不需要关注,需要国际化的人则需要另外专门研究。
5.3、toolTip、toolTipDuration、statusTip、whatsThis属性
这几个属性与帮助和提示信息相关,除了toolTipDuration外,都有国际化设置的子属性。
5.3.1、toolTip属性
toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息。默认情况下,仅显示活动窗口子部件的toolTip,可以通过在窗口对象设置Qt.WA_AlwaysShowToolTips属性来改变,但不能是需要显示tooTip的部件对象中设置。
如果要控制tooTip显示的行为(如控制显示位置),可以重写部件的event()方法捕获事件类型为QEvent.ToolTip的事件。
缺省值为空,可以通过toolTip()和setToolTip( QString )来读取和设置toolTip。
5.3.2、toolTipDuration属性
toolTipDuration 属性控制toolTip显示的时长,单位是毫秒,如果设置为-1,则显示时长根据toolTip内容的长度来计算。
toolTipDuration 缺省值为-1,可以通过toolTipDuration ()和settoolTipDuration ( int msec)来读取和设置toolTipDuration 。
5.3.3、statusTip属性
statusTip属性保存statusTip提示信息,statusTip提示信息在鼠标放到控件上时在窗口的状态栏显示提示信息,如果窗口无状态栏则不显示。
statusTip属性 缺省值为空字符串,可以通过statusTip()和setstatusTip ( QString )来读取和设置statusTip。
5.3.4、whatsThis
whatsThis属性保存部件的帮助信息。whatsThis的帮助信息一般在部件获得焦点后按Shift+F1弹出显示,如果这个快捷键被别的功能占用,则whatsThis的帮助信息可能无法展示。有些对话窗提供一个带问号的按钮可以点击显示whatsThis的帮助信息。
whatsThis属性 缺省值为空字符串,可以通过whatsThis()和setwhatsThis ( QString )来读取和设置whatsThis。
5.4、accessibleDescription和accessibleName辅助阅读属性
accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性。
5.4.1 accessibleName属性
这是辅助阅读中显示的部件的名称,对于大多数小部件,无需设置此属性,因为Qt会调用部件相关属性显示,如按钮将显示按钮的文本,但当小部件不提供任何文本时,设置此属性很重要。例如,只包含图标的按钮需要将此属性设置为与屏幕阅读器一起使用。
此属性默认为空,通过accessibleName() 和setAccessibleName(QString )可以对该属性进行查询和设置。
5.4.2 accessibleDescription属性
此属性保存辅助技术所看到的部件描述,是对accessiblename的补充说明。
此属性默认为空,通过accessibleDescription () 和setAccessibleDescription (QString )可以对该属性进行查询和设置。
5.5、windowTitel属性
windowTitle仅对window和dialog类型的对象生效。
windowTitle是窗口的标题,可以通过windowTitle() 、setWindowTitle(const QString &)进行读取和设置。
5.6、windowFilePath属性
windowFilePath属性仅对窗口对象有效,用于关联一个窗口和对应的文件及路径。
当窗口没有设置标题属性的情况下,则窗口标题展示展示windowFilePath对应的文件名的信息(路径信息不展示),如果二者都设置,则优先使用窗口标题属性的设置作为标题。
该属性缺省为空,可以通过windowFilePath()和setWindowFilePath(QString )来访问和设置windowFilePath属性。
这个功能在窗口打开文件进行操作时可以使用来标记打开的文件。
注意该属性有国际化设置的子属性。
六、 外观控制属性
外观控制属性包括autoFillBackground、font、layoutDirection、palette、styleSheet、windowIcon、windowOpacity这七个属性,基本都与部件的外观相关。
6.1、palette属性和字体font属性设置
在Qt Designer的部件属性中,有个部件调色板(palette)的属性,进入后,如下图所示:
Qt中提供的调色板palette用于管理控件的一组外观显示设置组成,组中每条记录包括颜色角色、颜色组、具体颜色,对应PyQt中的QPalette类。QPalette类相当于对话框或控件的调色板,管理着控件和窗体的所有颜色。
6.1.1、color role颜色角色
上图中蓝色标记的color role颜色角色是指界面中颜色对应的部分界面外观组合,又称为颜色职责,即对应界面中哪些部分使用指定某个颜色。通过枚举变量QPalette.ColorRole来定义,取值及其含义如下:
6.1.2、颜色组ColorGroup
颜色组是指对应同一外观组合在活动状态(active,指获得焦点 ) 、非活动状态(inactive,未获得焦点但可以获得焦点的状态 )、禁止状态(disable,不能获得焦点 )时的对应颜色。上图中只有active 状态的,其他两种状态颜色是电脑根据规则计算出来的,如果要查看或者设置颜色组的三种状态,在上图中选择“show details”即可,如下图:
上面两个截图中的预览窗口是调整调色板的设置后对一个作为案例的窗口外观影响的预览。
6.2、字体设置
在Qt Designer中部件的Font属性中可以设置对应部件的字体属性,包括字体的字体簇(Family)、大小(Size)、是否粗体(Bold)、是否斜体(Italic)、是否带下划线(Underline)、是否带删除线(Strikeout)、是否调整字符间距(Kerning,调整字形间距,且基本上是英文字符形状的间距,因为英文字符形状都是不规则的,有宽有窄,有的圆乎乎,有的棱角分明,就会导致排列在一起的时候疏密不一致,而kerning可以有效利用字符形状间的间隙,使字形之间的空间更加相似)、是否反走样抗锯齿(Antialiasing,请参考《QT QPainter::antialiasing QPainter::textAntialiasing 反走样、抗锯齿探究》)这些属性。
注意:如果Qt Style Sheets与setFont()在同一个部件上使用,则如果设置冲突,样式表将优先。
6.3、windowIcon属性
windowIcon对象为部件对象的属性,但只有窗口对象有效,其他派生对象如pushButtong对象无效。
在windowIcon对象上有如下子属性设置:
这几个子属性实际上是QIcon类中继承的。它们的含义如下:
6.3.1、Theme(图标主题):图标主题是一组具有相同外观和感觉的图标,从程序员的角度来看,图标主题只是一个映射。给定一组要在其中查找图标的目录和一个主题名称,它将图标名称和标称图标大小映射到图标文件名。
关于图标主题的内容老猿没有弄清楚,猜测可能是图标文件和目录以及大小有套规范,然后对应用指定主题,就可以在主题对应目录自动按照规范查找对应的图标。
有几个网址可以参考一下:
《Icon Naming Specification》https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
《Icon Theme Specification》https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
6.3.2、Normal off…Selected On
上图中所示的Normal off到Selected On这8个子属性应该是QIcon的两个属性的组合,分别指定部件在这8种状态下使用哪个图标。这两个属性分别是QIcon的如下两个枚举类型成员:
1、enum Mode { Normal, Disabled, Active, Selected }
四个值分别表示:
1)QIcon.Normal:部件为使能状态,但未激活,没有获得焦点。
2)QIcon.Disabled:部件为禁用状态。
3)QIcon.Active:部件为激活状态,获得了焦点(如鼠标悬停在上面,或Tab键移动焦点)。
4)QIcon.Selected:部件被选中。
当部件的状态切换时,默认的图标绘制函数会自动根据部件的状态重绘图标。
2、enum State { Off, On }
某些部件还有所谓的开关状态(比如一个按钮可以有按下和弹起两个状态),则还可以根据 state 参数来选择不同的图像。
因此上述两个类型的组合对应了8种状态就是Designer图标的8个子属性。
注意:如果theme设置了,则优先使用theme去加载图标,只有找不到的情况下才使用下面每种状态的图标。
6.4、windowOpacity属性
这个属性仅对window对象生效。
windowOpacity为浮点数,表示透明度,为1完全不透明,为0完全透明,缺省是1。
可以通过windowOpacity()、setWindowOpacity(qreal level)进行读取和设置。
6.5、layoutDirection属性
layoutDirection属性保存的是部件的布局方向,有三个取值:
在部件上设置布局方向时,它将传播到部件的子级,但不会传播到作为窗口的子级,也不会传播到已显式调用setLayoutDirection()的子级。此外,为父级调用setLayoutDirection()之后添加的子部件不会继承父级的布局方向。
在Qt Designer中修改了一个部件的布局方向时,所有未单独设置布局方向的子部件的布局方向全部跟随调整,单独设置了不跟随调整。
注意:
1、自qt 4.7以来,此方法不再影响文本布局方向;
2、此属性调整只影响布局内的部件排列,不影响绝对部件的部件排列;
3、布局方向调整在Designer设计时立即生效,无需到运行时。
案例:
1、 如下图,窗口布局类型为从左到右,下面六个按钮的排列显示为:
2、 调整窗口的布局方向为从右到左,则六个按钮的排列显示为:
可以看到1、 2、3号三个按钮由于是绝对布局,两种排列方向其界面上的顺序没有变化,而4、 5、 6在布局中,两种排列方向的按钮顺序颠倒了。
请注意:窗口的主菜单也靠右排列了。
6.6、 autoFillBackground属性
autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景。使用的颜色由部件调色板中的QPalette.window 颜色角色定义。
此外,除非设置了WA_OpaquePaintEvent 或 WA_NoSystemBackground属性,否则窗口始终使用QPalette.Window对应颜色填充。
如果部件的父级对象背景具有静态渐变,则无法关闭此属性(即不能设置为False)。
警告:在使用Qt Style Sheets时请小心使用此属性。当部件具有具有有效背景或边框图像的样式表时,此属性将自动禁用。
默认情况下,此属性为False。
可以使用autoFillBackground()和setAutoFillBackground(bool enabled)对该属性进行读取和设置。
6.7 styleSheet属性
styleSheet属性是定义部件外观的属性样式表,在Qt中styleSheet样式表是类似于html的css样式一样的方法,只是时专门为Qt中的部件开发的。styleSheet的定义语法也是类似CSS,并且是跨平台支持的。
由于每个部件都可以定义自己的样式,也可以通过QApplication.setStyleSheet()在整个应用程序上设置样式。如果在不同级别设置了多个样式表,qt将从所有设置的样式表中派生出有效的样式表。这叫做样式级联。
6.7.1、Qt Designer中定义样式
在部件的styleSheet属性中,点击属性进入属性设置,会出现如下内容:
点击省略号的按钮,则进入样式编辑器:
6.7.2、styleSheet样式表
样式表由一系列样式规则组成。样式规则由选择器和声明组成。选择器指定哪些部件受规则影响;声明指定应在部件上设置哪些属性。如:
QPushButton { color: red }
在上面这个样式规则中,QPushButton 是选择器,{ color: red }就是声明,表示所有QPushButton 按钮及其派生类对象的文本颜色设置为红色。如果该规则样式表应用在窗口上,则窗口上所有没有指定styleSheet的pushButton部件的文字颜色会显示为红色,通过styleSheet指定了color的则按自己指定颜色显示。
上述截图的窗口定义了样式:QPushButton { color: red },而PushButton3则定义了样式:QPushButton { color: blue},因此展示效果如上。
注意:在Qt样式定义语句中,通常情况下是大小写都可以,但类名、对象名和Qt属性名是大小写敏感的。
因此QPushButton { color: red },也可以写成:QPushButton { Color: Red }、QPushButton { COLOR: RED}、QPushButton { Color: REd}等形式,但不能写成qpushbutton { color: red }、QPUSHBUTTON { color: red }等形式。
关于Qt样式表的详细语法规则请见Qt文档官网《The Style Sheet Syntax》。
可以使用styleSheet() 、setStyleSheet(QString )来获取或设置部件的样式表。
七、 后记
终于将Qt Designer中与QWidget类相关的属性介绍完了,从9月下旬开始学习PyQt的GUI程序开发,刚使用Qt Designer设计GUI界面时,对于桌面上那么多控件一个个都不了解,到处找资料,基本没有全面介绍界面控件的,单个的控件有些能找到一些内容,但都不够详细,有些根本就没有。后来终于找到了Qt文档官网的地址(https://doc.qt.io/qt-5/reference-overview.html),能解决将近80%的问题,但可能还有20%的问题解决不了,这20%总结来包括如下一些方面:
1、 在国内相对冷门且不好验证的知识,如国际化、输入法提示等;
2、 一些可能是常识性的东西,没有人解释,官网上也没有,但就是不理解,如焦点策略的鼠标滚轮获得焦点必选是鼠标已经在控件之上才行、what’s this怎么触发;
3、 一些英文怎么翻译才好理解,如本节部分表格中有中英文对照的内容、Dock Wigdet是否该翻译成停靠部件等;
4、 还有一些验证时有时不成功有时不能成功的,如布局控件内部件的从右往左对齐方向对主窗口菜单的影响试了几次有不同的效果,也不知道原因。
好歹经过多方查找各种资料、测试验证,绝大部分问题都弄清楚了,可能还有极个别的没有完全理解透彻。从9月下旬开始,断断续续的将来源于QWidget类且在Qt Designer中属性编辑可见的属性的功用逐个再次总结记录下来,又花了三天时间整理成本文的内容,并将这些属性进行了分类。因此本文绝对不是简单的翻译或资料汇聚,是老猿前后花了近20天心血研究、整理的产物,还有少数几个细节问题没有完全弄透彻,但就整体来说,对初学者应该是基本够用了,希望帮助到大家。
![](https://i-blog.csdnimg.cn/blog_migrate/d7c2003123ac5a70a05e7e0a0122c6f3.png)
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036