qt界面组件概述

目录

一. 常用的界面组件

1.按钮类组件

2.输入类组件

3.显示类组件

4.容器类组件

5.Item 组件

6.其他界面组件

二. QWidget 类的主要属性和接口函数

1.QWidget 作为界面组件时的属性

2.QWidget 作为窗口时的属性

3.QWidget 的其他接口函数


在 Qt 类库中,所有界面组件类的直接或间接父类都是 QWidget。QWidget 的父类是 QObject 和 QPaintDevice,所以 QWidget 是多重继承的类。QObject 支持元对象系统,其信号与槽机制为 GUI 编程中对象间通信提供了极大的便利。QPaintDevice 是能使用 QPainter 类在绘图设备上绘图的类。

所有从 QWidget 继承而来的界面组件被称为 widget 组件,它们是构成 GUI 应用程序的窗口界面 的基本元素。界面组件可以从窗口系统接收鼠标事件、键盘事件和其他事件,然后在屏幕上绘制自己。

在使用 Qt Designer 进行 UI 可视化设计时,窗口左侧有一个组件面板,其中有 GUI 设计中常用的各种界面组件。

一. 常用的界面组件

1.按钮类组件

左图所示的是组件面板中 Buttons 分组的组件,这是一些按钮类组件。这些按钮类组件的类 继承关系如右图所示。其中,QAbstractButton 是一个抽象类,它定义了按钮类的一些共有特性, 但是不能用于创建实例对象。常用的 4 种按钮是普通按钮(QPushButton 类)、工具按钮(QToolButton 类)、单选按钮(QRadioButton 类)和复选框(QCheckBox 类)。

QCommandLinkButton 的功能类似于 QRadioButton,用于多个互斥项的选择,例如在向导对话框中作为一组互斥选择按钮。 QDialogButtonBox 是一个复合组件类,可以设置为多个按钮的组合,例如包含 OK 和 Cancel 按钮,或 Yes、No 和 Cancel 按钮。这个组件可以放在对话框上,作为对话框的选择按钮。

2.输入类组件

左图所示的是组件面板中 Input Widgets 分组的组件,这是用于在界面上获取输入的一些组件,例如获取输入的文字、数字、日期和时间等数据。这些组件当然也可以作为数据显示组件。输入类组件的类继承关系如右图所示。

输入类组件的功能
组件类名称组件名称功能
QComboBox下拉列表框也称为组合框,用于从下拉列表中选择一项,也可以直接输入文字
QFontComboBox字体下拉列表框自动从系统获取字体名称列表,用于选择字体
QLineEdit编辑框用于输入单行文字
QTextEdit文本编辑器是一个“所见即所得”的文本编辑器,支持富文本格式,使用类似于 HTML 的标记,或 Markdown 格式。一般用于处理较大的富文本文档
QPlainTextEdit纯文本编辑器是一个纯文本编辑器,支持多段落纯文本文档。一个段落就是一个带格式的字符串,每个字符都可以有自己的属性,例如字体和颜色
QSpinBox整数输入框用于输入整数或离散型数据的输入框
QDoubleSpinBox浮点数输入框用于输入浮点数的输入框
QDateEdit日期编辑框用于编辑日期数据的编辑框
QTimeEdit时间编辑框用于编辑时间数据的编辑框
QDateTimeEdit日期时间编辑框用于编辑日期时间数据的编辑框
QDial表盘一种模仿表盘的输入组件,用于在设定的范围内输入和显示数值
QScrollBar卷滚条通常用于实现在大的显示区域内滑动,以显示部分区域的内容。Horizontal Scroll Bar 和 Vertical Scroll Bar 对应的类均是 QScrollBar
QSlider滑动条条具有设定的数值范围,拖动滑块就可以设置输入的值。Horizontal Slider 和 Vertical Slider 对应的类均是 QSlider
QKeySequenceEdit按键序列编辑器当这个编辑器获得输入焦点后,可记录用户设置的按键序列,一般用这个编 辑器获取用户设置的快捷键序列

3.显示类组件

左图所示的是组件面板中 Display Widgets 分组的组件,这些组件用于显示字符串、数值、 文本等内容。显示类组件一般只能显示内容,而不能编辑、输入内容。显示类组件的类继承关系如右图所示。

显示类组件对应的类及其功能如下表所示。注意,Horizontal Line 和 Vertical Line 对应的类均是 QFrame,将 QFrame 类的 frameShape 属性设置为 HLine 或 VLine,并设置 frameShadow 属性为 Sunken,就具有了水平线条或垂直线条 的效果,它们一般在界面上用作分隔线。

显示类组件的功能
组件类名称组件名称功能
QLabel标签用于显示文字、图片等内容
QTextBrowser文本浏览器用于显示富文本格式的内容,具有只读属性,可以根据文本内的超链接 进行跳转
QGraphicsView图形视图组件Graphics View 结构中的视图组件
QCalendarWidget日历组件用于显示日历,并显示所设置的日期。可以在日历上选择一个日期,所 以 QCalendarWidget 可以作为输入组件
QLCDNumberLCD 数值显示组件模仿 LCD 显示效果的数值显示组件,可显示整数和浮点数
QProgressBar进度条用于表示某个操作的进度,进度一般用百分数表示,有水平和垂直两种 方向
QOpenGLWidgetOpenGL 显示组件用于在 Qt 应用程序中显示 OpenGL 图形
QQuickWidgetQML 显示组件用于自动加载 QML 文件,并显示 QML 文件的场景

4.容器类组件

左图所示的是组件面板中 Containers 分组的组件,这是一些容器类组件。在容器类组件上可以放置其他组件,并可以使用布局管理容器内的子组件。容器类组件的类继承关系如右图所示。图中没有展示QAxWidget,因为QAxWidget 是从 QWidget 间接继承的,继承关系比较复杂,这里就不做展示。

容器类组件对应的类及其功能如表所示:

容器类组件的功能
组件类名称组件名称功能
QGroupBox分组框具有标题和边框的容器组件
QScrollArea卷滚区域具有水平和垂直卷滚条的容器组件,可以容纳大面积的显示内容,通过卷 滚条可实现在显示范围内移动
QToolBox工具箱垂直方向的多页容器组件,每个页面有标签栏,每个页面就是一个 QWidget 组件,在其上可以放置任何界面组件
QTabWidget带标签栏的多页组件QTabWidget 有一个标签栏,每个页标签对应一个页面,每个页面就是一个 QWidget 组件,可以在页面上放置任何界面组件
QStackedWidget堆叠多页组件QStackedWidget 是类似于 QTabWidget 的多页组件,但是没有标签栏,只有两个按钮,用于在页面之间切换
QFrame框架组件QFrame 是所有具有边框的界面组件的父类,它定义了边框形状、边框阴影、 边框线宽等属性。QFrame 可以直接作为容器组件
QWidget界面组件QWidget 可以作为容器组件,QWidget 组件没有父组件时就是独立的窗口
QMdiAreaMDI 工作区组件QMdiArea 是 MDI 显示区域,在 MDI 应用程序中,QMdiArea 用于管理多 文档窗口
QDockWidget停靠组件QDockWidget 是可以在 QMainWindow 窗口的上、下、左、右区域停靠的 组件,也可以浮动在窗口上方
QAxWidgetActiveX 显示组件QAxWidget 用于显示 ActiveX 控件,只有 Windows 平台上才有这个组件

5.Item 组件

左图所示的是组件面板中 Item Views 和 Item Widgets 分组的组件,这些组件对应的类的继承关系如右图所示,QAbstractItemView 的父类是 QAbstractScrollArea。

Item Views 分组的组件用于模型/视图结构,每一种视图组件需要相应的一种模型用于存储数据。Item Widgets 组件类是相应 Item Views 组件类的子类,它们直接使用项(item)存储数据,称为相应视图类的便利类(convenience class),例如,QListWidget 是 QListView 的便利类,QTreeWidget 是 QTreeView 的便利类。

6.其他界面组件

还有一些界面组件并没有出现在 Qt Designer 的组件面板里,例如常用的菜单栏(QMenuBar 类)、菜单(QMenu 类)、工具栏(QToolBar 类)、状态栏(QStatusBar 类)等组件,对应的几个类都是直接从 QWidget 继承而来的。

二. QWidget 类的主要属性和接口函数

QWidget 是所有界面组件类的基类,所以,QWidget 定义的一些属性、接口函数、信号和槽是所有界面组件共有的。了解了 QWidget 的基本特性,通常就能了解界面组件的通用特性。

1.QWidget 作为界面组件时的属性

在 Qt Designer 中设计界面时,在窗体上放置一个 QWidget 组件,属性编辑器里会显示 QWidget 组件的属性。QWidget 作为界面组件时的主要属性如下表所示。一个属性一般有一个读取函数和一个设置函数,例如属性 font 的读取函数是 font(),设置函数是 setFont(),根据属性名称就大致能 写出读取函数和设置函数名称,因此,表中只列出了属性名称、属性值类型和功能。

QWidget 作为界面组件时的主要属性
属性名称属性值类型功能
enabledbool组件的使能状态,enabled 为 true 时才可以操作组件
geometryQRect组件的几何形状,表示组件在界面上所占的矩形区域
sizePolicyQSizePolicy组件默认的布局特性,这个特性与组件的水平、垂直方向尺寸变化有关系
minimumSizeQSize组件的最小尺寸,QSize 包含 width 和 height 两个属性
maximumSizeQSize组件的最大尺寸
paletteQPalette组件的调色板,调色板定义了组件一些特定部分的颜色,如背景色,文字颜色等
fontQFont组件使用的字体。QFont 定义了字体名称、大小、粗体、斜体等特性
cursorQCursor鼠标光标移动到组件上时的形状
mouseTrackingbool若设置为 true,只要鼠标在组件上移动,组件就接收鼠标移动事件;否 则,只有在某个鼠标键被按下时,组件才接收鼠标移动事件
tabletTrackingbool是否开启平板跟踪,默认值是 false,表示只有当触笔与平板计算机接触 时,组件才接收平板事件
focusPolicyQt::FocusPolicy组件的焦点策略,表示组件获取焦点的方式
contextMenuPolicyQt::ContextMenuPolicy组件的上下文菜单策略,上下文菜单是指在组件上点击鼠标右键时弹出 的快捷菜单
acceptDropsbool鼠标移动到组件上时,在光标处显示的简短提示文字
toolTipQString鼠标移动到组件上时,在光标处显示的简短提示文字
statusTipQString鼠标移动到组件上时,在主窗口状态栏上临时显示的提示文字,显示 2 秒后自动消失
autoFillBackgroundbool组件的背景是否自动填充,如果组件使用样式表设定了背景色,这个属 性会被自动设置为 false
styleSheetQString组件的样式表。样式表用于定义界面显示效果

组件的 sizePolicy 属性是 QSizePolicy 类型,它定义了组件在水平和垂直方向的尺寸变化策略。Horizontal Policy 表示组件在水平方向的尺寸变化策略,Vertical Policy 表示组件在垂直方向的尺寸变化策略,其值都是枚举类型 QSizePolicy::Policy,各枚举常量的含义如下: 

• QSizePolicy::Fixed:固定尺寸,QWidget 的 sizeHint()函数返回组件的建议尺寸作为组件的固定尺寸,即便使用了布局管理,组件也不会放大或缩小。

• QSizePolicy::Minimum:最小尺寸,组件缩小到最小尺寸之后就不再缩小。使用 sizeHint() 函数的返回值作为最小尺寸,或使用 minimumSize 属性设置的值作为最小尺寸。

• QSizePolicy::Maximum:最大尺寸,组件放大到最大尺寸之后就不再放大。使用 sizeHint() 函数的返回值作为最大尺寸,或使用 maximumSize 属性设置的值作为最大尺寸。

• QSizePolicy::Preferred:首选尺寸,使用 sizeHint()函数的返回值作为最优尺寸,组件仍然可以缩放,但是放大时不会超过 sizeHint()函数返回的尺寸。

• QSizePolicy::Expanding:可扩展尺寸,sizeHint()函数的返回值是可变大小的尺寸,组件可扩展。

• QSizePolicy::MinimumExpanding:最小可扩展尺寸,sizeHint()函数的返回值是最小尺寸, 组件可扩展。

• QSizePolicy::Ignored:忽略尺寸,sizeHint()函数的返回值被忽略,组件占据尽可能大的空间。

在使用尺寸策略时,QWidget 的 sizeHint()函数会起到很大作用,在组件的父组件尺寸变化时, sizeHint()返回组件的建议尺寸。组件的 sizePolicy 属性有默认值,例如,QLineEdit 的水平策略是 Expanding,垂直策略是 Fixed,也就是水平方向可扩展,垂直方向是固定尺寸;QTextEdit 的水平 策略是 Expanding,垂直策略是 Expanding,也就是水平方向和垂直方向都是可扩展的。

一般不需要修改组件的 sizePolicy 属性,使用其默认值即可。对一个容器内的子组件使用布局管理时,布局方式和组件的 sizePolicy 属性共同决定了组件改变尺寸的方式。

下左图中,QSizePolicy 还有 Horizontal Stretch(水平延展)属性和 Vertical Stretch(垂直延展)属性,分别表示水平延展因子和垂直延展因子,它们都是整数值,取值范围是 0~255。默认值是 0,表示组件保持默认的宽度或高度。

上右图展示了一个分组框中 3 个按钮水平布局在按钮的水平延展因子设置为不同值时的显示效果。在第一个分组框中 ,3 个按钮的水平延展因子都是 0, 表示 3 个按钮的宽度平均。在第二个分组框中,前两个按钮的水平延展因子都是 0,Button3 的水平延展因子是 1,表示分组框宽度增大时,Button1 和 Button2 达到合适宽度后就不再增大,而 Button3 占据右边所有水平区域。在第三个分组框中,3 个按钮的水平延展因子分别是 1、1、2,相当于把总宽度分成四等份,Button3 的宽度是 Button1 的 2 倍。

垂直延展因子的作用也是类似的。在使用布局管理时,可以在布局的属性设置中设置延展因子,实现同样的效果。

2.QWidget 作为窗口时的属性

QWidget 可以作为独立的窗口,其子类 QMainWindow、QDialog 也是常用的窗口类。QWidget 作为窗口时有一些与窗口相关的属性,具体如下表所示:

QWidget 作为窗口时的主要属性
属性属性值类型功能
windowTitleQString窗口标题栏上的文字,若要利用 windowModified 属性,需要在标题文字中 设置占位符“[*]”
windowIconQIcon窗口标题栏上的图标
windowOpacityqreal窗口的不透明度,取值范围是 0.0~1.0。0.0 表示完全透明,1.0 表示完全 不透明。默认值是 1.0
windowFilePathQString窗口相关的含路径的文件名,这个属性只在 Windows 平台上有意义,如果没有设置 windowTitle 属性,程序将自动获取不含路径的文件名作为窗口标题
windowModifiedbool表示窗口里的文档是否被修改,若该属性值为 true,窗口标题中的占位符 “[*]”会显示为“*”
windowModalityQt::WindowModality窗口的模态,这个属性只在 Windows 平台上有意义,表示窗口是否处于上层
windowFlagsQt::WindowFlags窗口的标志,是枚举类型 Qt::WindowFlag 的一些值的组合

3.QWidget 的其他接口函数

QWidget 作为独立的窗口时,有如下一些与窗口显示有关的公有槽函数。

bool close() //关闭窗口
void hide() //隐藏窗口
void show() //显示窗口
void showFullScreen() //以全屏方式显示窗口
void showMaximized() //窗口最大化
void showMinimized() //窗口最小化
void showNormal() //全屏、最大化或最小化操作之后,恢复正常大小显示

QWidget 中定义的信号只有 3 个,定义如下:

void customContextMenuRequested(const QPoint &pos) 
void windowIconChanged(const QIcon &icon) 
void windowTitleChanged(const QString &title) 

其中,customContextMenuRequested()信号是在组件上点击鼠标右键时被发射的,一般用于创建组件的快捷菜单。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
选择Qt组件还是Qt源代码,应根据项目的具体需求进行评估和决策。 Qt组件是指Qt平台提供的一系列高度封装、易用的组件,可以有效地提升开发效率和代码质量。这些组件已经经过充分的测试和验证,具有稳定性和可靠性。选择Qt组件可以快速地构建应用程序,减少重复性的工作,提高开发效率。特别是对于一些常见的功能需求,例如图形界面、网络通信、数据操作等,Qt组件提供了丰富的选项,可以满足各种开发需求。 Qt源代码则是指Qt平台的开源代码,具有高度灵活性和可定制性。选择Qt源代码可以在有特定需求的情况下,深入了解和定制Qt框架的内部实现,以满足项目的特殊要求。特别是在需要进行底层功能扩展、优化或者修复bug时,Qt源代码可以提供更直接的操作方式。同时,通过对源代码的研究和调试,也可以加深对Qt框架的理解和掌握。 综上所述,选择Qt组件还是Qt源代码应根据项目的需求来决策。如果项目对开发效率和稳定性要求较高,且需要的功能在Qt组件已经有完备的实现,可以优先选择Qt组件。如果项目对灵活性和定制性要求较高,或者需要做一些底层的功能扩展或者调优,可以选择Qt源代码进行开发。当然,根据具体情况,也可以在使用Qt组件的同时,辅以对Qt源代码的研究和定制来满足项目的特殊需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值