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 都可以用这个类来设置自动补全.

Button#

这里的 widget 通常用于按钮. 当用户跟这些按钮交互时往往会触发一些 event.

  • QPushButton: 按钮

  • QCheckBox: 勾选框, 常用于 boolean 选项.

  • QRadioButton: 单选框, 在多个选项中你只能选择一个.

  • QToolButton: 工具栏, 类似于 Word 里上面的一条工具栏.

  • QGroupBox: 将多个 widget 放在一个框里, 并将其作为逻辑上的一个 Group. 常用于将 radio 和 checkbox 分组存放.

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.

Other#

  • QToolTip: 一个小的提示框, 用于显示提示信息.

  • QWhatsThis: 鼠标悬停在 widget 上时显示帮助信息. 通常不会直接使用, 而是通过 setWhatsThis 方法设置 (所有的 widget 都有这个方法).