Qt 常用界面组件

文章目录


一、界面组件概述

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

  • 按钮类组件。类继承关系如图所示,其中,QAbstractButton 是一个抽象类,它定义了按钮类的一些共有特性,但是不能用于创建实例对象:

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

  • 输入类组件。下图所示的是组件面板中 Input Widgets 分组的组件:

输入类组件对应的类及其功能如表所示:

  • 显示类组件。下图所示的是组件面板中 Display Widgets 分组的组件,显示类组件一般只能显示内容,而不能编辑、输入内容:

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

  • 容器类组件。在容器类组件上可以放置其他组件,并可以使用布局管理容器内的子组件。下图所示的是组件面板中 Containers 分组的组件:

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

  • Item 组件。下图所示的是组件面板中 Item Views 和 Item Widgets 分组的组件:

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

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

QWidget 是所有界面组件类的基类,所以了解 QWidget 的基本特性,通常就能了解界面组件的通用特性。 在 Qt Designer 中设计界面时,QWidget 作为界面组件时的主要属性如表所示:

组件的 sizePolicy 属性是QSizePolicy 类型,它定义了组件在水平和垂直方向的尺寸变化策略。下图展示了一个分组框中3个按钮水平布局在按钮的水平延展因子设置为不同值时的显示效果:

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

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

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

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

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

cpp 复制代码
void  customContextMenuRequested(const QPoint &pos) 
void  windowIconChanged(const QIcon &icon) 
void  windowTitleChanged(const QString &title)

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

二、布局管理

相关推荐
于小猿Sup1 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
cen__y1 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人2 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生2 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS2 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣2 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100862 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
AI科技星3 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
小小编程路3 小时前
C++ 多线程与并发
java·jvm·c++