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() 信号是在组件上点击鼠标右键时被发射的,一般用于创建组件的快捷菜单。

二、布局管理

相关推荐
开开心心_Every26 分钟前
便捷的Office批量转PDF工具
开发语言·人工智能·r语言·pdf·c#·音视频·symfony
FirstFrost --sy1 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
Yingye Zhu(HPXXZYY)2 小时前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法
追烽少年x2 小时前
Qt中的QProcess类
qt
liulilittle3 小时前
LinkedList 链表数据结构实现 (OPENPPP2)
开发语言·数据结构·c++·链表
无聊的小坏坏3 小时前
三种方法详解最长回文子串问题
c++·算法·回文串
山河木马3 小时前
前端学习C++之:.h(.hpp)与.cpp文件
前端·javascript·c++
2401_891957313 小时前
list的一些特性(C++)
开发语言·c++
二十雨辰3 小时前
[尚庭公寓]07-Knife快速入门
java·开发语言·spring
Python大数据分析@3 小时前
Origin、MATLAB、Python 用于科研作图,哪个最好?
开发语言·python·matlab