QWidget 类是所有用户界面对象的基类。
QWidget是用户界面的原子:它从窗口系统接收鼠标、键盘和其他事件,并在屏幕上绘制自己的表示。每个QWidget都是矩形的,它们按 Zorder排序。QWidget被其父级和它前面的QWidget裁剪。
未嵌入父窗口QWidget的窗口QWidget称为窗口。通常,窗口有一个框架和一个标题栏,尽管也可以使用合适的窗口标志创建没有这种装饰的窗口)。在 Qt 中,QMainWindow 和 QDialog 的各种子类是最常见的窗口类型。
每个QWidget的构造函数都接受一个或两个标准参数:
QWidget *parent = nullptr 是新QWidget的父级。如果它是 nullptr(默认值),则新QWidget将是一个窗口。如果不是,它将是父级的子级,并受父级几何形状的约束(除非您将 Qt::Window 指定为窗口标志)。
Qt::WindowFlags f = { } (如果可用)设置窗口标志;默认值适用于几乎所有QWidget,但要获得没有窗口系统框架的窗口,您必须使用特殊标志。
当一个QWidget被用作一个容器来组合多个子QWidget时,它被称为复合QWidget。这些可以通过构建具有所需视觉属性的QWidget(例如 QFrame)并向其添加通常由布局管理的子QWidget来创建。上图显示了使用 Qt Designer 创建的这样一个复合QWidget。
复合QWidget也可以通过子类化标准QWidget(例如 QWidget 或 QFrame)并在子类的构造函数中添加必要的布局和子QWidget来创建。
由于 QWidget 是 QPaintDevice 的子类,因此子类可用于显示使用 QPainter 类实例的一系列绘画操作组成的自定义内容。
每个QWidget都在其paintEvent() 函数中执行所有绘画操作。每当需要重绘QWidget时调用此方法,无论是由于某些外部更改还是应用程序请求时。
在实现新的QWidget时,重新实现 sizeHint() 为QWidget提供合理的默认大小并使用 setSizePolicy() 设置正确的size policy几乎总是有用的。
默认情况下,不提供大小提示的复合QWidget将根据其子QWidget的空间要求调整大小。
size policy允许您为布局管理系统提供良好的默认行为,以便其他QWidget可以轻松包含和管理您的QWidget。默认size policy指示大小提示表示QWidget的首选大小,这通常对于许多QWidget来说已经足够了。
QWidget响应通常由用户操作引起的事件。 Qt 通过使用包含每个事件信息的 QEvent 子类实例调用特定的事件处理函数来将事件传递给QWidget。
如果您的QWidget仅包含子QWidget,您可能不需要实现任何事件处理程序。如果您想检测子QWidget中的鼠标点击,请在QWidget的 mousePressEvent() 中调用子部件的 underMouse() 函数。
从 Qt 4.5 开始,可以在支持合成的窗口系统上创建具有半透明区域的窗口。
要在最上层QWidget中启用此功能,请使用 setAttribute() 设置其 Qt::WA_TranslucentBackground 属性,并确保在您希望部分透明的区域中使用非不透明颜色绘制其背景。
平台说明:
X11:此功能依赖于使用支持 ARGB 视觉效果的 X 服务器和合成窗口管理器。
Windows:QWidget需要有 Qt::FramelessWindowHint 为半透明工作设置的窗口标志。
macOS:QWidget需要设置 Qt::FramelessWindowHint 窗口标志才能使半透明工作。