当前位置: 首页 > news >正文

Qt控件核心属性全解析

控件概述

Widget是Qt中的核心概念。英文是“小部件”,这里可以翻译成“控件”。控件是构成一个图形化界面的基本元素。

像按钮、列表视图、树形视图、输入框、滚动条等都属于控件。

Qt作为一个成熟的GUI开发框架,内置了大量的常用控件,并且Qt也提供了“自定义控件”的能力,可以让程序员在现有控件不能满足要求的情况下,对现有的控件做出扩展。

 关于控件体系的发展

控件是GUI开发中的通用概念,不仅仅局限于Qt中。

第⼀阶段:
完全没有控件. 此时需要通过⼀些绘图 API ⼿动的绘制出按钮或者输⼊框等内容, 代码编写繁琐.
例如⽂曲星的 Lava 平台开发
第⼆阶段:
只包含粗略的控件. 只是提供了按钮, 输⼊框, 单选框, 复选框等最常⽤的控件.
例如 html 的原⽣控件.
第三阶段:
更完整的控件体系, 基本可以覆盖到 GUI 开发中的⼤部分场景.
例如早期的 MFC, VB, C++ Builder, Qt, Delphi, 后来的 Android SDK, Java FX, 前端的各种 UI 库等

QWidget核心属性

在 Qt 中, 使⽤ QWidget 类表⽰ "控件". 像按钮, 视图, 输⼊框, 滚动条等具体的控件类, 都是继承⾃
QWidget.
可以说, QWidget 中就包含了 Qt 整个控件体系中, 通⽤的部分.
在 Qt Designer 中, 随便拖⼀个控件过来, 选中该控件, 即可在右下⽅看到 QWidget 中的属性
这些属性既可以通过 QtDesigner 会直接修改, 也可以通过代码的⽅式修改

核心属性概览

enabled:设置控件是否可用,true表示可用,false表示禁用。
geometry:位置和尺寸,包含x,y,width,height四部分。其中坐标是以父元素为参考的
windowTitle:设置widget标题
windowIcon:设置widget标题
windowOpacity:涉案之widget透明度
cursor:鼠标悬停时显示的图标形状。是普通箭头还是沙漏,还是十字型状。在Qt Designer界面可以清楚的看到可选项。
font:字体相关属性。涉及到字体家族,字体大小,粗体,斜体,下划线等样式
toolTip:鼠标悬停在widget上会显示在状态栏中显示的提示信息
toolTipDuring:toolTip显示的持续时间
statusTip:Widget状态发生改变的时候显示的提示信息
whatsThis:鼠标悬停并按下alt + F1,显示的帮助信息(显示在一个弹出的窗口中)
styleSheet:允许CSS来设置widget中的样式。Qt中支持的样式非常丰富,对于前端开发人员上手是非常友好的
focusPolicy:该widget如何获取到焦点
  • Qt::NoFocus:控件不参与焦点管理,无法通过键盘和鼠标获取焦点
  • Qt::TalFocus:控件可以通过Tal键来获取焦点
  • Qt::ClickFocus:控件通过鼠标点击来获取焦点
  • Qt::StrongFocus:控件可以通过键盘和鼠标来获取焦点
  • Qt::WheelFocus:控件可以通过鼠标滚动来获取焦点

contextMenuPolicy:上下文菜单的显示策略

  • Qt::DefaultContextMenu:默认的上下文菜单策略,用户可以通过鼠标右键或键盘快捷键触发上下文菜单
  • Qt::NoContextMenu:禁用上下文菜单,即使用户点击鼠标右键也不会显示菜单
  • Qt::PreventContextMenu:防止控件希纳是上下文菜单,即使用户点击鼠标右键也不会显示菜单
  • Qt::ActionsContextMenu:将上下文菜单替换成控件的“动作”菜单,用户可以通过鼠标右键或键盘快捷键触发这个菜单
  • Qt::CustomContextMenu:通过自定义的上下文菜单,用户可以通过鼠标右键或键盘快捷键触发这个菜单

locale:设置语言和国家地区

acceptDrops:该部件是否接受拖放操作。如果设置为true,那么该部件就可以接收来⾃其他部件的拖放操作。当⼀个部件被拖放到该部件上时,该部件会接收到相应的拖放事件(如dropEvent)。如果设置为false,那么该部件将不会接收任何拖放操作。

minimumSize:控件的最⼩尺⼨. 包含最⼩宽度和最⼩⾼度.
maximumSize:控件的最⼤尺⼨. 包含最⼤宽度和最⼤⾼度
sizePolicy:尺⼨策略. 设置控件在布局管理器中的缩放⽅式
windowModality:指定窗⼝是否具有 "模态" ⾏为.
sizeIncrement:拖动窗⼝⼤⼩时的增量单位
baseSize:窗⼝的基础⼤⼩, ⽤来搭配 sizeIncrement 调整组件尺⼨是计算组件应该调整到的合适
的值.
palette:调色板,可以设置widget的颜色风格
mouseTracking:是否要跟踪⿏标移动事件.
如果设为 true, 表⽰需要跟踪, 则⿏标划过的时候该 widget 就能持续收到⿏标移动事件.
如果设为 false, 表⽰不需要跟踪, 则⿏标划过的时候 widget 不会收到⿏标移动事件, 只
能收到⿏标按下或者释放的事件
tabletTracking:是否跟踪触摸屏的移动事件.
类似于 mouseTracking . Qt 5.9 中引⼊的新属性.
layoutDirection:布局⽅向
  • Qt::LeftToRight:文本从左向右排列,也是默认值
  • Qt::RightToLeft:文本从右向左排列
  • Qt::GlobalAtomics:部件的布局方式由全局原子性决定(其实就是根据应用程序中的其他widget布局方向确定)

autoFillBackground:是否⾃动填充背景颜⾊.

windowFilePath:能够把 widget 和⼀个本地⽂件路径关联起来. PS: 其实作⽤不⼤.

accessibleName:设置 widget 的可访问名称. 这个名称可以被辅助技术 (像屏幕阅读器) 获取到.
这个属性⽤于实现⽆障碍程序的场景中 (也就是给盲⼈写的程序)
accessibleDescription:设置 widget 的详细描述. 作⽤同 accessibleName
inputMethodHints:针对输⼊框有效, ⽤来提⽰⽤⼾当前能输⼊的合法数据的格式. ⽐如只能输⼊数字, 只能输⼊⽇期等.

enabled

API说明
isEnabled()获取到控件的可用状态
setEbalbed设置控件是否可用,true表示可用,false表示禁用

举例:

有两个按钮,按钮2可以改变按钮1的禁用状态

 

geometry

位置和尺寸,其实就是四个属性的统称

  • x横坐标
  • y纵坐标
  • width宽度
  • height高度

但是在实际开发中,我们并不会直接使用这几个属性,而是通过一系列封装的方法来获取/修改

API说明
geometry()获取到控件的位置和尺寸。返回结果是一个QRect,包含了x,y,width,height。其中x,y是左上角的坐标

setGeometry(QRect)

setGeometry(int x,int y,int width,int height)

设置控件的位置和尺寸,可以直接设置一个QRect,也可以分成四个属性单独设置

 

window frame 的影响
如果 widget 作为⼀个窗⼝ (带有标题栏, 最⼩化, 最⼤化, 关闭按钮), 那么在计算尺⼨和坐标的
时候就有两种算法. 包含 window frame 和 不包含 window frame.
其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的⽅式来计算
的.
其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的⽅式来计
算的.

当然如果一个不是作为窗口的widget,上述来个那种方式得到的结果是一致的

x()
获取横坐标
计算时包含window frame
y()

获取纵坐标

计算时包含window frame

pos()
返回 QPoint 对象, ⾥⾯包含 x(), y(), setX(), setY() 等⽅法.
计算时包含 window frame
frameSize()
返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法.
计算时包含 window frame
frameGeometry()
返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y, width, size.
计算时包含 window frame 对象
width()
获取宽度
计算时不包含 window frame
height()

获取高度

计算时不包含 window frame

size()
返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法.
计算时不包含 window frame
rect()
返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取并设置 x, y, width, size.
计算时不包含 window frame 对象
geometry()
返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,
width, size.
计算时不包含 window frame 对象
setGeometry()
直接设置窗⼝的位置和尺⼨. 可以设置 x, y, width, height, 或者 QRect 对象.
计算时不包含 window frame 对象

示例,感受geometry和frameGeometry的区别

在构造⽅法中, Widget 刚刚创建出来, 还没有加⼊到对象树中. 此时也就不具备 Window
frame.
在按钮的 slot 函数中, 由于⽤⼾点击的时候, 对象树已经构造好了, 此时 Widget 已经具备了
Window frame, 因此在位置和尺⼨上均出现了差异

如果把上述代码修改成打印 pushButton 的 geometry 和 frameGeometry , 结果就是完全相
同的. 因为 pushButton 并⾮是⼀个窗口。

windowTitle

API说明
windowTitle()获取到控件的窗口标题
setWindowTitle(const QString& title)设置控件的窗口标题

注意

如果是顶层的widget(独立窗口),这个操作才会有效;否则,这个操作没有任何效果

windowIcon

API
说明
windowIcon()
获取到控件的窗⼝图标. 返回 QIcon 对象.
setWindowIcon(const
QIcon& icon
设置控件的窗⼝图标.
同 windowTitle, 上述操作仅针对顶层 widget 有效
代码示例:
这里需要注意的是,我们一般不会在代码中写绝对路径,因为无法保证程序发布之后,用户的电脑上又会有相同的路径。
如果使⽤相对路径, 则需要确保代码中的相对路径写法和图⽚实际所在的路径匹配 (⽐如代码
中写作 "./image/cat.jpg", 就需要在当前⼯作⽬录中创建 image ⽬录, 并把cat.jpg 放进
去).
对于Qt程序来说,当前工作目录可能是变化的。比如通过Qt Creator运行的程序,当前的工作目录是项目的构建目录;直接双击exe运行,工作目录则是exe所在的目录。
所谓构建⽬录, 是和 Qt 项⽬并列的, 专⻔⽤来放⽣成的临时⽂件和最终 exe 的⽬录.
注意, 上述 构建⽬录, 是随时可删除的. ⽐如点击菜单栏中的 "构建" -> "清理项⽬" , 就会把这个⽬录中的内容清空掉.
因此如果我们把图⽚⽂件放到构建⽬录中, 可能在不⼩⼼删除后就丢失了. 我们还是希望能够把图⽚和源代码放到⼀起, 并且使我们的程序⽆论拷⻉到任何位置中都能正确使⽤图⽚
Qt 使⽤ qrc 机制帮我们⾃动完成了上述⼯作, 更⽅便的来管理项⽬依赖的静态资源.
qrc ⽂件是⼀种XML格式的资源配置⽂件, 它⽤XML记录硬盘上的⽂件和对应的随意指定的资
源名称. 应⽤程序通过资源名称来访问这些资源.
在Qt开发中, 可以通过将资源⽂件添加到项⽬中来⽅便地访问和管理这些资源. 这些资源⽂件
可以位于qrc⽂件所在⽬录的同级或其⼦⽬录下.
在构建程序的过程中, Qt 会把资源⽂件的⼆进制数据转成 cpp 代码, 编译到 exe 中. 从⽽使依
赖的资源变得 "路径⽆关
注意路径的访问规则:
  • 使⽤ : 作为开头, 表⽰从 qrc 中读取资源.
  • / 表示配置的前缀
  • cat.png是资源的名称
上述 qrc 这⼀套资源管理⽅案, 优点和缺点都很明显.
优点: 确保了图⽚, 字体, 声⾳等资源能够真正做到 "⽬录⽆关", ⽆论如何都不会出现资源丢失的情况.
缺点: 不适合管理体积⼤的资源. 如果资源⽐较⼤ (⽐如是⼏个 MB 的⽂件), 或者资源特别多, ⽣成的最终的 exe 体积就会⽐较⼤, 程序运⾏消耗的内存也会增⼤, 程序编译的时间也会显著增加

windowOpacity

AP
说明
windowOpacity()
获取到控件的不透明数值. 返回 float, 取值为 0.0 -> 1.0 其中 0.0 表⽰全透明, 1.0 表⽰完全不透明.
setWindowOpacity(flo
at n)
设置控件的不透明数值.

举例:

设计两个按钮,一个用来增加透明度,一个用来减少透明度

cursor

API
说明
cursor()
获取到当前 widget 的 cursor 属性, 返回 QCursor 对象.
当⿏标悬停在该 widget 上时, 就会显⽰出对应的形状.
setCursor(const QCursor& cursor)
设置该 widget 光标的形状. 仅在⿏标停留在该 widget 上时⽣效.
QGuiApplication::setOverrideCursor(co
nst QCursor& cursor
设置全局光标的形状. 对整个程序中的所有 widget 都会⽣效. 覆盖
上⾯的 setCursor 设置的内容.

实现一下,当鼠标悬浮在按钮上时,处于等待状态:

鼠标效果无法截屏,自行尝试

使用代码来实现一下

 可以来实现一下,把我们的鼠标变成篮球

font 

API
说明
font()
获取当前 widget 的字体信息. 返回 QFont 对象
setFont(const QFont& font)
设置当前 widget 的字体信息

关于QFont

属性
说明
family
字体家族. ⽐如 "楷体", "宋体", "微软雅⿊" 等.
pointSize
字体⼤⼩
weight
字体粗细. 以数值⽅式表⽰粗细程度取值范围为 [0, 99], 数值越⼤, 越 粗
bold
是否加粗. 设置为 true, 相当于 weight 为 75. 设置为 false 相当于
weight 为 50.
italic
是否倾斜
underline
是否带有下划线
strikeOut
是否带有删除线

toolTip 

API说明
setToolTip
设置 toolTip.
⿏标悬停在该 widget 上时会有提⽰说明.
setToolTipDuring
设置 toolTip 提⽰的时间. 单位 ms.
时间到后 toolTip ⾃动消失.
toolTip 只是给⽤⼾看的. 在代码中⼀般不需要获取到 toolTip

focusPolicy

 设置控件获取到焦点的策略. ⽐如某个控件能否⽤⿏标选中或者能否通过 tab 键选中。

API
说明
focusPolicy()
获取该 widget 的 focusPolicy, 返回 Qt::FocusPolicy
setFocusPolicy(Qt::FocusPolicy policy )
设置 widget 的 focusPolicy.
Qt::FocusPolicy 是⼀个枚举类型. 取值如下
  • Qt::NoFocus :控件不会接收键盘焦点
  • Qt::TabFocus:控件可以通过Tab键接收焦点
  • Qt:ClickFocus:控件在鼠标点击时接收焦点
  • Qt::StrongFocus:控件可以通过Tab键和鼠标点击接收焦点(默认值)
  • Qt::WheelFocus:类似Qt::StrongFocus,同时控件也通过鼠标滚到获取焦点
代码示例:
在界⾯上创建四个单⾏输⼊框
修改第⼆个输⼊框的 focusPolicy Qt::NoFocus ,
修改第三个输⼊框 focusPolicy Qt::TabFocus
修改第四个输⼊框 focusPolicy Qt::ClickFocus

styleSheet

通过CSS设置widget的样式

CSS (Cascading Style Sheets 层叠样式表) 本⾝属于⽹⻚前端技术. 主要就是⽤来描述界⾯的
样式。
所谓 "样式", 包括不限于 ⼤⼩, 位置, 颜⾊, 间距, 字体, 背景, 边框等.
我们平时看到的丰富多彩的⽹⻚, 就都会⽤到⼤量的 CSS.
Qt 虽然是做 GUI 开发, 但实际上和 ⽹⻚前端 有很多异曲同⼯之处. 因此 Qt 也引⼊了对于 CSS
的⽀持
CSS中可以设置的样式属性非常多。Qt只能支持其中的一部分,成为QSS。

此处的语法格式同 CSS, 使⽤键值对的⽅式设置样式. 其中键和值之间使⽤ : 分割. 键值对之间使⽤
; 分割.
另外, Qt Designer 只能对样式的基本格式进⾏校验, 不能检测出哪些样式不被 Qt ⽀持. ⽐如 text
align: center 这样的⽂本居中操作, 就⽆法⽀持.

关于计算机中的颜色表示

计算机中使⽤ "像素" 表⽰屏幕上的⼀个基本单位(也就是⼀个发亮的光点).
每个光点都使⽤三个字节表⽰颜⾊, 分别是 R (red), G (green), B (blue) ⼀个字节表⽰ (取值范
围是 0-255, 或者 0x00-0xFF).
混合三种不同颜⾊的数值⽐例, 就能搭配出千千万万的颜⾊出来.
当然, 上述规则只是针对⼀般的程序⽽⾔是这么设定的. 实际的显⽰器, 可能有 8bit ⾊深或者
10bit ⾊深等, 实际情况会更加复杂

按钮类控件

QPushButton

使⽤ QPushButton 表⽰⼀个按钮. 这也是当前我们最熟悉的⼀个控件了.
QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类.

属性
说明
text
按钮中的⽂本
icon
按钮中的图标
iconSize
按钮中图标的尺⼨
shortCut
按钮对应的快捷键
autoRepeat
按钮是否会重复触发. 当⿏标左键按住不放时,
如果设为 true, 则会持续产⽣⿏标点击事件;
如果设为 false, 则必须释放⿏标, 再次按下⿏标时才能产⽣点击事件.
(相当于游戏⼿柄上的 "连发" 效果)
autoRepeatDelay
重复触发的延时时间. 按住按钮多久之后, 开始重复触发.
autoRepeatInterval
重复触发的周期

QAbstractButton 作为 QWidget 的⼦类, 当然也继承了 QWidget 的属性. 上⾯介绍的 QWidget ⾥的各种属性⽤法, 对于 QAbstractButton 同样适⽤. 因此表格仅列出 QAbstractButton 独有的属性
事实上,QPushButton的核心功能都是QAbstractButton提供的,自身的提供的属性比较简单
代码示例:带有图标的按钮

 代码示例:

五个按钮的 objectName 分别为 pushButton_target , pushButton_up ,
pushButton_down , pushButton_left , pushButton_right
五个按钮的初始位置随意, 其中 pushButton_target 尺⼨设置为 100 * 100, 其余按钮设为 50 *
50. ⽂本内容均清空
来设置一下快捷键

 Radio Button

QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个.
作为 QAbstractButton QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton
同样适⽤.
QAbstractButton 中和 QRadioButton 关系较⼤的属性
属性
说明
checkable
是否能选中
checked
是否已经被选中. checkable 是 checked 的前提条件.
autoExclusive
是否排他.
选中⼀个按钮之后是否会取消其他按钮的选中.
对于 QRadioButton 来说默认就是排他的

 设置checkable,虽然不会被选中,但是仍然可以触发事件,是上面的性别变成其他。

setEnabled 是更彻底的禁⽤按钮的⽅式. 此时该按钮⽆法被选中, 也⽆法响应任何输⼊
click、press、released、toggled的区别
  • clicked 表⽰⼀次 "点击"
  • pressed表示鼠标”按下“
  • released表示鼠标”释放“
  • toggled表示按钮状态切换
总的来说,toggled是最适合QRadioButton的。

Check Box

QCheckBox 表⽰复选按钮. 可以允许选中多个.
QCheckBox 最相关的属性也是 checkable checked , 都是继承⾃
QAbstractButton .
⾄于 QCheckBox 独有的属性 tristate ⽤来实现 "三态复选框" . 这个东西⽐较冷⻔, 咱们课堂不
做讨论.
代码示例:获取复选按钮的取值

Tool Button

QToolButton 的⼤部分功能, 和 QPushButton 是⼀致的. 但是 QToolButton 主要应⽤在⼯
具栏, 菜单等场景

显示类控件

Label

QLabel 可以⽤来显⽰⽂本和图⽚
属性
说明
text
QLabel 中的⽂本
textFormat
⽂本的格式
  • Qt::PlainText  纯文本
  • Qt::RichText  富文本,支持html标签
  • Qt::MarkdownText  markdown格式
  • Qt::AutoText 根据文本内容自动决定文本格式
pixmap
QLabel 内部包含的图⽚.
scaledContents
设为 true 表⽰内容⾃动拉伸填充 QLabel
设为 false 则不会⾃动拉伸
alignment
对⻬⽅式.
可以设置⽔平和垂直⽅向如何对⻬.
wordWrap
设为 true 内部的⽂本会⾃动换⾏.
设为 false 则内部⽂本不会⾃动换⾏.
indent
设置⽂本缩进. ⽔平和垂直⽅向都⽣效.
margin
内部⽂本和边框之间的边距.
不同于于 indent, 但是是上下左右四个⽅向都同时有效.
⽽ indent 最多只是两个⽅向有效(具体那两个方向有效取决于alignment)
openExternalLinks
是否允许打开一个外部的链接
buddy
给 QLabel 关联⼀个 "伙伴" , 这样点击 QLabel 时就能激活对应的伙伴.
例如伙伴如果是⼀个 QCheckBox, 那么该 QCheckBox 就会被选中.

代码示例显⽰不同格式的⽂本

代码⽰例: 显⽰图⽚

但是,在窗口放大和缩小的时候,图片不会发生改变。

我们需要在Widget中重写一下resizeEvent函数

此处的 resizeEvent 函数我们没有⼿动调⽤, 但是能在窗⼝⼤⼩变化时被⾃动调⽤.
这个过程就是依赖 C++ 中的多态来实现的. Qt 框架内部管理着 QWidget 对象表⽰咱们的窗⼝. 在窗⼝⼤⼩发⽣改变时, Qt 就会⾃动调⽤ resizeEvent 函数.
但是由于实际上这个表⽰窗⼝的并⾮是 QWidget, ⽽是 QWidget 的⼦类, 也就是咱们⾃⼰写的 Widget. 此时虽然是通过⽗类调⽤函数, 但是实际上执⾏的是⼦类的函数(也就是我们重写后的 resizeEvent ).

此处属于是 多态 机制的⼀种经典⽤法. 通过上述过程, 就可以把⾃定义的代码, 插⼊到框架内部执⾏. 相当于 "注册回调函数" .
代码⽰例: ⽂本对⻬, ⾃动换⾏, 缩进, 边距
QFrame QLabel 的⽗类. 其中 frameShape 属性⽤来设置边框性质
  • QFrame::Box 矩形边框
  • QFrame::Panel 带有可点击区域的面板边框
  • QFrame::WinPanel windows风格的边框
  • QFrame::HLine 水平线边框
  • QFrame::VLine 垂直线边框
  • QFrame::StyledPanel 带有可点击区域的面板边框

LCD Number 

QLCDNumer 是⼀个专⻔⽤来显⽰数字的控件. 类似于 "⽼式计算器" 的效果.
属性
说明
intValue
QLCDNumber 显⽰的数字值(int).
value
QLCDNumber 显⽰的数字值(double).
和 intValue 是联动的.
例如给 value 设为 1.5, intValue 的值就是 2.
另外, 设置 value 和 intValue 的⽅法名字为 display , ⽽不是 setValue 或 者 setIntValue .
digitCount
显⽰⼏位数字.
mode
数字显⽰形式.
  1. QLCDNumber::Dec 十进制模式
  2. QLCDNumber::Hex 十六进制
  3. QLCDNumber::Bin 二进制模式
  4. QLCDNumber::Oct 八进制模式

只有十进制的时候才能显示小数点之后的内容

segmentStyle

设置显示风格

  1. QLCDNumber::Flat 平面的显示风格,数字呈现在一个平坦的表面上。
  2. QLCDNumber::Outline 轮廓显示风格,数字具有清晰的轮廓和阴影效果
  3. QLCDNumber::Filled 填充显示风格,数字被填充颜色并与背景区分开
smallDecimalPoint
设置比较小的小数点

代码示例:倒计时

ProgressBar 

使⽤ QProgressBar 表⽰⼀个进度条
属性
说明
minimum
进度条最⼩值
maximum
进度条最⼤值
value
进度条当前值
alignment
⽂本在进度条中的对⻬⽅式
  • Qt::AlignLeft 左对齐
  • Qt::AlignRight 右对齐
  • Qt::AlignCenter 居中对齐
  • Qt::AlignJustify 两端对齐
textVisible
进度条的数字是否可⻅.
orientation
进度条的⽅向是⽔平还是垂直
invertAppearance
是否是朝反⽅向增⻓进度
textDirection
⽂本的朝向
format
展⽰的数字格式
  • %p 表示进度的百分比
  • %v 表示进度的数值
  • %m 表示剩余时间
  • %t 表示总时间

代码示例:设置进度条按时间增长

在实际开发中,进度条的取值往往是根据当前任务的实际运行进度来设置的

比如要读取一个很大的文件,就可以获取文件的总的大小,和当前的读取完毕的大小,来设置进度条的比例

通过定时器周期触发信号,主线程调用对应的slot函数,再在slot函数中对当前任务进度进行计算,并更新进度条的页面效果。

Calendar Widget

QCalendarWidget表示一个日历

属性
说明
selectedDate
当前选中的日期
minimumDate
最小日期
maximumDate最大日期
firstDayOfWeek每周的第一天(也就是日历的第一列)是周几
gridVisible是否显示表格的边框
selectionMode
是否允许选择⽇期
navigationBarVisible
⽇历上⽅标题是否显⽰
horizontalHeaderFormat
⽇历上⽅标题显⽰的⽇期格式
verticalHeaderFormat
⽇历第⼀列显⽰的内容格式
dateEditEnabled
是否允许⽇期被编辑
信号
说明
selectionChanged(const QDate&)
当选中的⽇期发⽣改变时发出
activated(const QDate&)
当双击⼀个有效的⽇期或者按下回⻋键时发出,形参是⼀个QDate类型,保存了选中的⽇期
currentPageChanged(int, int)
当年份⽉份改变时发出,形参表⽰改变后的新年份和⽉份

代码示例:获取选中的日期

输入类控件

Line Edit

 QLineEdit用来表示单行输入框,可以输入一段文字,但是不能换行

核心属性

属性
说明
text
输⼊框中的⽂本
inputMask
输⼊内容格式约束
maxLength
最⼤⻓度
frame
是否添加边框
echoMode

显示方式

  • QLineEdit::Normal 这是默认值,文本框会显示输入的文本
  • QLineEdit::Passwrod 在这种模式下,输入的字符被隐藏,通常使用*或者=代替
  • QLineEdit:NoEcho 在这种模式下,文本框不会显示任何输入的字符
cursorPosition光标所在位置
alignment文字对齐方式,设置水平和垂直方向的对齐
dragment是否允许拖拽
readOnly是否是只读的(不允许修改)
placeHolderText当输入框内容为空的时候,显示什么样的提示信息
clearButtonEnabled是否自动显示出清除按钮

核心信号

属性说明
void cursorPositionChanged(int old, int new)
当鼠标移动时发出此信号,old为先前的位置,new为新位置
void editingFinished()
当按返回或者回⻋键时,或者⾏编辑失去焦点时,发出此信号。
void returnPressed()
当返回或回⻋键按下时发出此信号.
如果设置了验证器, 必须要验证通过,才能触发
void selectionChanged()
当选中的⽂本改变时,发出此信号。
void textChanged(const QString &text)
当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。
代码对⽂本的修改能够触发这个信号
void textEdited(const QString &text))
当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。
代码对⽂本的修改不能触发这个信号.

代码示例:录入个人信息

inputMask只能进行简单的输入格式校验

实际开发中,基于正则表达式的方法才是更核心的方法

Text Edit

QTextEdit表示多行输入框,也是一个富文本 & markdown编辑器。并且能在内容超出编辑范围的时候自动提供滚动条。

核心属性

属性
说明
markdown
输⼊框内持有的内容. ⽀持 markdown 格式. 能够自动对markdown ⽂本进⾏ 渲染成 html
html
输⼊框内持有的内容. 可以⽀持⼤部分 html 标签. 包括 img和table 等
placeHolderText
输入框为空时提示的内容
readOnly是否只是可读的
undoRedoEnable

是否开启undo/redo功能

按下ctrl+z触发undo

按下ctrl+y触发redo

autoFormating
开启⾃动格式化.
tabstopWidth
按下缩进占多少空间
overwriteMode
是否开启覆盖写模式
acceptRichText
是否接收富⽂本内容
verticalScrollBarPolicy
垂直⽅向滚动条的出现策略
  • Qt::ScrollBarAsNeeded 根据内容自动决定是否需要滚动条。这是默认值
  • Qt::ScrollBarAlwaysOff 总是关闭滚动条
  • Qt::ScrollBarAlwaysOn 总是显示滚动条
horizontalScrollBarPolicy

水平方向滚动条的出现策略

  • Qt::ScrollBarAsNeeded 根据内容自动决定是否需要滚动条。这是默认值
  • Qt::ScrollBarAlwaysOff 总是关闭滚动条
  • Qt::ScrollBarAlwaysOn 总是显示滚动条

核心信号

信号说明
textChanged()
⽂本内容改变时触发
selectionChanged()
选中范围改变时触发
cursorPositionChanged()
光标移动时触发
undoAvailable(bool)
可以进⾏ undo 操作时触发
redoAvailable(bool)
可以进⾏ redo 操作时触发
copyAvaiable(bool)
⽂本被选中/取消选中时触发

代码示例:获取多行输入框的内容

  • 通过toPlainText方法获取内容的文本
  • 类似的,QTextEdit还提供了toMarkdown和toHtml。根据需要我们调整不同的获取方式

代码示例:验证输入框的各种信号

 

 Combo Box

QComboBox表示下拉框

核心属性

属性
说明
currentText
当前选中的⽂本
currentIndex
当前选中的条⽬下标.
从0开始计算,如果当前没有条目被选中,值为-1
editable

是否允许修改

设为true时,QComboBox的行为非常接近QLineEdit,也可以设置validtor

iconSize
下拉框图标(小三角)的大小
maxCount
最多允许有多少个条⽬

核心方法

方法说明
addItem(const QString&)
添加⼀个条⽬
currentIndex()
获取当前条⽬的下标
从 0 开始计算. 如果当前没有条⽬被选中, 值为 -1
currentText()
获取当前条目的文本内容

核心信号

方法说明
activated(int)
activated(const QString & text)

当用户选择一个选项时发出

这个时候相当于用户点开 下拉框,并且鼠标划过某个选项。此时还没有确定做出选择

currentIndexChanged(int)
currentIndexChanged(const QString & text)

当前选项改变时发出

此时用户已经明确的选择了一个选项

用户操作或通过程序操作都会触发这个信号

editTextChanged(const QString &
text)
当编辑框中的⽂本改变时发出
(editable 为 true 时有效)

代码示例:从文件中加载下拉框的选项

很多时候下拉框的选项并非是固定的,而是通过读取文件/网络得到的

Qt中提供了QFile实现文件的读写功能。当然使用C++标准库也可以实现类似的功能。

之所以存在两套, 是因为 Qt 诞⽣较早 (1991 年左右), 此时 C++ 还没有完成 "标准化" 的⼯作,
C++ 标准库这样的概念⾃然也没有诞⽣
因此 Qt 就⾃⼰打造了⼀套库, 实现了字符串, 容器, ⽂件操作, 多线程, ⽹络操作, 定时器, 正则
表达式等内容.

Spin Box

使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰ "微调框", 它是带有按钮的输⼊框. 可以⽤来输⼊整
数/浮点数. 通过点击按钮来修改数值大小
属性
说明
value
存储的数值
singleStep
每次调整的补“步长”,按下一次按钮数据变化多少
displayInteger
数字的进制
minimum
最小值
maximum
最⼤值
suffix
后缀
prefix前缀
wrapping
是否允许换⾏
frame
是否带边框
alignment
⽂字对⻬⽅式.
readOnly
是否允许修改
buttonSymbol
按钮上的图标
  • UpDownArrows 上下箭头形式
  • PlusMinus 加减号形式
  • NoBUttons 没有按钮
accelerated (加速的)
按下按钮时是否为快速调整模式
correctionMode

输入有错误如何修正

  • QAbstractSpinBox::CorrectToPreviousValue 如果用户输入了一个无效的值,那么SpinBox会恢复为上一个有效的值。
  • QAbstractSpinBox::CorrectToNearestValue 如果用户输入一个无效的值,SpinBox会恢复为最接近的有效值
keyboardTrack

是否开启键盘跟踪

设为 true, 每次在输⼊框输⼊⼀个数字, 都会触发⼀次 valueChanged() 和 textChanged() 信号
设为 false, 只有在最终按下 enter 或者输⼊框失去焦点, 才会触发 valueChanged() 和textChanged()信号

核心信号

信号说明
textChanged(QString)

微调框的文本发生改变时会触发

参数QString带有前缀和后缀

valueChanged(int)

微调框的文本发生改变时会触发

参数int,表示当前的数值

代码示例:调整麦当劳购物车中的份数

Date Edit & Time Edit

使⽤ QDateEdit 作为⽇期的微调框.

使⽤ QTimeEdit 作为时间的微调框.
使⽤ QDateTimeEdit 作为时间⽇期的微调框.
这⼏个控件⽤法⾮常相似, 我们以 QDateTimeEdit 为例进⾏介绍.
属性
说明
datetime
时间⽇期的值. 形如 2000/1/1 0:00:00
date
单纯⽇期的值. 形如 2001/1/1
time
单纯时间的值. 形如 0:00:00
displayFormat

时间日期格式,形如 yyyy/M/d H:mm

  • y表示年份
  • M表示月份
  • d表示日期
  • H表示小时
  • m表示分钟
  • s表示秒

不同的语言/库中设定的规则存在差异,需要使用的时候需要进行查阅

minimumDateTime
最小日期时间
maximumDateTime
最大日期时间
timeSpec
  • Qt::LocalTime 显示本地时间
  • Qt::UTC 显示协调世界时(UTC)
  • Qt::OffsetFromUTC 显示相对于UTC的偏移量
UTC 时间是⼀个基于原⼦钟的标准时间. 不受地球的⾃转周期影响. 和格林威治时间 (GMT) 是
⾮常接近的. 科学家会通过精密的设备来测量并维护.
咱们的计算机内部使⽤的时间就是基于 UTC 时间.
本地时间则是基于不同的时区, 对 UTC 时间做出了⼀些调整. ⽐如咱们使⽤的北京时间, 位于
"东⼋区", 就需要在 UTC 时间基础上 +8 个⼩时的时差.
核心信号

信号说明
dateChanged(QDate)
日期改变时触发
timeChanged(QTime)
时间改变时触发.
dateTimeChanged(QDateTime)
时间日期任意一个改变时触发

代码示例:实现日期计算器

Dial

使用QDial表示一个按钮

属性说明
value
持有的数值
minimum
最⼩值
maximum
最大值
singleStep按下方向键的时候改变的步长
pageStep
按下 pageUp / pageDown 的时候改变的步⻓.
sliderPosition
界⾯上旋钮显⽰的 初始位置
tracking
外观是否会跟踪数值变化.
默认值为 true. ⼀般不需要修改.
wrapping
是否允许循环调整.
即数值如果超过最⼤值, 是否允许回到最⼩值.
(调整过程能否 "套圈")
notchesVisible
是否显⽰ 刻度线
notchTarget
刻度线之间的相对位置.
数字越⼤, 刻度线越稀疏

核心信号

属性
说明
valueChanged(int)
数值改变时触发
rangeChanged(int, int)
范围变化时触发

代码示例:调整窗口透明度

Slider

使用QSlider表示一个滑动条

QSlider QDial 都是继承⾃ QAbstractSlider , 因此⽤法上基本相同.
属性
说明
value
持有的数值
minimum
最小值
maximum
最大值
singleStep
按下⽅向键的时候改变的步⻓
pageStep
按下 pageUp / pageDown 的时候改变的步⻓
sliderPosition
滑动条显⽰的 初始位置
tracking

外观是否会跟踪数值变化

默认值为true,一般不需要修改

orientation
滑动条的方向是水平还是垂直
invertedAppearance
需要反转滑动条的方向
tickPosition
刻度的位置.
tickInterval
刻度的密集程度.

核心信号

属性
说明
valueChanged(int)
数值改变时触发
rangeChanged(int, int)
范围变化时触发

代码示例:通过自定义快捷键调整滑动条的位置

 多元素控件

Qt中提供的多元素控件有

  • QListWidget
  • QListView
  • QTableWidget
  • QTableView
  • QTreeWidget
  • QTreeView

xxWidget 和 xxView 之间的区别

以 QTableWidget 和 QTableView 为例
  • QTableView是基于MVC设计的控件,QTableView本身不持有数据。使用QTableView的时候需要用户创建一个Model对象,并且把Model和QTableView关联起来。后续修改Model中的数据就会影响到QTableView的显示;修改QTableView的显示也会影响到Model中的数据(双向绑定)
  • QTableWidget则是QTableView的子类,对Model进行了封装,不需要用户手动创建Model对象,直接可以往QtableWidget中添加数据了。


List Widget

使⽤ QListWidget 能够显⽰⼀个纵向的列表. 形如

核心属性 

属性
说明
currentRow
当前被选中的是第⼏⾏
count
⼀共有多少⾏
sortingEnabled
是否允许排序
isWrapping
是否允许换⾏
itemAlignment
元素的对齐方式
selectRectVisible
被选中的元素矩形是否是可见的
spacing
元素之间的间隔

核心方法

⽅法
说明
addItem(const QString& label)
addItem(QListWidgetItem * item)
列表中添加元素
currentItem()
返回 QListWidgetItem* 表⽰当前选中的元素
setCurrentItem(QListWidgetItem* item)
设置选中哪个元素
setCurrentRow(int row)
设置选中第⼏⾏的元素
insertItem(const QString& label, int
row)
insertItem(QListWidgetItem * item, int
row)
在指定的位置插⼊元素
item(int row)
返回 QListWidgetItem* 表⽰第 row ⾏的元素
takeItem(int row)
删除指定⾏的元素, 返回 QListWidgetItem* 表⽰是哪个元素被删
除了

核心信号

⽅法
说明
currentItemChanged(QListWidgetItem*
current, QListWidgetItem* old)
选中不同元素时会触发. 参数是当前选中的元素和之前选中的元素.
currentRowChanged(int)
选中不同元素时会触发. 参数是当前选中元素的⾏数.
itemClicked(QListWidgetItem* item)
点击某个元素时触发
itemDoubleClicked(QListWidgetItem*
item)
双击某个元素时触发
itemEntered(QListWidgetItem* item)
⿏标进⼊元素时触发

在上述介绍中,涉及到一个关键的类,QListWidgetItem

这个类表示QListWidget中的一个元素

核心方法

 

⽅法
说明
setFont
设置字体
setIcon
设置图标
setHidden
设置隐藏
setSizeHint
设置尺寸
setSelected
设置是否选中
setText
设置文本
setTextAlignmen
设置文本对齐方式

代码示例:使用ListWidgetx

 

 

Table Widget 

使⽤ QTableWidget 表⽰⼀个表格控件. ⼀个表格中包含若⼲⾏, 每⼀⾏⼜包含若⼲列.
表格中的每个单元格, 是⼀个 QTableWidgetItem 对象
核心方法
⽅法
说明
item(int row, int column)
根据⾏数列数获取指定的 QTableWidgetItem*
setItem(int row, int column,
QTableWidget*)
根据⾏数列数设置表格中的元素
currentItem()
返回被选中的元素 QTableWidgetItem*
currentRow()
返回被选中元素是第⼏⾏
currentColumn()
返回被选中元素是第⼏列
row(QTableWidgetItem* )
获取指定 item 是第⼏⾏
column(QTableWidgetItem* )
获取指定 item 是第⼏列
rowCount()
获取⾏数
columnCount()
获取列数
insertRow(int row)
在第 row ⾏处插⼊新⾏
insertColumn(int column)
在第 column 列插⼊新列
removeRow(int row)
删除第 row ⾏
removeColumn(int column)
删除第 column 列
setHorizontalHeaderItem(int
column, QTableWidget*)
设置指定列的表头
setVerticalHeaderItem(int row,
QTableWidget*)
设置指定⾏的表头

核心信号

信号说明
cellClicked(int row, int column)
点击单元格触发
cellDoubleClicked(int row, int
column)
双击单元格触发
cellEntered(int row, int column)
⿏标进⼊单元格时触发
currentCellChanged(int row, int column, int previousRow, int previousColumn)
选中不同单元格时触发
QTableWidgetItem 核⼼⽅法
⽅法
说明
row()
获取当前是第⼏行
column()
获取当前是第⼏列
setText(const QString&)
设置⽂本
setTextAlignment(int)
设置⽂本对⻬
setIcon(const QIcon&)
设置图标
setSelected(bool)
设置被选中
setSizeHints(const QSize&)
设置尺⼨
setFont(const QFont&)
设置字体

代码示例

构造表中的初始化数据

编写按钮的slot函数

Tree Widget

使⽤ QTreeWidget 表⽰⼀个树形控件. ⾥⾯的每个元素, 都是⼀个 QTreeWidgetItem , 每个
QTreeWidgetItem 可以包含多个⽂本和图标, 每个⽂本/图标为⼀个 列.
可以给 QTreeWidget 设置顶层节点(顶层节点可以有多个), 然后再给顶层节点添加⼦节点, 从⽽构成树形结构

QTreeWidget 核⼼⽅法

⽅法
说明
clear
清空所有⼦节点
addTopLevelItem(QTreeWidgetItem* item)
新增顶层节点
topLevelItem(int index)
获取指定下标的顶层节点
topLevelItemCount()
获取顶层节点个数
indexOfTopLevelItem(QTreeWidgetItem* item)
查询指定节点是顶层节点中的下标
takeTopLevelItem(int index)
删除指定的顶层节点. 返回QTreeWidgetItem* 表⽰被删除的元素
currentItem()
获取到当前选中的节点, 返回 QTreeWidgetItem*
setCurrentItem(QTreeWidgetItem* item)
选中指定节点
setExpanded(bool)
展开/关闭节点
setHeaderLabel(const QString& text)
设置TreeWidget的header名称

QTreeWidget核心信号

信号
说明
currentItemChanged(QTreeWidgetItem*
current, QTreeWidgetItem* old)
切换选中元素时触发
itemClicked(QTreeWidgetItem* item, int col)
点击元素时触发
itemDoubleClicked(QTreeWidgetItem* item,
int col)
双击元素时触发
itemEntered(QTreeWidgetItem* item, int col)
鼠标进入时触发
itemExpanded(QTreeWidgetItem* item)
元素被展开时触发
itemCollapsend(QTreeWidgetItem* item)
元素被折叠时触发
QTreeWidgetItem 核⼼属性
属性
说明
text
持有的⽂本
textAlignment
⽂本对⻬⽅式
icon
持有的图表
font
⽂本字体
hidden
是否隐藏
disabled
是否禁⽤
expand
是否展开
sizeHint
尺⼨⼤⼩
selected
是否选中
QTreeWidgetItem 核⼼⽅法
⽅法
说明
addChild(QTreeWidgetItem* child)
新增⼦节点
childCount()
子节点的个数
child(int index)
获取指定下标的子节点,返回QtreeWidgetItem*
takeChild(int index)
删除对应下标的子节点
removeChild(QTreeWidgetItem*
child)
删除对应的子结点
parent()
获取该元素的父节点

代码示例

 构造初始化数据

 实现按钮的slot

容器类控件 

Group Box

使⽤ QGroupBox 实现⼀个带有标题的分组框. 可以把其他的控件放到⾥⾯作为⼀组. 这样看起来能更好看⼀点.
注意: 不要把QGroupBox和QButtonGroup混淆
核心属性
属性
说明
title
分组框的标题
alignment
分组框内部内容的对齐方式
flat
是否为“扁平”模式
checkable

是否可选择

设为true,则在title前方会多出一个可勾选的部分

checked
描述分组框的选择状态 (前提是 checkable 为 true)

代码示例

 

 Tab Widget

使⽤ QTabWidget 实现⼀个带有标签⻚的控件, 可以往⾥⾯添加⼀些 widget. 进⼀步的就可以通过标签⻚来切换.
核心属性
属性
说明
tabPosition

标签页所在的位置

  • North 上方
  • South 下方
  • West 左侧
  • East 右侧
currentIndex
当前选中了第几个标签页(从0开始计算)
currentTabText
当前选中的标签⻚的⽂本
currentTabName
当前选中的标签⻚的名字
currentTabIcon
当前选中的标签⻚的图标
currentTabToolTip
当前选中的标签⻚的提⽰信息
tabsCloseable
标签⻚是否可以关闭
movable
标签⻚是否可以移动

核心信号

属性
说明
currentChanged(int)
在标签⻚发⽣切换时触发, 参数为被点击的选项卡编号
tabBarClicked(int)
在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.
tabBarDoubleClicked(int)
在双击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.
tabCloseRequest(int)
在标签页关闭时触发。参数为被关闭的选项卡编号

代码示例:使用标签页管理多组控件

编写 widget.cpp, 进⾏初始化, 给标签⻚中放个简单的 label

 

编写按钮的slot函数

  • 使用count()获取标签页的个数
  • 使用addTab新增标签页
  • 使用removeTab删除标签页
  • 使用currentIndex获取当前标签页的下标
  • 使用setCurrentIndex切换当前标签页 

 

布局管理器 

之前使⽤ Qt 在界⾯上创建的控件, 都是通过 "绝对定位" 的⽅式来设定的.
也就是每个控件所在的位置, 都需要计算坐标, 最终通过 setGeometry 或者 move ⽅式摆放过去
这种设定⽅式其实并不⽅便. 尤其是界⾯如果内容⽐较多, 不好计算. ⽽且⼀个窗⼝⼤⼩往往是可以调整 的, 按照绝对定位的⽅式, 也⽆法⾃适应窗⼝⼤⼩
因此 Qt 引⼊ "布局管理器" (Layout) 机制, 来解决上述问题

垂直布局

使⽤ QVBoxLayout 表⽰垂直的布局管理器. V 是 vertical 的缩写.
核心属性
属性
说明
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上方边距
layoutBottomMargin
下方边距
layoutSpacing
相邻元素之间的间隔

代码示例:使用QVBoxLayout管理多个控件

 

通过上述代码的⽅式, 只能给这个 widget 设定⼀个布局管理器. 实际上也可以通过 Qt Design 在⼀个窗⼝中创建多个布局管理器

 

代码示例:创建多个QVBoxLayout

 

通过 Qt Designer 创建的布局管理器, 其实是先创建了⼀个 widget, 设置过 geometry 属性
的. 再把这个 layout 设置到这个 widget 中.
实际上, ⼀个 widget 只能包含⼀个 layout
打开 ui ⽂件的原始 xml, 可以看到其中的端倪.

水平布局

使⽤ QHBoxLayout 表⽰垂直的布局管理器. H 是 horizontal 的缩写

核心属性(和QVBoxLayout是一致的)

属性
说明
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上方边距
layoutBottomMargin
下方边距
layoutSpacing
相邻元素之间的间隔

 

网格布局 

Qt 中还提供了 QGridLayout ⽤来实现⽹格布局的效果. 可以达到 M * N 的这种⽹格的效果.

核心属性

整体和 QVBoxLayout 以及 QHBoxLayout 相似. 但是设置 spacing 的时候是按照垂直⽔平两个
⽅向来设置的.
属性
说明
layoutLeftMargin
左侧边距
layoutRightMargin
右侧边距
layoutTopMargin
上⽅边距
layoutBottomMargin
下⽅边距
layoutHorizontalSpacing
相邻元素之间水平方向的间距
layoutVerticalSpacing
相邻元素之间垂直方向的间距
layoutRowStretch
行方向的拉伸系数
layoutColumnStretch
列方向的拉伸系数

代码示例

QGridLayout也提供了setRowStretch设置行之间的拉伸系数。

上述案例中,直接设置setRowStretch效果不明显。因为每个按钮的高度都是固定的,需要把按钮的垂直方向的sizePolicy属性设置为QSizePolicy::Expading尽可能充满布局管理器,才能看到效果

表单布局

除了上述的布局管理器之外, Qt 还提供了 QFormLayout , 属于是 QGridLayout 的特殊情况, 专
⻔⽤于实现两列表单的布局
这种表单布局多⽤于让⽤⼾填写信息的场景. 左侧列为提⽰, 右侧列为输⼊框.
代码示例

 

Spacer 

使⽤布局管理器的时候, 可能需要在控件之间, 添加⼀段空⽩. 就可以使⽤ QSpacerItem 来表⽰.
属性说明
width
宽度
height
高度
hData

水平方向的sizePolicy

  • QSizePolicy::Ignored 忽略控件的尺寸,不对布局产生影响
  • QSizePolicy::Minimum 控件的最小尺寸为固定值,布局时不会超过该值
  • QSizePolicy::Maximum 控件的最大尺寸为固定值,布局时不会小于该值
  • QSizePolicy::Preferred 控件的理想尺寸为固定值,布局时会尽量接近该值
  • QSizePolicy::Expanding 控件的尺寸可以根据空间调整,尽可能占据更多空间
  • QSizePolicy::Shrinking:空间的尺寸可以根据空间调整,尽可能缩小以适应空间
vData
垂直⽅向的 sizePolicy
选项同上

http://www.dtcms.com/a/266766.html

相关文章:

  • 【Bluedroid】 BLE 隐私保护机制深度剖析(btm_ble_reset_id)
  • [学习记录]Unity-Shader-曲面细分着色器
  • IDEA-常用的开发组件
  • 用户进程的借壳挂靠之术
  • JAVA-springboot 整合Redis
  • 大数据在UI前端的应用创新研究:基于图神经网络的用户关系网络分析
  • [C++] C++多重继承:深入解析复杂继承关系
  • Blob分析及形态学分析
  • AWS 中如何添加一个内部域名
  • Spring AI Alibaba 来啦!!!
  • 本地区块链服务在物联网中的应用实例
  • M30280F8HP#U5B 瑞萨16位工业MCU微控制器,CAN 2.0B+专用PWM,电机控制专家!
  • 使用mindie:2.0.RC2-800I-A2-py311-openeuler24.03-lts制作一个通用的模型推理性能测试的镜像
  • Flynn分类法知识点梳理
  • 微服务架构的演进:迈向云原生
  • 【Spring Boot】Druid 连接池 YAML 配置详解
  • 马尔可夫链:随机过程的记忆法则与演化密码
  • 在LinuxMint 22.1(Ubuntu24.04)上安装使用同花顺远航版
  • 力扣刷题记录【1】146.LRU缓存
  • 【机器人】复现 DOV-SG 机器人导航 | 动态开放词汇 | 3D 场景图
  • 设计模式-应用分层
  • 【狂飙AGI】第8课:AGI-行业大模型(系列2)
  • NumPy-核心函数np.dot()深入理解
  • 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之高斯椭球的颜色表达
  • 鸿蒙开发BindSheet选择章节效果
  • 服务器间接口安全问题的全面分析
  • 数据集-目标检测系列- 卡车 数据集 truck >> DataBall
  • 代码随想录算法训练营第四十六天|动态规划part13
  • 【LeetCode 热题 100】238. 除自身以外数组的乘积——(解法一)前缀积与后缀积
  • 算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题