Widgets Overview#
本文总结了常用 Widgets.
Display Information#
这里的 widget 通常用于显示信息.
QLabel: 显示文本. 常用于显式单行文本. 例如显式 Key Value Pair.
QTextBrowser: 显示多行富文本, 但是不可编辑.
QListWidget: 用于显式列表数据. 例如文件浏览器中的文件列表, dropdown 中的数据列表等.
QListWidgetItem: QListWidget 中的 item 的容器.
QListView: 这是一个抽象的 list 的试图, 他是 QListWidget 的父类. 换言之 QListWidget 是封装好的 QListView, 更容易使用. 而如果你需要对其进行复杂的自定义, 那么建议使用 QListView.
QTableWidget: 用于显式二维表数据.
QTableWidgetItem: QTableWidget 中的 item 的容器.
QTableView: 和 QListView 类似, 它是 QTableWidget 的父类. 如果你要复杂的自定义功能, 那么建议使用 QTableView.
QTreeWidget: 类似于文件浏览器的树形结构.
QTreeWidgetItem: QTreeWidget 中的 item 的容器.
关于图像, 视频等内容的显式, 不属于 Widgets 的范畴, 请参考 QtGui 一节的内容.
User Input#
这里的 widget 通常用于让用户输入信息. 对于 search as you type 的应用, 你可以让用户输入信息的过程中就不断触发 event, 从而实现实时反馈.
QLineEdit: 单行文本输入框.
QTextEdit: 多行文本输入框.
QSpinBox: 具有上下按钮的数字输入框, 用于输入整数.
QDoubleSpinBox: 和 QSpinBox 类似, 不过用于输入小数.
QSlider: 滑动条, 用于调整非精确的数值.
QDial: 旋钮表盘, 用于调整非精确的数值.
QDateTimeEdit: 日期时间输入框.
QDateEdit: 日期输入框.
QCompleter: 所有的输入 widget 都可以用这个类来设置自动补全.
Container#
QWidget: 所有 widget 的基类, 通常用于自定义 widget 或是作为其他 widget 的容器.
QFrame: 一个外部有一个边框的 widget, 通常用于分割 widget.
QScrollArea: 区域大小有限制, 如果里面的 widget 太多, 会自动出现滚动条.
Layout#
QLayout: 所有的 layout 的基类.
QVBoxLayout: 垂直布局, 将 widget 垂直排列.
QHBoxLayout: 水平布局, 将 widget 水平排列.
QGridLayout: 网格布局, 将 widget 按照网格排列.
QFormLayout: 表单布局, 将 widget 按照表单排列. 本质上是一个两列的
QGridLayout
.QWidgetItem: 虽然它是一个 widget, 在使用起来更像是一个 layout, 专门用于把很多 widget 按照一定的 layout 组织在一起. 以避免复杂的嵌套. 你最好不要直接使用这个类, 直接用
QLayout.setWidget
或是QLayout.setLayout
方法既可.
GUI#
QMainWindow: 一个 GUI 通常要有一个主要的窗口.
QMenu: 用于实现操作系统上的菜单 (通常位于顶部).
QMenuBar: 用于实现操作系统上的一条菜单栏 (通常位于顶部).
QSystemTrayIcon: 这个是 Window 右下方的任务栏, 或是 Mac 右上方的任务栏. 你可以将 QMenu 添加到这里.
QDockWidget: 一个可以悬停在窗口上的 widget.
Dialog#
所谓 dialog 就是一个主要用于跟用户交互的 widget. 例如弹出一个选择文件的窗口, 弹出一个要你输入数字或者文本的窗口. 它的生命周期较短. 这里有个 “模态” 的概念. 所谓 “模态” 就是指当你进入 dialog 后, 会阻止你跟 GUI 的其他部分, 通常是 main window 交互. 当然 dialog 既可以是模态的, 也可以是非模态的. 只不过大部分的 dialog 都被设计为模态的.
Tab#
QTabWidget: 一个标签页. 每个标签页都可以放一个 widget.
QTabBar: 用于实现标签页的标签栏.
Wizard#
QWizard: wizard 是用于指导用户完成一系列操作的的特殊窗口类型小部件.
QWizardPage: 用于实现 wizard 的页面. 本质上是一个容器.
Message#
QMessageBox: 一个消息弹窗. 通常带有一个 OK 按钮使得你可以关闭它. 你也可以设置延时自动关闭.
QErrorMessage: 和 QMessageBox 项比, 它多了一个 “Show this message again “ 的 checkbox 选项. 常用于显示错误信息.
Gesture#
一些特殊的鼠标手势操作. 例如长按, 左右扫动等, 你可以为这些操作设置特定的 handler. 关于 Gesture 的更多信息请参考 Gestures in Widgets and Graphics View.
QPanGesture: 手指移动一定距离就是 Pan.
QPinchGesture: 两个手指捏着靠近或者远离.
QSwipeGesture: 手指朝着某个方向滑动.
QTapGesture: 轻轻点击.
QTapAndHoldGesture: 点击长按.
Other#
QToolTip: 一个小的提示框, 用于显示提示信息.
QWhatsThis: 鼠标悬停在 widget 上时显示帮助信息. 通常不会直接使用, 而是通过 setWhatsThis 方法设置 (所有的 widget 都有这个方法).