QWidget类

The QWidget类是所有用户界面对象的基础类。 更多...

头文件 #include <QWidget>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承自 QObjectQPaintDevice
由以下类型继承
39个类型

QAbstractButton, QAbstractSlider, QAbstractSpinBox, QCalendarWidget, QComboBox, ...

公共类型

枚举RenderFlag { DrawWindowBackground, DrawChildren, IgnoreMask }
标志RenderFlags

属性

公共函数

QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtualQWidget()
boolacceptDrops() const
QStringaccessibleDescription() const
QStringaccessibleName() const
QList<<QAction *>actions() const
voidactivateWindow()
voidaddAction(QAction *action)
(since 6.3) QAction *addAction(const QString &text)
(since 6.3) QAction *addAction(const QIcon &icon, const QString &text)
(since 6.3) QAction *addAction(const QString &text, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)
(since 6.3) QAction *addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)
(since 6.3) QAction *addAction(const QString &text, Args &&... args)
(since 6.3) QAction *addAction(const QIcon &icon, const QString &text, Args &&... args)
(since 6.3) QAction *addAction(const QString &text, const QKeySequence &shortcut)
(since 6.3) QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut)
(since 6.3) QAction *addAction(const QString &text, const QKeySequence &shortcut, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)
(since 6.3) QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)
(since 6.3) QAction *addAction(const QString &text, const QKeySequence &shortcut, Args &&... args)
(since 6.3) QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, Args &&... args)
voidaddActions(const QList<<QAction *> &actions)
voidadjustSize()
boolautoFillBackground() const
QPalette::ColorRolebackgroundRole() const
QBackingStore *backingStore() const
QSizebaseSize() const
QWidget *childAt(int x, int y) const
QWidget *childAt(const QPoint &p) const
QRectchildrenRect() const
QRegionchildrenRegion() const
voidclearFocus()
voidclearMask()
QMarginscontentsMargins() const
QRectcontentsRect() const
Qt::ContextMenuPolicycontextMenuPolicy() const
QCursorcursor() const
WIdeffectiveWinId() const
voidensurePolished() const
Qt::FocusPolicyfocusPolicy() const
QWidget *focusProxy() const
QWidget *focusWidget() const
const QFont &font() const
QFontInfofontInfo() const
QFontMetricsfontMetrics() const
QPalette::ColorRoleforegroundRole() const
QRectframeGeometry() const
QSizeframeSize() const
const QRect &geometry() const
QPixmapgrab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))
voidgrabGesture(Qt::GestureType gesture, Qt::GestureFlags flags = Qt::GestureFlags())
voidgrabKeyboard()
voidgrabMouse()
voidgrabMouse(const QCursor &cursor)
intgrabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut)
QGraphicsEffect *graphicsEffect() const
QGraphicsProxyWidget *graphicsProxyWidget() const
boolhasEditFocus() const
boolhasFocus() const
virtual boolhasHeightForWidth() const
boolhasMouseTracking() const
boolhasTabletTracking() const
intheight() const
virtual intheightForWidth(int w) const
Qt::InputMethodHintsinputMethodHints() const
virtual QVariantinputMethodQuery(Qt::InputMethodQuery query) const
voidinsertAction(QAction *before, QAction *action)
voidinsertActions(QAction *before, const QList<QAction *> &actions)
boolisActiveWindow() const
boolisAncestorOf(const QWidget *child) const
boolisEnabled() const
boolisEnabledTo(const QWidget *ancestor) const
boolisFullScreen() const
boolisHidden() const
boolisMaximized() const
boolisMinimized() const
boolisModal() const
boolisVisible() const
boolisVisibleTo(const QWidget *ancestor) const
boolisWindow() const
boolisWindowModified() const
QLayout *layout() const
Qt::LayoutDirectionlayoutDirection() const
QLocalelocale() const
(since 6.0) QPointFmapFrom(const QWidget *parent, const QPointF &pos) const
QPointmapFrom(const QWidget *parent, const QPoint &pos) const
(since 6.0) QPointFmapFromGlobal(const QPointF &pos) const
QPointmapFromGlobal(const QPoint &pos) const
(since 6.0) QPointFmapFromParent(const QPointF &pos) const
QPointmapFromParent(const QPoint &pos) const
(since 6.0) QPointFmapTo(const QWidget *parent, const QPointF &pos) const
QPointmapTo(const QWidget *parent, const QPoint &pos) const
(since 6.0) QPointFmapToGlobal(const QPointF &pos) const
QPointmapToGlobal(const QPoint &pos) const
(since 6.0) QPointFmapToParent(const QPointF &pos) const
QPointmapToParent(const QPoint & pos) const
QRegionmask() const
intmaximumHeight() const
QSizemaximumSize() const
intmaximumWidth() const
intminimumHeight() const
QSizeminimumSize() const
virtual QSizeminimumSizeHint() const
intminimumWidth() const
voidmove(const QPoint &)
voidmove(int x, int y)
QWidget *nativeParentWidget() const
QWidget *nextInFocusChain() const
QRectnormalGeometry() const
voidoverrideWindowFlags(Qt::WindowFlags flags)
const QPalette &palette() const
QWidget *parentWidget() const
QPointpos() const
QWidget *previousInFocusChain() const
QRectrect() const
voidreleaseKeyboard()
voidreleaseMouse()
voidreleaseShortcut(int id)
voidremoveAction(QAction *action)
voidrender(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
voidrender(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
voidrepaint(int x, int y, int h, int h)
voidrepaint(const QRect &rect)
voidrepaint(const QRegion &rgn)
voidresize(const QSize &)
voidresize(int w, int h)
boolrestoreGeometry(const QByteArray &geometry)
QByteArraysaveGeometry() const
QScreen *screen() const
voidscroll(int dx, int dy)
voidscroll(int dx, int dy, const QRect &r)
voidsetAcceptDrops(bool on)
voidsetAccessibleDescription(const QString &description)
voidsetAccessibleName(const QString &name)
voidsetAttribute(Qt::WidgetAttribute attribute, bool on = true)
voidsetAutoFillBackground(bool enabled)
voidsetBackgroundRole(QPalette::ColorRole role)
voidsetBaseSize(const QSize &)
voidsetBaseSize(int basew, int baseh)
voidsetContentsMargins(int left, int top, int right, int bottom)
voidsetContentsMargins(const QMargins &margins)
voidsetContextMenuPolicy(Qt::ContextMenuPolicy policy)
voidsetCursor(const QCursor &)
voidsetEditFocus(bool enable)
voidsetFixedHeight(int h)
voidsetFixedSize(const QSize &s)
voidsetFixedSize(int w, int h)
voidsetFixedWidth(int w)
voidsetFocus(Qt::FocusReason reason)
voidsetFocusPolicy(Qt::FocusPolicy policy)
voidsetFocusProxy(QWidget *w)
voidsetFont(const QFont &)
voidsetForegroundRole(QPalette::ColorRole role)
voidsetGeometry(const QRect &)
voidsetGeometry(int x, int y, int w, int h)
voidsetGraphicsEffect(QGraphicsEffect *effect)
voidsetInputMethodHints(Qt::InputMethodHints hints)
voidsetLayout(QLayout *layout)
voidsetLayoutDirection(Qt::LayoutDirection direction)
voidsetLocale(const QLocale &locale)
voidsetMask(const QBitmap &bitmap)
voidsetMask(const QRegion &region)
voidsetMaximumHeight(int maxh)
voidsetMaximumSize(const QSize &)
voidsetMaximumSize(int maxw, int maxh)
voidsetMaximumWidth(int maxw)
voidsetMinimumHeight(int minh)
voidsetMinimumSize(const QSize &)
voidsetMinimumSize(int minw, int minh)
voidsetMinimumWidth(int minw)
voidsetMouseTracking(bool enable)
voidsetPalette(const QPalette &)
voidsetParent(QWidget *parent)
voidsetParent(QWidget *parent, Qt::WindowFlags f)
voidsetScreen(QScreen *screen)
voidsetShortcutAutoRepeat(int id, bool enable = true)
voidsetShortcutEnabled(int id, bool enable = true)
voidsetSizeIncrement(const QSize &)
voidsetSizeIncrement(int w, int h)
voidsetSizePolicy(QSizePolicy)
voidsetSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
voidsetStatusTip(const QString &)
voidsetStyle(QStyle *style)
voidsetTabletTracking(bool enable)
voidsetToolTip(const QString &)
voidsetToolTipDuration(int msec)
voidsetUpdatesEnabled(bool enable)
voidsetWhatsThis(const QString &)
voidsetWindowFilePath(const QString &filePath)
voidsetWindowFlag(Qt::WindowType flag, bool on = true)
voidsetWindowFlags(Qt::WindowFlags type)
voidsetWindowIcon(const QIcon &icon)
voidsetWindowModality(Qt::WindowModality windowModality)
voidsetWindowOpacity(qreal level)
voidsetWindowRole(const QString &role)
voidsetWindowState(Qt::WindowStates windowState)
voidsetupUi(QWidget *widget)
QSizesize() const
virtual QSizesizeHint() const
QSizesizeIncrement() const
QSizePolicysizePolicy() const
voidstackUnder(QWidget *w)
QStringstatusTip() const
QStyle *style() const
QStringstyleSheet() const
booltestAttribute(Qt::WidgetAttribute attribute) const
QStringtoolTip() const
inttoolTipDuration() const
boolunderMouse() const
voidungrabGesture(Qt::GestureType gesture)
voidunsetCursor()
voidunsetLayoutDirection()
voidunsetLocale()
voidupdate(int x, int y, int w, int h)
voidupdate(const QRect &rect)
voidupdate(const QRegion &rgn)
voidupdateGeometry()
boolupdatesEnabled() const
QRegionvisibleRegion() const
QStringwhatsThis() const
intwidth() const
WIdwinId() const
QWidget *window() const
QStringwindowFilePath() const
Qt::WindowFlagswindowFlags() const
QWindow *windowHandle() const
QIconwindowIcon() const
Qt::WindowModalitywindowModality() const
qrealwindowOpacity() const
QStringwindowRole() const
Qt::WindowStateswindowState() const
QStringwindowTitle() const
Qt::WindowTypewindowType() const
intx() const
inty() const

重新实现公开函数

virtual QPaintEngine *paintEngine() const override

Public Slots

bool关闭()
void隐藏()
void降低()
void提升()
void重绘()
voidsetDisabled(bool disable)
voidsetEnabled(bool)
void设置焦点()
voidsetHidden(bool hidden)
voidsetStyleSheet(const QString &styleSheet)
virtual voidsetVisible(bool visible)
voidsetWindowModified(bool)
voidsetWindowTitle(const QString &)
void显示()
void全屏显示()
void最大化显示()
void最小化显示()
void正常显示()
void更新()

信号

voidcustomContextMenuRequested(const QPoint &pos)
voidwindowIconChanged(const QIcon &icon)
voidwindowTitleChanged(const QString &title)

静态公有成员

QWidget *createWindowContainer(QWindow *window, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
QWidget *find(WId id)
QWidget *键盘抓取器()
QWidget *鼠标抓取器()
voidsetTabOrder(QWidget *first, QWidget *second)
(since 6.6) voidsetTabOrder(std::initializer_list<QWidget *> widgets)

受保护的函数

virtual voidactionEvent(QActionEvent *event)
virtual voidchangeEvent(QEvent *event)
virtual voidcloseEvent(QCloseEvent *event)
virtual voidcontextMenuEvent(QContextMenuEvent *event)
voidcreate(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true)
voiddestroy(bool destroyWindow = true, bool destroySubWindows = true)
virtual voiddragEnterEvent(QDragEnterEvent *event)
virtual voiddragLeaveEvent(QDragLeaveEvent *event)
virtual voiddragMoveEvent(QDragMoveEvent *event)
virtual voiddropEvent(QDropEvent *event)
virtual voidenterEvent(QEnterEvent *event)
virtual voidfocusInEvent(QFocusEvent *event)
bool焦点下一子对象()
virtual boolfocusNextPrevChild(bool next)
virtual voidfocusOutEvent(QFocusEvent *event)
bool焦点上一子对象()
virtual voidhideEvent(QHideEvent *event)
virtual voidinputMethodEvent(QInputMethodEvent *event)
virtual voidkeyPressEvent(QKeyEvent *event)
virtual voidkeyReleaseEvent(QKeyEvent *event)
virtual voidleaveEvent(QEvent *event)
virtual voidmouseDoubleClickEvent(QMouseEvent *event)
virtual voidmouseMoveEvent(QMouseEvent *event)
virtual voidmousePressEvent(QMouseEvent *event)
virtual voidmouseReleaseEvent(QMouseEvent *event)
virtual voidmoveEvent(QMoveEvent *event)
virtual boolnativeEvent(const QByteArray &eventType, void *message, qintptr *result)
virtual voidpaintEvent(QPaintEvent *event)
virtual voidresizeEvent(QResizeEvent *event)
virtual voidshowEvent(QShowEvent *event)
virtual voidtabletEvent(QTabletEvent *event)
virtual voidwheelEvent(QWheelEvent *event)

重写受保护的函数

virtual boolevent(QEvent *event) override
virtual voidinitPainter(QPainter *painter) const override
virtual intmetric(QPaintDevice::PaintDeviceMetric m) const override

受保护的槽函数

voidupdateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll)

详细说明

控件是用户界面的基本单元:它从窗口系统接收鼠标、键盘和其他事件,并在屏幕上绘制自身的表示。每个控件都是矩形的,并且它们按照Z轴顺序排序。控件会被其父控件和在其前面的控件剪裁。

未嵌入父控件的控件称为窗口。通常,窗口有边框和标题栏,尽管也可以使用合适的窗口标志来创建没有此类装饰的窗口。在Qt中,QMainWindowQDialog 的各种子类是最常见的窗口类型。

每个控件的构造函数接受一到两个标准参数

  1. QWidget *parent = nullptr 是新控件的父控件。如果它是 nullptr(默认值),则新控件将是一个窗口。如果不是,它将是 parent 的子控件,并受到 parent 几何形状的限制(除非你指定 Qt::Window 作为窗口标志)。
  2. Qt::WindowFlags f = { }(如果可用)设置窗口标志;默认值适用于大多数控件,但要得到例如没有窗口系统边框的窗口,您必须使用特殊标志。

QWidget 有许多成员函数,但其中一些基本功能较小;例如,QWidget 有一个字体属性,但从不使用它本身。有许多子类提供了真正的功能,例如 QLabelQPushButtonQListWidgetQTabWidget

顶级和子控件

没有父控件的控件始终是一个独立的窗口(顶级控件)。对于这些控件,setWindowTitle() 和 setWindowIcon() 分别设置标题栏和图标。

非窗口控件是子控件,在父控件内显示。Qt中的大多数控件主要用作子控件。例如,可以将按钮作为顶级窗口显示,但大多数人喜欢将按钮放在其他控件中,例如 QDialog

A parent widget containing various child widgets.

上面的图示显示了一个 QGroupBox 控件用于在 QGridLayout 提供的布局中容纳各种子控件。已标出 QLabel 子控件以表示它们的全尺寸。

如果您想使用 QWidget 来容纳子控件,通常需要向父 QWidget 添加一个布局。有关更多信息,请参阅 布局管理

组合控件

当控件用作容器来组合多个子控件时,它被称为组合控件。这可以通过构建具有所需可视属性的控件 - 例如QFrame - 并向其中添加子控件来实现,通常由布局管理。

组合控件也可以通过在子类中添加所需的布局和子控件,并从QWidget或QFrame等标准控件中派生而来创建。许多与 Qt 一起提供的示例 都使用了这种方法,并在Qt的Widgets教程中进行了介绍。

自定义控件和绘图

由于 QWidget 是 QPaintDevice 的子类,子类可以用来显示自定义内容,该内容是由一系列与 QPainter 类实例一起执行的绘图操作组成的。这种方法与 Graphics View Framework 所使用的大纲式方法相对立,在后者中,应用程序将项目添加到场景中,而框架本身进行渲染。

每个小部件在其 paintEvent() 函数内部执行所有绘图操作。这在小部件需要重新绘制时调用,无论是由于外部更改还是应用程序请求。

模拟时钟示例展示了简单小部件如何处理绘图事件。

大小提示和大小策略

在实现新小部件时,几乎总是有用重新实现 sizeHint() 来为小部件提供合理的默认大小,并使用 setSizePolicy() 设置正确的大小策略。

默认情况下,不提供大小提示的复合小部件将根据其子小部件的空间需求来调整大小。

大小策略可以让您为布局管理系统提供良好的默认行为,以便其他小部件可以轻松包含和管理您的小部件。默认的大小策略表明大小提示表示小部件的首选大小,这对于许多小部件来说通常足够。

注意:顶层小部件的大小受限于桌面高度和宽度的2/3。如果这些界限不足,您可以手动 调整大小

事件

小部件响应用户行动通常引起的事件。Qt 通过调用特定的事件处理函数,以包含有关每个事件信息的 QEvent 子类实例将事件传递给小部件。

如果您的部件仅包含子部件,您可能不需要实现任何事件处理函数。如果您想在子部件中检测鼠标单击,请在小部件的 mousePressEvent() 内部调用子部件的 underMouse() 函数。

涂鸦示例实现了一组更广泛的事件来处理鼠标移动、按钮按下和窗口调整大小。

您需要为自身的小部件提供行为和内容,但以下是对与 QWidget 相关的事件的简要概述,从最常见的事件开始。

  • paintEvent() 在小部件需要重新绘制时调用。每个显示自定义内容的小部件必须实现它。只有 paintEvent() 或由 paintEvent() 调用的函数中可以使用 QPainter 进行绘画。
  • resizeEvent() 在小部件调整大小时调用。
  • mousePressEvent() 在鼠标按钮在小部件内部按下时调用,或当小部件使用 grabMouse() 捕获鼠标时调用。不释放鼠标按钮相当于调用 grabMouse
  • mouseReleaseEvent() 被调用时表示鼠标按钮被释放。当一个窗口部件接收到了对应的鼠标按下事件时,它会接收到鼠标释放事件。这意味着,如果用户在 您的 窗口部件中按下鼠标,然后拖拽鼠标到其他地方释放鼠标按钮,您的 窗口部件将会接收到释放事件。有一个例外:如果在鼠标按钮按下的同时出现一个弹出菜单,该弹出菜单会立即接管鼠标事件。
  • mouseDoubleClickEvent() 在用户在窗口部件中双击时被调用。如果用户双击,窗口部件会收到一个鼠标按下事件、一个鼠标释放事件、(一个鼠标点击事件,)第二个鼠标按下事件、这个事件,最后是第二次鼠标释放事件。(如果在操作期间鼠标没有稳固地被按下,也可能会接收到一些鼠标移动事件。)第二个点击到来之前,无法 区分点击和双击。(这也是为什么大多数GUI书籍推荐将双击作为单击的扩展,而不是触发不同的操作的原因之一。)

接受键盘输入的窗口部件需要重新实现一些额外的事件处理程序。

  • keyPressEvent() 在每次按键和按键被按下足够长的时间以进行自动重复时被调用。如果未用于焦点更改机制,TabShift+Tab 键才会被传递给窗口部件。为了强制这些键被您的窗口部件处理,您必须重新实现 QWidget::event()。
  • focusInEvent() 在窗口部件获得键盘焦点时(假设您已经调用了 setFocusPolicy())被调用。行为良好的窗口部件会以明确但微妙的方式表明它们拥有键盘焦点。
  • focusOutEvent() 在窗口部件失去键盘焦点时被调用。

您可能还需要重新实现一些不常见的事件处理程序。

  • mouseMoveEvent() 在鼠标在按下鼠标按钮时移动时被调用。这在大纲操作期间非常有用。如果调用 setMouseTracking(true),则即使在没有按钮被按下的情况下,也会接收到鼠标移动事件。(也请参见拖放指南。)
  • keyReleaseEvent() 在每次按键释放和按键(如果按键自动重复)被按下时被调用。在这种情况下,对于每个重复,窗口部件都会收到一对按键释放和按键事件。如果未用于焦点更改机制,TabShift+Tab 键才会被传递给窗口部件。为了强制这些键被您的窗口部件处理,您必须重新实现 QWidget::event()。
  • wheelEvent() 在用户旋转鼠标滚轮且窗口部件具有焦点时被调用。
  • enterEvent() 当鼠标进入窗口部件的屏幕空间时被调用。(这排除掉了任何由窗口部件的子部件拥有的屏幕空间。)
  • leaveEvent() 当鼠标离开窗口部件的屏幕空间时被调用。如果鼠标进入子窗口部件,它不会触发 leaveEvent
  • moveEvent() 当窗口部件相对于其父对象移动时被调用。
  • closeEvent() 当用户关闭窗口部件(或调用 close())时被调用。

文档中还描述了一些相对较不明显的事件,这些事件在 QEvent::Type 相关文档中。要处理这些事件,您需要直接重新实现 event()。

事件()函数的默认实现在处理TabShift+Tab(用于移动键盘焦点),并将大多数其他事件传递到上方更专业的处理程序之一。

事件及其传递机制在事件系统中有所介绍。

函数和属性组

上下文函数和属性
窗口函数显示(), 隐藏(), 提升(), 降低(), 关闭()。
顶级窗口窗口已修改, 窗口标题, 窗口图标, 活动窗口, 激活窗口(), 最小化, 显示最小化(), 最大化, 显示最大化(), 全屏, 显示全屏(), 显示为正常()。
窗口内容更新内容(), 重绘(), 滚动()。
几何形状位置, X(), Y(), 矩形, 大小, 宽度(), 高度(), 移动(), 调整大小(), 大小策略, 大小建议(), 最小大小建议(), 更新几何形状(), 布局(), 框架几何形状, 几何形状, 子矩形, 子区域, 调整大小(), 从全局映射(), 映射到全局(), 从父级映射(), 映射到父级(), 最大尺寸, 最小尺寸, 大小增量, 基本大小, 设置固定大小()
模式可见, 对可见(), 可用, 可用于(), 模式, 是窗口(), 鼠标跟踪, 更新启用, 可见区域().
外观和感觉样式(), 设置样式(), 样式表, 光标样式, 字体, 调色板, 背景作用(), 设置背景作用(), 字体信息(), 字体度量().
键盘焦点功能焦点, 焦点策略, 设置焦点(), 清除焦点(), 设置制表符顺序(), 设置焦点代理(), 关注下一个子项(), 关注上一个子项().
鼠标和键盘捕获grabMouse(),releaseMouse(),grabKeyboard(),releaseKeyboard(),mouseGrabber(),keyboardGrabber()。
事件处理器event(),mousePressEvent(),mouseReleaseEvent(),mouseDoubleClickEvent(),mouseMoveEvent(),keyPressEvent(),keyReleaseEvent(),focusInEvent(),focusOutEvent(),wheelEvent(),enterEvent(),leaveEvent(),paintEvent(),moveEvent(),resizeEvent(),closeEvent(),dragEnterEvent(),dragMoveEvent(),dragLeaveEvent(),dropEvent(),childEvent(),showEvent(),hideEvent(),customEvent(),changeEvent()。
系统函数parentWidget(),window(),setParent(),winId(),find(),metric()。
上下文菜单contextMenuPolicycontextMenuEventcustomContextMenuRequestedactions()。
交互式帮助setToolTip(),setWhatsThis()。

小部件样式表

除了每个平台的标准小部件样式外,小部件还可以根据在 样式表 中指定的规则进行样式化。该功能可以使您自定义特定小部件的外观,为用户提供有关其目的的视觉提示。例如,按钮可以按特定方式进行样式化,以表明其执行破坏性操作。

Qt 样式表 文档中对小部件样式表的用法进行了更详细的描述。

透明度和双缓存

QWidget 自动双缓存其绘制,因此在 paintEvent() 中无需写入双缓存代码以避免闪烁。

默认情况下,只要未设置 Qt::WA_PaintOnScreen,父小部件的内容就会传播到每个子小部件中。自定义小部件可以写入以利用此功能,通过更新不规则区域(以创建非矩形子小部件)或使用具有小于全 alpha 成分的颜色进行绘制。下图显示了如何调整自定义小部件的属性和属性以达到不同效果。

在上图中,构建了一个带有减去区域的半透明矩形子小部件,并将其添加到父小部件中(一个显示位图的 QLabel)。然后,通过设置不同的属性和控件属性来实现不同效果

  • 左侧的控件没有设置额外的属性或控件属性。这种默认状态适用于大多数具有透明度、形状不规则或未使用不透明画笔覆盖整个区域的自定义控件。
  • 中心的部件设置了autoFillBackground属性。这个属性用于依赖部件提供默认背景的自定义部件,并且不会使用不透明画笔覆盖其整个区域。
  • 右侧的部件设置了Qt::WA_OpaquePaintEvent部件属性。这表示该部件将使用不透明颜色覆盖其整个区域。部件的区域最初是未初始化的,在图表中用代表印刷区域的红色斜线网格图案表示。

为了快速更新具有简单背景颜色的自定义部件,例如实时绘图或图表部件,最好定义合适的背景颜色(使用setBackgroundRole()与QPalette::Window角色),设置autoFillBackground属性,并在部件的paintEvent()中只实现必要的绘图功能。

为了快速更新不断使用不透明内容覆盖其整个区域的自定义部件,例如视频流部件,最好设置部件的Qt::WA_OpaquePaintEvent,避免与重新绘制部件背景相关的任何不必要的开销。

如果部件同时设置了Qt::WA_OpaquePaintEvent部件属性autoFillBackground属性,则Qt::WA_OpaquePaintEvent属性具有优先级。根据您的需求,您应该选择其中的一个。

父级部件的内容也传递给标准Qt部件。如果父级部件以非标准方式进行装饰,可能会得到一些意想不到的结果,如下面的图表所示。

自定义标准Qt部件绘图行为的范围(不使用子类化)略小于自定义部件。通常,可以通过设置其autoFillBackground属性来实现标准部件的期望外观。

创建半透明窗口

您可以在支持合成的窗口系统中创建具有半透明区域的窗口。

要在顶级部件中启用此功能,请使用setAttribute()将其Qt::WA_TranslucentBackground属性设置,并确保使用非不透明颜色在允许部分透明的区域绘制背景。

平台说明

  • X11:此功能依赖于支持ARGB视觉效果和组合窗口管理器的X服务器。
  • Windows:需要将Widgets的Qt::FramelessWindowHint窗口标志设置为让透明度起作用。
  • macOS:需要将Widgets的Qt::FramelessWindowHint窗口标志设置为让透明度起作用。

本地部件与非本地部件

非本地部件是窗口系统未知的部件。它们没有与之关联的原生窗口句柄。这个功能显著提高了部件的绘图、调整大小和去除闪烁的速度。

如果您需要具有本地窗口的旧行为,请选择以下选项之一

  1. 在您的环境中使用QT_USE_NATIVE_WINDOWS=1
  2. Qt::AA_NativeWindows属性设置在您的应用程序上。所有Widgets都将是本地Widgets。
  3. Qt::WA_NativeWindow属性设置在Widgets:该Widgets本身及其所有祖先都将成为本地(除非设置了Qt::WA_DontCreateNativeAncestors)。
  4. 调用 QWidget::winId 以强制使用原生窗口(这表示3)。
  5. 将属性 Qt::WA_PaintOnScreen 设置为强制使用原生窗口(这表示3)。

另请参阅QEventQPainterQGridLayoutQBoxLayout

成员类型文档

枚举 QWidget::RenderFlag
flags QWidget::RenderFlags

此枚举描述了调用 QWidget::render 时如何渲染小部件。

常量描述
QWidget::DrawWindowBackground0x1如果启用此选项,即使在 autoFillBackground 没有设置的情况下,小部件的背景也会被渲染到目标中。默认情况下,此选项已启用。
QWidget::DrawChildren0x2如果启用此选项,则将小部件的子项递归地渲染到目标中。默认情况下,此选项已启用。
QWidget::IgnoreMask0x4如果启用此选项,则在渲染到目标时将忽略小部件的 QWidget::mask()。默认情况下,此选项已禁用。

The RenderFlags 类型是 QFlags<RenderFlag> 的 typedef。它存储 RenderFlag 值的 OR 组合。

属性文档

acceptDrops : bool

此属性保留鼠标拖动事件是否启用此小部件的信息

将此属性设置为 true 会通知系统此小部件 可能会 能够接受拖动事件。

如果小部件是桌面(windowType() == Qt::Desktop),如果另一个应用程序正在使用桌面,可能会失败;您可以调用 acceptDrops() 来测试是否发生这种情况。

注意:不要在拖放事件处理器中修改此属性。

默认情况下,此属性为 false

访问函数

boolacceptDrops() const
voidsetAcceptDrops(bool on)

另请参阅拖放

accessibleDescription : QString

此属性保留了辅助技术看到的组件描述。

组件的可访问描述应该传达组件的功能。虽然accessibleName应是一个简短、简洁的字符串(例如 保存),但描述应提供更多的上下文,例如 保存当前文档

此属性必须是本地化的。

默认情况下,此属性包含一个空字符串,Qt 会回退到使用工具提示来提供此信息。

访问函数

QStringaccessibleDescription() const
voidsetAccessibleDescription(const QString &description)

另请参阅QWidget::accessibleNameQAccessibleInterface::text

accessibleName : QString

此属性保留了辅助技术看到的组件名称。

这是辅助技术(例如屏幕阅读器)通过此名称宣布此组件的主要名称。对于大多数组件,设置此属性是不必要的。例如,对于 QPushButton,将使用按钮的文本。

当小部件不提供任何文本时,设置此属性很重要。例如,只包含图标的一个按钮,需要设置此属性以与屏幕阅读器一起工作。名称应简短,并与小部件传达的可视信息相等效。

此属性必须是本地化的。

默认情况下,此属性包含一个空字符串。

访问函数

QStringaccessibleName() const
voidsetAccessibleName(const QString &name)

另请参阅 QWidget::accessibleDescriptionQAccessibleInterface::text().

autoFillBackground : bool

此属性表示小部件的背景是否自动填充。

如果启用,此属性将导致 Qt 在调用绘制事件之前填充小部件的背景。所使用的颜色由小部件的 调色板 中的 QPalette::Window 颜色角色定义。

此外,除非设置了 WA_OpaquePaintEvent 或 WA_NoSystemBackground 属性,否则窗口总是使用 QPalette::Window 填充。

如果小部件的父级具有静态渐变的背景,则无法关闭(即将其设置为 false)此属性。

警告: 在结合使用 Qt 样式表 时小心使用此属性。当一个窗口有一个具有有效背景或边框图像的样式表时,此属性会自动禁用。

默认情况下,此属性为 false

访问函数

boolautoFillBackground() const
voidsetAutoFillBackground(bool enabled)

另请参阅 Qt::WA_OpaquePaintEventQt::WA_NoSystemBackground透明度和双缓冲

baseSize : QSize

此属性表示小部件的基本大小。

基本大小用于计算窗口在 sizeIncrement 定义的情况下适当的大小。

默认情况下,对于新创建的窗口,此属性包含一个宽度和高度为零的大小。

访问函数

QSizebaseSize() const
voidsetBaseSize(const QSize &)
voidsetBaseSize(int basew, int baseh)

另请参阅 setSizeIncrement

[只读] childrenRect : const QRect

此属性表示窗口子项的外边形。

隐藏的子项被排除。

默认情况下,对于没有子项的窗口,此属性包含边的宽度和高度为零的矩形,位于原点。

访问函数

QRectchildrenRect() const

另请参阅 childrenRegion() 和 geometry

[只读] childrenRegion : const QRegion

此属性表示窗口子项占用的合并区域。

隐藏的子项被排除。

默认情况下,对于没有子项的窗口,此属性包含空区域。

访问函数

QRegionchildrenRegion() const

另请参阅 childrenRect()、geometrymask

contextMenuPolicy : Qt::ContextMenuPolicy

该属性描述了小部件如何显示上下文菜单

此属性的默认值为 Qt::DefaultContextMenu,表示会调用 contextMenuEvent() 处理器。其他值包括 Qt::NoContextMenuQt::PreventContextMenuQt::ActionsContextMenuQt::CustomContextMenu。当使用 Qt::CustomContextMenu 时,会发出 customContextMenuRequested() 信号。

访问函数

Qt::ContextMenuPolicycontextMenuPolicy() const
voidsetContextMenuPolicy(Qt::ContextMenuPolicy policy)

另请参阅contextMenuEvent()、customContextMenuRequested() 和 actions

cursor : QCursor

该属性决定了该小部件的鼠标指针形状

当鼠标悬停在此小部件上时,鼠标指针将显示此形状。请参阅 预定义的指针对象列表 获取一系列可用形状。

一个编辑器小部件可能使用 I-beam 光标

setCursor(Qt::IBeamCursor);

如果没有设置指针,或者调用 unsetCursor() 后,将使用父指针的指针。

默认情况下,此属性包含一个具有 Qt::ArrowCursor 形状的指针。

一些窗口底层实现如果在指针离开小部件时即使鼠标已被抓取也会重置指针。如果要在所有小部件上设置指针,即使在窗口外,也请考虑使用 QGuiApplication::setOverrideCursor

访问函数

QCursorcursor() const
voidsetCursor(const QCursor &)
voidunsetCursor()

另请参阅QGuiApplication::setOverrideCursor

enabled : bool

此属性表示小部件是否启用

通常,启用的小部件处理键盘和鼠标事件;禁用的小部件则不处理。例外是 QAbstractButton

一些小部件在禁用时可能会以不同的方式显示自己。例如,按钮可能会将标签绘制为灰色。如果您的需要知道当小部件变为启用或禁用,您可以使用类型为 QEvent::EnabledChangechangeEvent()。

禁用小部件时,会隐式禁用所有子小部件。相应地,取消禁用所有子小部件,除非它们已被显式禁用。如果父小部件保持禁用,则不可能显式启用不是窗口的子小部件。

默认情况下,此属性为 true

访问函数

boolisEnabled() const
voidsetEnabled(bool)

另请参阅isEnabledToQKeyEventQMouseEventchangeEvent

[只读] focus : const bool

该属性表示此小部件(或其焦点代理)是否有键盘输入焦点

默认情况下,此属性为 false

注意:获取小部件此属性值实际上相当于检查 QApplication::focusWidget() 是否引用小部件。

访问函数

boolhasFocus() const

另请参阅 setFocus(),clearFocus(),setFocusPolicy() 以及 QApplication::focusWidget

focusPolicy : Qt::FocusPolicy

此属性表示小部件如何接收键盘焦点

如果小部件通过制表位接收键盘焦点,则策略为 Qt::TabFocus,如果通过单击接收焦点,则策略为 Qt::ClickFocus,如果它接受两种焦点,则策略为 Qt::StrongFocus,如果它不接受任何焦点,则策略为 Qt::NoFocus(默认值)。

如果小部件处理键盘事件,则必须启用其键盘焦点。通常在构造函数中执行此操作。例如,QLineEdit 构造函数调用 setFocusPolicy(Qt::StrongFocus)。

如果小部件具有焦点代理,则焦点策略将传播到该代理。

访问函数

Qt::FocusPolicyfocusPolicy() const
voidsetFocusPolicy(Qt::FocusPolicy policy)

另请参阅 focusInEventfocusOutEventkeyPressEventkeyReleaseEventenabled

font : QFont

此属性存储了当前设置的小部件字体

此属性描述小部件请求的字体。所使用的字体由小部件的样式在渲染标准组件时使用,并且可以作为确保自定义小部件与原生平台的视觉和感观保持一致的手段。不同平台或样式通常会定义不同字体以供应用程序使用。

当您向小部件分配新字体时,将从该字体混合此属性与默认字体,以形成小部件的最终字体。您可以调用 fontInfo() 来获取小部件最终字体的副本。最终字体还用于初始化 QPainter 的字体。

默认值取决于系统环境。 QApplication 维护一个系统/主题字体,作为所有小部件的默认值。还可能为某些类型的小部件定义特殊字体默认值。您还可以通过传递自定义字体和小部件名称给 QApplication::setFont() 来定义小部件的自定义默认字体。最后,通过 Qt 字体数据库来获取最佳匹配字体。

QWidget 将显式字体属性从父元素传播到子元素。如果您更改字体上的特定属性并将该字体分配给小部件,则该属性将传播到小部件的所有子元素,覆盖任何系统对该属性的默认值。请注意,字体默认不会传播到窗口(请参见isWindow()),除非启用了 Qt::WA_WindowPropagation 属性。

QWidget 的字体传播类似于其调色板传播。

当前样式用于渲染所有标准Qt小部件的内容,可选择使用小部件字体,或在某些情况下忽略它(部分或全部)。特别是像GTK样式、Mac样 式和Windows Vista样式这样的样式,会对小部件字体进行特殊修改,以匹配平台的本地外观和感觉。由于这个原因,给小部件字体分配属性不一定能改变小部件的外观。相反,你可能选择应用一个 样式表

注意:如果在同样的 widget 上同时使用 Qt 风格表 和 setFont(),在设置冲突时样式表将优先。

访问函数

const QFont &font() const
voidsetFont(const QFont &)

另请参阅fontInfo() 和 fontMetrics().

[只读] frameGeometry : const QRect

相对于其父 widget 的 geometry,包括任何窗口框架

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

默认情况下,此属性包含一个取决于用户的平台和屏幕 geometry 的值。

访问函数

QRectframeGeometry() const

另请参阅geometryxypos

[只读] frameSize : const QSize

此属性包含 widget 的大小,包括任何窗口框架

默认情况下,此属性包含一个取决于用户的平台和屏幕 geometry 的值。

访问函数

QSizeframeSize() const

[只读] fullScreen : const bool

此属性包含 widget 是否以全屏模式显示

全屏模式的 widget 占据整个屏幕区域,不显示窗口装饰,如标题栏。

默认情况下,此属性为 false

访问函数

boolisFullScreen() const

另请参阅windowStateminimizedmaximized

geometry : const QRect

此属性包含 widget 相对于其父 widget 的 geometry,不包括窗口框架

当更改 geometry 时,如果 widget 当前可见,它将立即收到一个 move 事件 (moveEvent()) 和/或一个 resize 事件 (resizeEvent())。如果 widget 当前不可见,在它被显示之前,保证接收到适当的事件。

如果大小组件超出了 minimumSize() 和 maximumSize() 定义的 range,将调整它。

警告:在resizeEvent()或moveEvent()中调用setGeometry()可能导致无限递归。

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

默认情况下,此属性包含一个取决于用户的平台和屏幕 geometry 的值。

访问函数

const QRect &geometry() const
voidsetGeometry(int x, int y, int w, int h)
voidsetGeometry(const QRect &)

另请参阅 frameGeometry(),rect(),move(),resize(),moveEvent(),resizeEvent(),minimumSize() 和 maximumSize().

[只读] height : const int

该属性包含小部件的高度,不包括任何窗口框架

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

默认情况下,此属性的值依赖于用户的平台和 屏幕几何形状

访问函数

intheight() const

另请参阅 geometrywidthsize

inputMethodHints : Qt::InputMethodHints

小部件具有哪些特定于输入方法的提示。

这与输入小部件相关。输入方法使用这些提示来检索有关输入方法如何操作的提示。例如,如果设置了 Qt::ImhFormattedNumbersOnly 标志,输入方法可能会更改其视觉组件以反映只能输入数字。

警告:某些小部件需要某些标志才能按预期运行。要设置标志,使用 w->setInputMethodHints(w->inputMethodHints()|f),而不是 w->setInputMethodHints(f)

注意:标志仅为提示,因此特定的输入方法实现可以自由忽略它们。如果您想确保输入特定类型的字符,我还应该在小部件上设置一个 QValidator

默认值是 Qt::ImhNone

访问函数

Qt::InputMethodHintsinputMethodHints() const
voidsetInputMethodHints(Qt::InputMethodHints hints)

另请参阅 inputMethodQuery

[只读] isActiveWindow : const bool

该属性包含此小部件的窗口是否是活动窗口

活动窗口包含具有键盘焦点的小部件(即使没有小部件或没有小部件接受键盘焦点,窗口也可能仍具有焦点)。

当弹出窗口可见时,此属性对于活动窗口 以及 弹出窗口都设置为 true

默认情况下,此属性为 false

访问函数

boolisActiveWindow() const

另请参阅 activateWindow() 和 QApplication::activeWindow

layoutDirection : Qt::LayoutDirection

该属性包含此小部件的布局方向。

注意:从 Qt 4.7 以后,此方法不再影响文本布局方向。

默认情况下,该属性设置为 Qt::LeftToRight

当在窗口上设置布局方向时,它将传播到小部件的子窗口,但不传播到作为窗口的子窗口,也不传播到已显式调用 setLayoutDirection() 的子窗口。另外,在为父窗口调用 setLayoutDirection() 之后添加到子窗口的小部件不继承父窗口的布局方向。

访问函数

Qt::LayoutDirectionlayoutDirection() const
voidsetLayoutDirection(Qt::LayoutDirection direction)
voidunsetLayoutDirection()

另请参阅 QApplication::layoutDirection.

locale : QLocale

此属性包含小部件的区域设置

如果没有设置特殊区域设置,则此区域设置要么是父区域设置,要么如果是顶级小部件,则是默认区域设置。

如果小部件显示日期或数字,则应该使用小部件的区域设置进行格式化。

访问函数

QLocalelocale() const
voidsetLocale(const QLocale &locale)
voidunsetLocale()

另请参阅 QLocale 以及 QLocale::setDefault

[只读] maximized : const bool

此属性包含该小部件是否已最大化

此属性仅对窗口相关。

注意:由于某些窗口系统的限制,这并不总是报告预期结果(例如,如果用户在X11中通过窗口管理器最大化窗口,Qt无法将其与任何其他调整大小操作区分开来)。这随着窗口管理器协议的发展应该会得到改善。

默认情况下,此属性为 false

访问函数

boolisMaximized() const

另请参阅 windowState(),showMaximized(),visibleshow(),hide(),showNormal 以及 minimized

maximumHeight : int

此属性包含小部件的最大高度(以像素为单位)

此属性对应于 maximumSize 属性保持的高度。

默认情况下,此属性包含一个值为 16777215 的值。

注意:QWIDGETSIZE_MAX 的定义限制了小部件的最大尺寸。

访问函数

intmaximumHeight() const
voidsetMaximumHeight(int maxh)

另请参阅 maximumSize 以及 maximumWidth

maximumSize : QSize

此属性包含小部件的最大尺寸(以像素为单位)

小部件的尺寸不能调整超过最大尺寸大小。

默认情况下,此属性包含的尺寸具有宽度高度值均为 16777215。

注意:QWIDGETSIZE_MAX 的定义限制了小部件的最大尺寸。

访问函数

QSizemaximumSize() const
voidsetMaximumSize(const QSize &)
voidsetMaximumSize(int maxw, int maxh)

另请参阅 maximumWidthmaximumHeightminimumSize 以及 sizeIncrement

maximumWidth : int

此属性包含小部件的最大宽度(以像素为单位)

此属性对应于 maximumSize 属性保持的宽度。

默认情况下,此属性包含一个值为 16777215 的值。

注意:QWIDGETSIZE_MAX 的定义限制了小部件的最大尺寸。

访问函数

intmaximumWidth() const
voidsetMaximumWidth(int maxw)

另请参阅 maximumSize 以及 maximumHeight

[只读] minimized : const bool

此属性包含该小部件是否已最小化(图标化)

此属性仅对窗口相关。

默认情况下,此属性为 false

访问函数

boolisMinimized() const

另请参阅 showMinimized(),visibleshow(),hide(),showNormal(),以及maximized

minimumHeight : int

该属性保存了小部件的像素最小高度

该属性对应于minimumSize属性保持的高度。

默认情况下,此属性值为0。

访问函数

intminimumHeight() const
voidsetMinimumHeight(int minh)

另请参阅 minimumSizeminimumWidth

minimumSize : QSize

该属性保存了小部件的最小尺寸

小部件的大小不能小于最小尺寸。如果当前尺寸小于最小尺寸,将会强制将小部件大小调整为最小尺寸。

由该函数设置的最小尺寸将覆盖由QLayout定义的最小尺寸。要取消设置最小尺寸,请使用QSize(0, 0)

默认情况下,此属性包含一个宽度为0,高度为0的尺寸。

访问函数

QSizeminimumSize() const
voidsetMinimumSize(const QSize &)
voidsetMinimumSize(int minw, int minh)

另请参阅 minimumWidthminimumHeightmaximumSize,以及sizeIncrement

[只读] minimumSizeHint : const QSize

该属性保存了小部件推荐的最小尺寸

如果此属性的值是一个无效的尺寸,则不推荐最小尺寸。

minimumSizeHint()的默认实现如果没有布局,则返回无效尺寸,否则返回布局的最小尺寸。大多数内置小部件都重新实现了minimumSizeHint()。

QLayout不会将小部件大小调整为小于最小尺寸推荐的大小,除非已设置了minimumSize或大小策略设置为QSizePolicy::Ignore。如果设置了minimumSize,则将忽略最小尺寸提示。

访问函数

virtual QSizeminimumSizeHint() const

另请参阅 QSize::isValidresizesetMinimumSize,以及sizePolicy

minimumWidth : int

该属性保存了小部件的像素最小宽度

该属性对应于minimumSize属性保持的宽度。

默认情况下,此属性值为0。

访问函数

intminimumWidth() const
voidsetMinimumWidth(int minw)

另请参阅 minimumSizeminimumHeight

该属性保存了该小部件是否是一个模态小部件

此属性仅适用于窗口。模式窗口小部件阻止所有其他窗口的窗口小部件获取任何输入。

默认情况下,此属性为 false

访问函数

boolisModal() const

另请参阅 isWindow(),windowModalityQDialog

mouseTracking : bool

此属性表示是否为窗口小部件启用鼠标跟踪

如果禁用鼠标跟踪(默认值),则窗口小部件仅在鼠标移动且至少按下一个鼠标按钮时接收鼠标移动事件。

如果启用鼠标跟踪,则即使在没有任何按钮被按下的情况下,窗口小部件也会接收鼠标移动事件。

访问函数

boolhasMouseTracking() const
voidsetMouseTracking(bool enable)

另请参阅 mouseMoveEvent

[只读] normalGeometry : const QRect

此属性表示窗口小部件在以正常(非最大化或全屏)顶级窗口小部件显示时的几何形状

如果窗口小部件已经处于此状态,正常几何形状将反映窗口小部件当前的 geometry

对于子窗口小部件,此属性始终包含空矩形。

默认情况下,此属性包含空矩形。

访问函数

QRectnormalGeometry() const

另请参阅 QWidget::windowState() 和 QWidget::geometry

palette : QPalette

此属性表示窗口小部件的调色板

此属性描述窗口小部件的调色板。调色板在窗口小部件的样式渲染标准部件时使用,并且作为保持自定义窗口小部件与平台本地外观风格一致性的一种手段。不同平台或不同样式通常有不同的调色板。

当你将一个新的调色板分配给窗口小部件时,该调色板的颜色角色将与窗口小部件的默认调色板合并,以形成窗口小部件的最终调色板。窗口小部件背景角色的调色板条目用于填充窗口小部件的背景(见 QWidget::autoFillBackground),并且前景角色初始化 QPainter 的画笔。

默认值取决于系统环境。 QApplication 维护一个系统/主题调色板,该调色板作为所有窗口小部件的默认值。对于某些类型的窗口小部件可能有特殊的默认调色板(例如,在 Windows Vista 上,所有从 QMenuBar 派生的类都有一个特殊的默认调色板)。您也可以通过向 QApplication::setPalette() 传递自定义调色板和窗口小部件的名称来自定义窗口小部件的默认调色板。最后,样式在分配调色板时始终有选项对其进行润色(见 QStyle::polish)。

QWidget 从父级传播显式调色板角色到子级。如果您在调色板的特定角色上分配了画笔或颜色,并将该调色板分配给窗口小部件,则该角色将传播到窗口小部件的所有子级,并覆盖任何该角色的系统默认值。请注意,默认情况下,调色板不传播到窗口(见 isWindow),除非启用了 Qt::WA_WindowPropagation 属性。

QWidget 的调色板传播类似于其字体传播。

当前样式用于渲染所有标准 Qt 小部件的内容,可以自由选择小部件调色板中的颜色和画笔,或在某些情况下忽略调色板(部分或全部)。特别是,类似于 GTK 样式、Mac 样式和 Windows Vista 样式等某些样式,依赖于第三方 API 来渲染小部件的内容,并且这些样式通常不遵循调色板。因此,给小部件的调色板赋予角色并不能保证更改小部件的外观。相反,您可以选择应用一个 样式表

警告:不要与 Qt 样式表 一起使用此函数。当使用样式表时,可以通过使用 "color"、"background-color"、"selection-color"、"selection-background-color" 和 "alternate-background-color" 来自定义小部件的调色板。

访问函数

const QPalette &palette() const
voidsetPalette(const QPalette &)

另请参阅:QGuiApplication::palette()、QWidget::font() 以及 Qt Style Sheets.

pos : QPoint

此属性持有小部件在其父小部件内的位置

如果小部件是一个窗口,则位置包括包括其框架的桌面上的小部件位置。

当更改位置时,如果小部件当前可见,则会立即接收到移动事件(moveEvent())。如果小部件当前不可见,在下一次显示之前,它一定会接收到一个事件。

默认情况下,此属性包含一个指向原点的位置。

警告:moveEvent() 中调用 move() 或 setGeometry() 可能会导致无限递归。

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

注意:并非所有的窗口系统都支持设置或查询顶级窗口位置。在这样的系统中,以编程方式移动窗口可能没有效果,并且可能会返回一些当前位置的人工值,例如 QPoint(0, 0)

访问函数

QPointpos() const
voidmove(int x, int y)
voidmove(const QPoint &)

另请参阅:frameGeometrysizex() 以及 y().

[只读] rect : const QRect

此属性持有小部件的内部几何形状,不包括任何窗口框架

rect 属性等于 QRect(0, 0, width(), height()).

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

默认情况下,此属性包含一个取决于用户的平台和屏幕 geometry 的值。

访问函数

QRectrect() const

另请参阅:size.

size : QSize

此属性持有小部件的大小,不包括任何窗口框架

如果调整大小的小部件在调整大小时可见,它将立即接收到调整大小事件(resizeEvent())。如果小部件当前不可见,在下一次显示之前,它一定会接收到一个事件。

如果它位于 minimumSize() 和 maximumSize() 定义的范围内,大小会相应地调整。

默认情况下,此属性包含一个取决于用户的平台和屏幕 geometry 的值。

警告:resizeEvent() 中调用 resize() 或 setGeometry() 可能会导致无限递归。

注意:将大小设置为 QSize(0, 0) 将导致小部件不在屏幕上显示。这也适用于窗口。

访问函数

QSizesize() const
voidresize(int 宽度, int 高度)
voidresize(const QSize &)

另请参阅 posgeometryminimumSizemaximumSizeresizeEvent()及adjustSize().

[只读] sizeHint : const QSize

此属性保存小部件推荐的尺寸

如果本属性的值为无效尺寸,则不推荐尺寸。

sizeHint()函数的默认实现如果没有本小部件的布局,则返回无效尺寸;否则返回布局的首选尺寸。

访问函数

virtual QSizesizeHint() const

另请参阅 QSize::isValid()、minimumSizeHintsizePolicysetMinimumSizeupdateGeometry

sizeIncrement : QSize

此属性保存小部件的尺寸增量

用户调整窗口大小时,大小将以sizeIncrement().width()像素的水平步骤和sizeIncrement.height()像素的垂直步骤移动,以baseSize()为基准。首选小部件尺寸为非负整数

width = baseSize().width() + i * sizeIncrement().width();
height = baseSize().height() + j * sizeIncrement().height();

请注意,尽管可以为所有小部件设置尺寸增量,但它仅影响窗口。

默认情况下,此属性包含一个宽度为0,高度为0的尺寸。

注意:尺寸增量在Windows下不起作用,并且在X11上可能被窗口管理器忽略。

访问函数

QSizesizeIncrement() const
voidsetSizeIncrement(const QSize &)
voidsetSizeIncrement(int 宽度, int 高度)

另请参阅 sizeminimumSizemaximumSize

sizePolicy : QSizePolicy

此属性保存小部件的默认布局行为

如果有管理此小部件子项的QLayout,使用该布局指定的尺寸策略。如果没有这样的QLayout,则使用此函数的结果。

默认策略为Preferred/Preferred,这意味着小部件可以被自由调整大小,但更喜欢大小为sizeHint()返回的尺寸。类似按钮的小部件将尺寸策略设置为指定它们可以水平拉伸,但垂直上是固定的。这同样适用于lineedit控件(例如QLineEditQSpinBox或可编辑的QComboBox)以及其他水平方向的控件(例如QProgressBar)。QToolButton通常是正方形,因此它们允许两个方向上的增长。支持不同方向的小部件(例如QSliderQScrollBar或QHeader)只在相应的方向上指定拉伸。可以提供滚动条的小部件(通常是QScrollArea的子类)通常指定它们可以使用额外空间,并且可以满足小于sizeHint()的情况。

访问函数

QSizePolicysizePolicy() const
voidsetSizePolicy(QSizePolicy)
voidsetSizePolicy(QSizePolicy::Policy 横向、QSizePolicy::Policy 纵向)

另请参阅 sizeHint(),QLayoutQSizePolicyupdateGeometry()。

statusTip : QString

此属性包含小部件的状态提示

默认情况下,此属性包含一个空字符串。

访问函数

QStringstatusTip() const
voidsetStatusTip(const QString &)

另请参阅 toolTipwhatsThis

styleSheet : QString

此属性包含小部件的风格表

风格表包含对小部件风格的文本描述,如 Qt 风格表 文档中所述。

自 Qt 4.5 以来,Qt 风格表完全支持 macOS。

警告: Qt 风格表目前不支持自定义 QStyle 子类。我们计划在未来某个版本中解决此问题。

访问函数

QStringstyleSheet() const
voidsetStyleSheet(const QString &styleSheet)

另请参阅 setStyle(),QApplication::styleSheetQt 风格表

tabletTracking : bool

此属性表示小部件是否启用手写板跟踪

如果手写板跟踪被禁用(默认方式),当笔在触摸板上或在笔被移动时至少有一个笔按钮被按下时,小部件才会接收到手写板移动事件。

如果启用手写板跟踪,小部件即使在附近悬停时也会接收到手写板移动事件。这有助于监控位置以及辅助属性如旋转和倾斜,并在用户界面中提供反馈。

访问函数

boolhasTabletTracking() const
voidsetTabletTracking(bool enable)

另请参阅 tabletEvent

toolTip : QString

此属性包含小部件的工具提示

请注意,默认情况下,只有当小部件是活动窗口的子窗口时,才会显示工具提示。您可以通过在 窗口 上设置属性 Qt::WA_AlwaysShowToolTips 来改变这种行为,而不是在具有工具提示的小部件上。

如果您想控制工具提示的行为,可以拦截 event() 函数并捕获 QEvent::ToolTip 事件(例如,如果您想自定义应显示工具提示的区域)。

默认情况下,此属性包含一个空字符串。

访问函数

QStringtoolTip() const
voidsetToolTip(const QString &)

另请参阅 QToolTipstatusTipwhatsThis

toolTipDuration : int

此属性包含小部件的工具提示持续时间

指定工具提示显示的时间长度(以毫秒为单位)。如果值是 -1(默认),则持续时间将根据工具提示的长度进行计算。

访问函数

inttoolTipDuration() const
voidsetToolTipDuration(int msec)

另请参阅 toolTip

updatesEnabled : bool

此属性表示是否启用了更新

启用更新的小部件接收绘图事件并具有系统背景;而禁用的小部件则不接收。这也意味着如果禁用了更新,调用 update() 和 repaint() 没有作用。

默认情况下,此属性为 true

通常使用 setUpdatesEnabled() 来禁用更新以短时间进行,例如避免在大量更改期间屏幕闪烁。在 Qt 中,小部件通常不会产生屏幕闪烁,但在 X11 上,服务器在用其他小部件替换之前可能会在屏幕上擦除小部件区域。禁用更新可以解决这个问题。

示例

setUpdatesEnabled(false);
bigVisualChanges();
setUpdatesEnabled(true);

禁用一个小部件隐式地禁用了所有其子小部件。启用一个小部件会启用所有子小部件,但不是顶层小部件或显式禁用的小部件。重新启用更新隐式地调用该小部件的 update()。

访问函数

boolupdatesEnabled() const
voidsetUpdatesEnabled(bool enable)

另见paintEvent

visible : bool

该属性表示小部件是否可见

调用 setVisible(false) 或 show(),当所有父级小部件(直到窗口)都可见时,将小部件设置为可见状态。如果一个祖先不可见,小部件将不会变为可见,直到所有祖先都显示出来。如果其大小或位置已更改,Qt 保证在显示之前小部件将获得移动和调整大小的事件。如果小部件还没有调整大小,Qt 将使用 adjustSize() 调整小部件的大小到有用默认值。

调用 setVisible(false) 或 hide() 显式隐藏一个小部件。一个显式隐藏的小部件将永远不会变为可见,即使所有的祖先都变为可见,除非你显示它。

一个小部件在可见状态改变时接收显示和隐藏事件。在一个隐藏和一个显示事件之间,没有必要浪费 CPU 周期来准备或显示数据给用户。例如,一个视频应用可能会简单地停止生成新帧。

屏幕上被其他窗口遮住的小部件被认为是可见的。相同的原则也适用于图标化窗口和存在于其他虚拟桌面(在支持此概念的平台上的窗口)。当窗口系统改变窗口的映射状态时,小部件会接收到自发的显示和隐藏事件,例如,当用户最小化窗口时发生自发的隐藏事件,当窗口再次恢复时发生自发的显示事件。

您很少需要重新实现 setVisible() 函数。如果您需要在小部件显示之前更改某些设置,请使用 showEvent()。如果您需要执行一些延迟初始化,请使用发送到 event() 函数的波兰事件。

访问函数

boolisVisible() const
virtual voidsetVisible(bool visible)

另见show(),hide(),isHidden(),isVisibleTo(),isMinimized(),showEvent() 和 hideEvent

whatsThis : QString

该属性保存小部件的 What's This 帮助文本。

默认情况下,此属性包含一个空字符串。

访问函数

QStringwhatsThis() const
voidsetWhatsThis(const QString &)

参见QWhatsThisQWidget::toolTipQWidget::statusTip

[只读] width : const int

此属性包含排除了任何窗口边框的组件宽度

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

注意:请不要使用此函数来查找多屏桌面上的屏幕宽度。有关详细信息,请参阅 QScreen

默认情况下,此属性包含一个取决于用户的平台和屏幕 geometry 的值。

访问函数

intwidth() const

也请参阅:geometryheightsize

windowFilePath : QString

此属性包含与组件相关联的文件路径

此属性仅对窗口有效。它将与窗口相关联的文件路径。如果您设置了文件路径,但未设置窗口标题,Qt 将使用 QFileInfo::fileName() 获取指定路径的文件名来设置窗口标题。

如果任何时间点设置了窗口标题,则窗口标题具有优先级,将显示文件路径字符串而不是文件路径。

此外,在 macOS 上,这还有一个附加的好处,它会设置窗口的代理图标,假设文件路径存在。

如果没有设置文件路径,则此属性包含一个空字符串。

默认情况下,此属性包含一个空字符串。

访问函数

QStringwindowFilePath() const
voidsetWindowFilePath(const QString &filePath)

也请参阅:windowTitlewindowIcon

windowFlags : Qt::WindowFlags

窗口标志是一个类型(例如,Qt::Dialog)和零个或更多对窗口系统的提示(例如,Qt::FramelessWindowHint)的组合。

如果组件类型为 Qt::WidgetQt::SubWindow 并且成为一个窗口(Qt::WindowQt::Dialog 等),则将其放置在桌面上的 (0, 0) 位置。如果组件是一个窗口,并且成为一个 Qt::WidgetQt::SubWindow,则将其放置在其父组件的 (0, 0) 位置。

注意:此函数在更改窗口标志时调用 setParent(),导致组件隐藏。您必须调用 show() 以再次使组件可见。

访问函数

Qt::WindowFlagswindowFlags() const
voidsetWindowFlags(Qt::WindowFlags type)

也请参阅:windowType(),setWindowFlag窗口标志示例

windowIcon : QIcon

此属性包含组件的图标

此属性仅对窗口有效。如果没有设置图标,则 windowIcon() 返回应用程序图标(QApplication::windowIcon)。

注意:在 macOS 上,窗口图标表示活动文档,只有当使用 setWindowFilePath 也设置了文件路径时,才会显示。

访问函数

QIconwindowIcon() const
voidsetWindowIcon(const QIcon &icon)

通知信号

voidwindowIconChanged(const QIcon &icon)

也请参阅:windowTitlesetWindowFilePath

windowModality : Qt::WindowModality

该属性保存了由模态小部件阻止的窗口

该属性仅对窗口有意义。模态小部件阻止其他窗口中的小部件获取输入。此属性值控制小部件可见时哪些窗口被阻止。当窗口可见时更改此属性没有效果;您必须先调用hide() 小部件,然后再次调用show()。

默认情况下,此属性为Qt::NonModal

访问函数

Qt::WindowModalitywindowModality() const
voidsetWindowModality(Qt::WindowModality windowModality)

另请参阅isWindow(),QWidget::modalQDialog

windowModified : bool

该属性保存了窗口中显示的文档是否包含未保存的更改

已修改的窗口是指其内容已更改但尚未保存到磁盘的窗口。此标志的效果取决于平台。在macOS上,关闭按钮将具有已修改的外观;在其他平台上,窗口标题将带有 '*' (星号)。

窗口标题必须包含一个 "[*]" 占位符,表示 '*' 应该出现的位置。通常,它应该出现在文件名之后(例如,“document1.txt[*] - 文本编辑器”)。如果窗口未修改,占位符将简单地删除。

请注意,如果将小部件设置为已修改,则其所有祖先小部件也会被设置为已修改。但是,如果您在一个小部件上调用setWindowModified(false),则此设置不会传播到其父级,因为父级的其他子部件可能已经被修改。

访问函数

boolisWindowModified() const
voidsetWindowModified(bool)

另请参阅windowTitle

windowOpacity : double

该属性保存了窗口的不透明度级别。

不透明度的有效范围是从1.0(完全不透明)到0.0(完全透明)。

默认情况下,此属性值为1.0。

此功能在支持复合扩展的嵌入式Linux、macOS、Windows和X11平台上是可用的。

注意:在X11上,您需要有一个复合管理器在运行,并且您使用的窗口管理器需要支持X11特定 _NET_WM_WINDOW_OPACITY 原子。

警告:将此属性从不透明更改为透明可能会导致需要在窗口正确显示之前处理的绘图事件。这主要影响QScreen::grabWindow的使用。此外,请注意,半透明窗口的更新和调整大小速度比不透明窗口慢得多。

访问函数

qrealwindowOpacity() const
voidsetWindowOpacity(qreal level)

另请参阅setMask

windowTitle : QString

该属性保存了窗口标题(标题栏)

该属性仅对顶级小部件有意义,例如窗口和对话框。如果没有设置标题,则标题基于windowFilePath。如果这两个都没有设置,则标题为空字符串。

如果您使用windowModified机制,窗口标题必须包含一个“[*]”占位符,表示“*”应出现的位置。通常,它应该出现在文件名之后(例如:“document1.txt[*] - 文本编辑器”)。如果windowModified属性是false(默认值),则占位符将被简单地移除。

在某些桌面平台上(包括Windows和Unix),如果设置了(从QGuiApplication::applicationDisplayName获取的应用程序名称),则将其添加到窗口标题的末尾。这是由QPA插件完成的,因此它会显示给用户,但它不是windowTitle字符串的一部分。

访问函数

QStringwindowTitle() const
voidsetWindowTitle(const QString &)

通知信号

voidwindowTitleChanged(const QString &title)

另请参阅windowIconwindowModifiedwindowFilePath

[只读] x : const int

此属性包含相对于父窗口(包括任何窗口框架)的部件的x坐标

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

默认情况下,此属性值为0。

访问函数

intx() const

另请参阅frameGeometryypos

[只读] y : const int

此属性包含相对于父窗口和包括任何窗口框架的部件的y坐标

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

默认情况下,此属性值为0。

访问函数

inty() const

另请参阅frameGeometryxpos

成员函数文档

[自6.3起] QAction *QWidget::addAction(const QIcon &icon, const QString &text)

[自6.3起] QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut)

[自6.3起] QAction *QWidget::addAction(const QString &text)

[自6.3起] QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut)

这些便利函数创建一个新的动作,具有文本text、图标icon和快捷键shortcut,如果有。

这些函数将新创建的动作添加到部件的动作列表中,并返回它。

QWidget 接管返回的 QAction 的所有权。

此函数自Qt 6.3起引入。

[自6.3版本开始] QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)

[自6.3版本开始] QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)

[自6.3版本开始] QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)

[自6.3版本开始] QAction *QWidget::addAction(const QString &text, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)

这是一个重载函数。

此便利函数创建一个带文本 text、图标 icon 和快捷键 shortcut(如果有)的新操作。

操作触发信号的 triggered() 与接收者 receivermember 端口连接。函数将新创建的操作添加到小部件的操作列表中,并返回它。

QWidget 接管返回的 QAction 的所有权。

此函数自Qt 6.3起引入。

[自6.3版本开始] 模板 <typename... Args, typename = QWidget::compatible_action_slot_args<Args...>> QAction *QWidget::addAction(const QIcon &icon, const QString &text, Args &&... args)

[自6.3版本开始] 模板 <typename... Args, typename = QWidget::compatible_action_slot_args<Args...>> QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, Args &&... args)

[自6.3版本开始] 模板 <typename... Args, typename = QWidget::compatible_action_slot_args<Args...>> QAction *QWidget::addAction(const QString &text, Args &&... args)

[since 6.3] 模板 <typename... Args, typename = QWidget::compatible_action_slot_args<Args...>> QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut, Args &&... args)

这是一个重载函数。

这些便捷函数将为文本 text、图标 icon 和快捷键 shortcut 创建一个新动作。

该动作的 triggered() 信号被连接,就像调用 QObject::connect(action, &QAction::triggered, args...)) 一样,完美地传递了 args,包括可能的 Qt::ConnectionType

此函数将新创建的动作添加到小部件的动作列表,并返回它。

QWidget 接管返回的 QAction 的所有权。

此函数自Qt 6.3起引入。

[ explicit] QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

构建一个子窗口 parent,并将窗口标志设置为 f

如果 parentnullptr,则新窗口成为窗口。如果 parent 是另一个小部件,则这个小部件将成为 parent 内的子窗口。当它的 parent 被删除时,新的小部件被删除。

窗口标志参数 f 通常为 0,但可以设置来自定义窗口框架(即 parent 必须是 nullptr)。要自定义框架,请使用组合任意窗口标志的逐位或值。

如果你将子窗口添加到已经可见的小部件,你必须显式显示子窗口才能使其可见。

请注意,Qt的X11版本可能无法在所有系统上传递所有组合的样式标志。这是因为X11上,Qt只能询问窗口管理器,而窗口管理器可以覆盖应用程序的设置。在Windows上,Qt可以设置任何你想要的标志。

另请参阅 windowFlags

[virtual noexcept] QWidget::~QWidget()

销毁窗口部件。

首先删除此窗口部件的所有子部件。如果此窗口部件是主窗口部件,则应用程序退出。

[virtual protected] void QWidget::actionEvent(QActionEvent *event)

在此事件处理程序中调用给定 event,每当窗口部件的动作更改时。

另请参阅 addAction()、insertAction()、removeAction()、actions() 以及 QActionEvent

QList<QAction *> QWidget::actions() const

返回本窗口部件的动作(可能为空)列表。

另请参阅 contextMenuPolicyinsertAction() 和 removeAction

void QWidget::activateWindow()

将包含此窗口部件的顶级窗口设置为活动窗口。

活动窗口是可见的顶级窗口,它具有键盘输入焦点。

此函数执行的功能与在顶级窗口的标题栏上单击鼠标相同。在X11上,结果取决于窗口管理器。如果您想确保窗口也堆叠在最上面,也应该调用 raise().请注意,窗口必须可见,否则 activateWindow() 没有任何效果。

在Windows上,如果您在应用程序当前不是活动应用程序时调用此函数,则不会使其成为活动窗口。它将更改任务栏条目的颜色,以表示窗口已以某种方式发生变化。这是因为微软不允许应用程序中断用户在另一个应用程序中正在进行的操作。

另见 isActiveWindow(),window(),以及 show()。

void QWidget::addAction(QAction *action)

将操作 action 添加到此小部件的操作列表中。

所有 QWidgets 都包含一个 QAction 列表。但是,它们可以以许多不同的方式图形表示。默认情况下,使用 QAction 列表(如actions() 返回的)是为了创建一个上下文 QMenu

QWidget 应只包含一个每种操作,添加同一个操作不会使得相同的操作在 widget 中出现两次。

action 的所有权不会转移到此 QWidget 上。

另见 removeAction(),insertAction(),actions(),以及 QMenu

void QWidget::addActions(const QList<QAction *> &actions)

将操作 actions 添加到此小部件的操作列表中。

另见 removeAction(),QMenu,以及 addAction

void QWidget::adjustSize()

调整小部件的大小以适应其内容。

如果有效,此函数使用 sizeHint(),即大小提示的宽度和高度 >= 0。否则,它设置大小为覆盖所有子小部件的子矩形(所有子小部件矩形的并集)。

对于窗口,也考虑了屏幕大小。如果《a href="qwidget.html#sizeHint-prop" translate="no">sizeHint() 小于(200,100)并且大小策略是 expanding,则窗口至少为(200,100)。窗口的最大大小是屏幕宽度和大小的 2/3。

另见 sizeHint() 和 childrenRect

QPalette::ColorRole QWidget::backgroundRole() const

返回小部件的后台角色。

后台角色定义了从小部件的 palette 中使用以渲染后台的画笔。

如果没有设置明确的背景角色,小部件将继承其父小部件的背景角色。

另请参阅 setBackgroundRole() 和 foregroundRole

QBackingStore *QWidget::backingStore() const

返回将在这个小部件中绘制的 QBackingStore

[虚保护] void QWidget::changeEvent(QEvent *event)

可以通过处理此事件重新实现此事件处理器来处理状态变化。

可以通过提供的 event 检索在此事件中更改的状态。

更改事件包括:QEvent::ToolBarChangeQEvent::ActivationChangeQEvent::EnabledChangeQEvent::FontChangeQEvent::StyleChangeQEvent::PaletteChangeQEvent::WindowTitleChangeQEvent::IconTextChangeQEvent::ModifiedChangeQEvent::MouseTrackingChangeQEvent::ParentChangeQEvent::WindowStateChangeQEvent::LanguageChangeQEvent::LocaleChangeQEvent::LayoutDirectionChangeQEvent::ReadOnlyChange

QWidget *QWidget::childAt(int x, int y) const

返回在控件坐标系统中位置 (xy) 的可见子控件。如果指定的位置没有可见子控件,该函数返回 nullptr

QWidget *QWidget::childAt(const QPoint &p) const

这是一个重载函数。

返回在控件自身坐标系中的点 p 的可见子控件。

void QWidget::clearFocus()

将键盘输入焦点从控件中移除。

如果控件有活动焦点,将发送一个 focus out event 到此控件,告诉它已失去焦点。

这个控件必须启用焦点设置来获取键盘输入焦点;也就是说,它必须调用 setFocusPolicy

另请参阅 hasFocus()、setFocus()、focusInEvent()、focusOutEvent()、setFocusPolicy() 和 QApplication::focusWidget

void QWidget::clearMask()

移除通过 setMask 设置的任何掩码。

另请参阅setMask

[槽] bool QWidget::close()

关闭此控件。如果控件已关闭则返回 true,否则返回 false

首先,它会向小部件发送一个QCloseEvent。如果小部件接受关闭事件,它会被隐藏。如果它忽略了事件,则不会发生任何事。QWidget::closeEvent()的默认实现接受关闭事件。

如果小部件具有Qt::WA_DeleteOnClose标志,则小部件也会被删除。无论小部件是否可见,都会向小部件传递关闭事件。

当最后一个可见的主窗口(即没有父窗口的窗口)设置了Qt::WA_QuitOnClose属性后关闭时,会发射QGuiApplication::lastWindowClosed()信号。默认情况下,除了弹出窗口(如启动窗口、工具窗口和弹出菜单)之外的窗口都设置了此属性。

[虚保护] void QWidget::closeEvent(QCloseEvent *event)

当Qt从窗口系统接收到顶级小部件的关闭请求时,此事件处理器会使用所提供的event调用。

默认情况下,事件会被接受,小部件会关闭。您可以重新实现此函数以更改小部件对窗口关闭请求的响应方式。例如,您可以在所有事件上调用ignore()以防止窗口关闭。

主窗口应用程序通常使用此函数的实现来检查用户的工作是否已保存,并在关闭之前请求许可。

另请参阅eventhidecloseQCloseEvent

QMargins QWidget::contentsMargins() const

contentsMargins函数返回小部件的内容边距。

另请参阅setContentsMarginscontentsRect

QRect QWidget::contentsRect() const

返回小部件边距内的区域。

另请参阅setContentsMarginscontentsMargins

[保护] void QWidget::contextMenuEvent(QContextMenuEvent *event)

此事件处理器,针对event事件,可以在子类中重新实现以接收小部件上下文菜单事件。

当小部件的contextMenuPolicyQt::DefaultContextMenu时,会调用处理器。

默认实现会忽略上下文事件。有关详细信息,请参阅QContextMenuEvent文档。

另请参阅eventQContextMenuEventcustomContextMenuRequested

[保护] void QWidget::create(WId 窗口 = 0, bool initializeWindow = true, bool destroyOldWindow = true)

创建新的小部件窗口。

在 Qt 5 中,参数 windowinitializeWindow 以及 destroyOldWindow 被忽略。请使用 QWindow::fromWinId() 创建一个包装外部窗口的 QWindow,并将其传递给 QWidget::createWindowContainer()。

另请参阅 createWindowContainer() 和 QWindow::fromWinId

[静态] QWidget *QWidget::createWindowContainer(QWindow *window, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

创建一个 QWidget,使其能够将 window 嵌入基于 QWidget 的应用程序。

窗口容器作为 parent 的子节点创建,并带有窗口标志 flags

一旦窗口嵌入到容器中,容器将控制窗口的几何形状和可见性。建议不要在嵌入窗口上显式调用 QWindow::setGeometry(),QWindow::show() 或 QWindow::hide()。

容器接管 window 的所有权。可以通过调用 QWindow::setParent() 将窗口从窗口容器中移除。

窗口容器将其作为原生子窗口附加到它所在的顶级窗口。当窗口容器作为 QAbstractScrollAreaQMdiArea 的子节点使用时,它将为其父链中的每个小部件创建一个原生窗口,以允许在当前用例中进行适当的堆叠和剪裁。为窗口容器创建原生窗口也允许进行适当的堆叠和剪裁。这必须在显示窗口容器之前完成。拥有许多原生子窗口的应用程序可能会出现性能问题。

窗口容器有几个已知的限制

  • 堆叠顺序;嵌入的窗口将作为一个不透明的盒子堆叠在部件层次结构的顶部。多个重叠窗口容器实例的堆叠顺序是未定义的。
  • 渲染集成;窗口容器不与 QGraphicsProxyWidgetQWidget::render() 或类似功能交互。
  • 焦点处理;窗口容器实例可以具有任何焦点策略,并将焦点通过调用 QWindow::requestActivate() 传递给窗口。但是,从 QWindow 实例返回的正常焦点链将由 QWindow 实例实现自行处理。例如,当进入基于 Qt Quick 的窗口并使用标签焦点时,进一步按标签键很可能会导致仅循环在 QML 应用程序内。此外,QWindow::requestActivate() 是否真正给予窗口焦点,取决于平台。
  • 在一个基于 QWidget 的应用程序中使用许多窗口容器实例,可能会极大地损害应用程序的整体性能。
  • 从 6.7 版本开始,如果 window 属于一个部件(即,window 是在调用 windowHandle() 时接收的),则不会创建容器。相反,此函数将在将窗口重新父化为 parent 后返回该部件本身。由于不会创建容器,flags 将被忽略。换句话说,如果 window 属于一个部件,请考虑只将此部件重新父化为 parent,而不是使用此函数。

[信号] void QWidget::customContextMenuRequested(const QPoint &pos)

当小部件的 contextMenuPolicyQt::CustomContextMenu,并且用户在小部件上请求了上下文菜单时,会发射这个信号。位置 pos 是小部件收到的上下文菜单事件的坐标。通常这发生在小部件坐标内。对此规则的一个例外是 QAbstractScrollArea 及其子类,它们将上下文菜单事件映射到 viewport 的坐标。

另请参阅mapToGlobal(),QMenu,和 contextMenuPolicy

[保护] void QWidget::destroy(bool destroyWindow = true, bool destroySubWindows = true)

释放窗口系统资源。如果 destroyWindow 为真,则销毁小部件窗口。

destroy() 会递归地对所有子小部件进行调用,为 destroyWindow 参数传递 destroySubWindows。要更精细地控制子小部件的销毁,先选择性销毁子小部件。

此函数通常从小部件的析构函数中调用。

[虚保护] void QWidget::dragEnterEvent(QDragEnterEvent *event)

当鼠标拖拽动作正在进行并进入此小部件时,调用此事件处理器。事件通过 event 参数传递。

如果忽略事件,则小部件不会接收到任何 拖拽事件

有关如何在应用中提供拖拽操作的概述,请参阅拖拽和放置文档

另请参阅QDragQDragEnterEvent

[虚保护] void QWidget::dragLeaveEvent(QDragLeaveEvent *event)

当鼠标拖拽动作正在进行并离开此小部件时,调用此事件处理器。事件通过 event 参数传递。

有关如何在应用中提供拖拽操作的概述,请参阅拖拽和放置文档

另请参阅QDragQDragLeaveEvent

[虚保护] void QWidget::dragMoveEvent(QDragMoveEvent *event)

鼠标拖拽动作正在进行时,满足以下条件之一时调用此事件处理器:光标进入此小部件、光标在此小部件内移动或按下键盘上的修饰键而此小部件获得焦点。事件通过 event 参数传递。

有关如何在应用中提供拖拽操作的概述,请参阅拖拽和放置文档

另请参阅QDragQDragMoveEvent

[虚保护] void QWidget::dropEvent(QDropEvent *event)

当鼠标拖拽动作在此小部件上放下时,调用此事件处理器。事件通过 event 参数传递。

有关如何在应用中提供拖拽操作的概述,请参阅拖拽和放置文档

另请参阅QDragQDropEvent

WId QWidget::effectiveWinId() const

返回小部件的有效窗口系统标识符,即原生父窗口的窗口系统标识符。

如果小部件是本地的,则此函数返回原生小部件ID。否则,返回第一个原生父小部件的窗口ID,即包含此小部件的顶级小部件。

注意:我们建议不要存储此值,因为它很可能在运行时更改。

另请参阅:nativeParentWidget()。

void QWidget::ensurePolished() const

确保小部件及其子部件已被QStyle(即,具有适当的字体和调色板)修饰。

QWidget在完全构建后、首次显示之前调用此函数。如果您想在小部件修饰前进行操作(例如,在重写sizeHint()时可能需要正确的字体大小),您可以调用此函数。请注意,此函数从sizeHint()的默认实现中调用。

修饰对于在所有构造函数(无论是基类还是子类的)调用之后发生的最终初始化很有用。

如果您需要在修饰小部件时更改某些设置,重写event()并处理QEvent::Polish事件类型。

注意:该函数声明为const,因此可以从其他const函数(例如,sizeHint ())调用。

另请参阅:event()。

[虚拟保护] void QWidget::enterEvent(QEnterEvent *event)

可以在此子类中重写此事件处理器以接收包含在event参数中的小部件进入事件。

当鼠标光标进入小部件时向小部件发送事件。

另请参阅:leaveEvent (),mouseMoveEvent ()和event()。

[覆盖虚拟保护] bool QWidget::event(QEvent *event)

重新实现了:QObject::event(QEvent *e)。

这是主事件处理器;它处理事件event。您可以在子类中重写此函数,但是建议使用专业的事件处理器。

键盘按键和释放事件与其他事件处理不同。event()检查Tab键和Shift+Tab键并尝试适当地移动焦点。如果没有小部件可以移动焦点(或者按键不是Tab或Shift+Tab),则event()调用keyPressEvent()。

鼠标和手写板事件处理也略有不同:只有在小部件是enabled时,event()才会调用专门的事件处理器,例如mousePressEvent();否则,将丢弃事件。

如果事件被识别,则此函数返回true,否则返回false。如果识别的事件已被接受(参见表格QEvent::accepted),则将停止进一步处理,例如事件传播到父小部件。

另请参阅 closeEvent(),focusInEvent(),focusOutEvent(),enterEvent(),keyPressEvent(),keyReleaseEvent(),leaveEvent(),mouseDoubleClickEvent(),mouseMoveEvent(),mousePressEvent(),mouseReleaseEvent(),moveEvent(),paintEvent(),resizeEvent(),QObject::event() 和 QObject::timerEvent

[静态] QWidget *QWidget::find(WId id)

返回具有窗口标识符/句柄 id 的小部件的指针。

窗口标识符类型取决于底层窗口系统,有关实际定义,请参见 qwindowdefs.h。如果没有此标识符的小部件,则返回 nullptr

[虚保护] void QWidget::focusInEvent(QFocusEvent *event)

此事件处理程序可以在子类中重新实现以接收小部件的键盘焦点事件(接收焦点)。事件通过 event 参数传递

小部件通常必须设置 focusPolicy() 为非 Qt::NoFocus 以接收焦点事件。(注意,应用程序程序员可以在任何小部件上调用 setFocus(),即使那些通常不接受焦点的小部件也可以。)

默认实现更新小部件(除未指定 focusPolicy 的窗口外)。

另请参阅 focusOutEventsetFocusPolicykeyPressEventkeyReleaseEventeventQFocusEvent

[保护] bool QWidget::focusNextChild()

查找一个新的小部件来提供键盘焦点,如有效用于 Tab,并在找到新的小部件时返回 true,或者在无法找到新的小部件时返回 false

另请参阅 focusPreviousChild

[虚保护] bool QWidget::focusNextPrevChild(bool next)

查找一个新的小部件来提供键盘焦点,如有效用于 Tab 和 Shift+Tab,并在找到新的小部件时返回 true,或者在无法找到新的小部件时返回 false

如果 next 为true,则查找向前,如果 next 为 false,则查找向后。

有时,您将想要重新实现此函数。例如,网页浏览器可能会重写它,使"当前活动链接"向前或向后移动,并且仅在到达"页面"上的最后一个或第一个链接时才调用 focusNextPrevChild()。

子小部件在其父小部件上调用 focusNextPrevChild(),但只有包含子小部件的窗口决定在哪里重新定向焦点。通过为对象重新实现此函数,您可以控制所有子小部件的焦点遍历。

另请参阅 focusNextChild() 和 focusPreviousChild

[虚拟受保护] void QWidget::focusOutEvent(QFocusEvent *event)

此事件处理程序可以在子类中重写以接收组件的键盘焦点事件(焦点丢失)。事件通过event参数传递。

小部件通常必须设置 focusPolicy() 为非 Qt::NoFocus 以接收焦点事件。(注意,应用程序程序员可以在任何小部件上调用 setFocus(),即使那些通常不接受焦点的小部件也可以。)

默认实现更新小部件(除未指定 focusPolicy 的窗口外)。

另请参阅focusInEvent(),setFocusPolicy(),keyPressEvent(),keyReleaseEvent(),event()和QFocusEvent

[受保护] bool QWidget::focusPreviousChild()

根据需要找到一个新的组件以给予键盘焦点(例如对于Shift+Tab),如果可以找到新组件则返回true,否则返回false

另请参阅focusNextChild()。

QWidget *QWidget::focusProxy() const

返回焦点代理,如果没有焦点代理则返回nullptr

另请参阅setFocusProxy()。

QWidget *QWidget::focusWidget() const

返回最后的子组件,在调用setFocus后该组件最后获得焦点。对于顶层组件,这是在窗口激活时将获得焦点的组件

这与QApplication::focusWidget()不同,后者返回当前活动窗口中的焦点组件。

QFontInfo QWidget::fontInfo() const

返回组件当前字体信息的字体信息。相当于QFontInfo(widget->font())

另请参阅font(),fontMetrics()和setFont()。

QFontMetrics QWidget::fontMetrics() const

返回组件当前字体的字体度量。相当于QFontMetrics(widget->font())

另请参阅font(),fontInfo()和setFont()。

QPalette::ColorRole QWidget::foregroundRole() const

返回前景角色。

前景角色定义了从组件的QPalette中使用的颜色,用于绘制前景。

如果没有设置显式的 foregroundRole,则函数返回一个与背景角色形成对比的角色。

另请参阅setForegroundRole()和backgroundRole()。

[调用者可为此调用函数] QPixmap QWidget::grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))

将组件绘制到指定的rectangle限制的位图。如果组件有任何子组件,则它们也在相应的位置绘制。

如果指定了一个不合法大小的矩形(默认值),则会绘制整个组件。

注意:此函数可以通过元对象系统和从QML中调用。请参阅Q_INVOKABLE

另请参阅 render() 和 QPixmap

void QWidget::grabGesture(Qt::GestureType gesture, Qt::GestureFlags flags = Qt::GestureFlags())

将小部件订阅到给定 gesture 具体标志 flags

另请参阅 ungrabGesture() 和 QGestureEvent

void QWidget::grabKeyboard()

捕获键盘输入。

直到调用 releaseKeyboard(),此小部件将接收所有键盘事件;其他小部件则不会接收任何键盘事件。鼠标事件不受影响。如果您想捕获鼠标事件,请使用 grabMouse

焦点小部件不受影响,直到它不接收任何键盘事件。 setFocus() 如常移动焦点,但新焦点小部件仅在调用 releaseKeyboard() 之后才接收键盘事件。

如果当前有不同的小部件正在捕获键盘输入,则首先释放该小部件的捕获。

另请参阅 releaseKeyboardgrabMousereleaseMousefocusWidget

void QWidget::grabMouse()

捕获鼠标输入。

在调用 releaseMouse() 之前,此小部件将接收所有鼠标事件;其他小部件则不会接收任何鼠标事件。键盘事件不受影响。如果您想捕获键盘事件,请使用 grabKeyboard

警告: 鼠标捕获应用程序中的错误通常会锁定终端。使用此功能时要格外小心,并在调试时考虑使用带有 -nograb 命令行选项。

在 Qt 中使用时很少需要捕获鼠标,因为 Qt 智能地捕获和释放鼠标。特别是,Qt 在按下鼠标按钮时捕获鼠标,并保持捕获状态直到最后一个按钮释放。

注意: 只有可见的小部件才能捕获鼠标输入。如果小部件的 isVisible() 返回 false,则不能调用 QWidget::grabMouse()。

注意: 在 Windows 上,只有在鼠标位于由过程拥有的窗口内时,grabMouse() 才能正常工作。在 macOS 上,只有在鼠标位于该小部件框架内时,grabMouse() 才能正常工作。

另请参阅 releaseMousegrabKeyboardreleaseKeyboard

void QWidget::grabMouse(const QCursor &cursor)

此函数重载了 QWidget::grabMouse

捕获鼠标输入并更改光标形状。

光标将具备 cursor 形状(在使用鼠标捕获焦点期间),并且直到调用 releaseMouse(),该小部件将是唯一接收到鼠标事件的小部件。

警告: 捕获鼠标可能会锁定终端。

注意: 请参阅 QWidget::grabMouse 的注意事项。

参见 releaseMouse(),grabKeyboard(),releaseKeyboard() 和 setCursor()。

int QWidget::grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut)

向 Qt 的快捷键系统添加一个快捷键,该快捷键会在给定的 key 序列和 context 中监控。如果 contextQt::ApplicationShortcut,则此快捷键适用于整个应用程序。否则,它可以是此小部件的本地快捷键,Qt::WidgetShortcut,或者自身的窗口快捷键,Qt::WindowShortcut

如果有多个小部件已经抓取了相同的 key 序列,当此 key 序列触发时,会向所有相关联的小部件发送非确定顺序的 QEvent::Shortcut 事件,但带有设置为 true 的“模糊”标志。

警告:通常情况下,您不需要使用这个函数;相反,您可以创建带有您所需的快捷键序列的 QAction(如果您还需要等效的菜单选项和工具栏按钮),或者如果只需键序列,则创建 QShortcut。这两个 QActionQShortcut 都为您处理所有的事件过滤并提供在用户触发键序列时触发的信号,所以它们比这个低级函数更容易使用。

参见 releaseShortcut() 和 setShortcutEnabled()。

QGraphicsEffect *QWidget::graphicsEffect() const

图形效果函数返回小部件的图形效果的指针。

如果小部件没有图形效果,则返回 nullptr

参见 setGraphicsEffect()。

QGraphicsProxyWidget *QWidget::graphicsProxyWidget() const

返回对应嵌入小部件的代理小部件;否则返回 nullptr

参见 QGraphicsProxyWidget::createProxyForChildWidget() 和 QGraphicsScene::addWidget()。

bool QWidget::hasEditFocus() const

如果此小部件当前具有编辑焦点,则返回 true,否则返回 false。

此功能仅在 Qt for Embedded Linux 中可用。

参见 setEditFocus() 和 QApplication::navigationMode()。

[虚拟] bool QWidget::hasHeightForWidth() const

如果小部件的首选高度依赖于其宽度,则返回 true,否则返回 false

[虚拟] int QWidget::heightForWidth(int w) const

返回给定宽度 w 的此小部件的首选高度。

如果小部件有布局,默认实现返回布局的首选高度。如果没有布局,默认实现返回-1,表示首选高度不依赖于宽度。

[slot] void QWidget::hide()

隐藏小部件。此函数等价于 setVisible(false)。

注意: 如果您正与 QDialog 或其子类一起工作,并且在此函数之后调用 show() 函数,对话框将显示在其原始位置。

另请参阅 hideEvent()、isHidden()、show()、setVisible()、isVisible() 和 close()。

[virtual protected] void QWidget::hideEvent(QHideEvent *event)

此事件处理器可以在子类中重新实现以接收小部件隐藏事件。事件在 event 参数中传递。

隐藏事件在小部件被隐藏后立即发送。

注意:当窗口系统更改小部件的映射状态时,小部件接收自发的显示和隐藏事件,例如,当用户最小化窗口时,发生自发的隐藏事件,当窗口再次恢复时,发生自发的显示事件。接收到自发的隐藏事件后,小部件仍然被视为在 isVisible() 的意义上可见。

另请参阅 visibleevent() 和 QHideEvent

[override virtual protected] void QWidget::initPainter(QPainter *painter) const

初始化 painter 画笔、背景和字体与给定小部件的相同。此函数在将画笔打开到 QWidget 上时自动调用。

[virtual protected] void QWidget::inputMethodEvent(QInputMethodEvent *event)

此事件处理器,对于事件 event,可以在子类中重新实现以接收输入法组合事件。此处理器在输入法状态更改时调用。

请注意,在创建自定义文本编辑小部件时,必须显式设置(使用 setAttribute() 函数)Qt::WA_InputMethodEnabled 窗口属性,才能接收输入法事件。

默认实现调用 event->ignore(),这拒绝了输入法事件。有关更多详细信息,请参阅 QInputMethodEvent 文档。

另请参阅 event() 和 QInputMethodEvent

[virtual] QVariant QWidget::inputMethodQuery(Qt::InputMethodQuery query) const

此方法仅对输入控件相关。输入法使用它来查询控件的一组属性,以便支持复杂的输入法操作,如对周围文本的支持和重新转换。

使用 query 指定查询哪个属性。

参见:inputMethodEvent(),QInputMethodEventQInputMethodQueryEventinputMethodHints

void QWidget::insertAction(QAction *before, QAction *action)

将动作 action 插入到这个控件的动作列表中,在动作 before 之前。如果 beforenullptrbefore 不是一个有效的动作,它将添加动作。

QWidget 应仅有一个每种动作。

参见:removeAction(),addAction(),QMenucontextMenuPolicyactions

void QWidget::insertActions(QAction *before, const QList<QAction *> &actions)

将动作 actions 插入到这个控件的动作列表中,在动作 before 之前。如果 beforenullptrbefore 不是一个有效的动作,它将添加动作。

QWidget 最多只能有一个每种动作。

参见:removeAction(),QMenuinsertAction() 和 contextMenuPolicy

bool QWidget::isAncestorOf(const QWidget *child) const

如果此控件是给定 child 的父控件(或更高一级的祖父,等等),并且两个控件都在同一窗口内,则返回 true;否则返回 false

bool QWidget::isEnabledTo(const QWidget *ancestor) const

如果启用 ancestor,则此控件将变为启用状态,返回 true;否则返回 false

如果控件本身或直到但不包括 ancestor 的每个父控件都没有被显式禁用,这将成立。

如果控件本身或任何祖先被显式禁用,则 isEnabledTo(0) 返回 false

这里“祖先”一词指的是同一窗口内的父控件。

因此 isEnabledTo(0) 会停止在此控件的窗口处,而与 isEnabled() 不同,后者也考虑父窗口。

参见:setEnabled() 和 enabled

bool QWidget::isHidden() const

如果控件已隐藏,则返回 true,否则返回 false

当对被隐藏的控件调用 show() 时,它才会变得可见。当父控件显示时,它不会自动显示。

要检查可见性,请使用 !isVisible() 替代(注意感叹号)。

isHidden() 表示 !isVisible(),但是一个小部件可能既不可见也不隐藏。这是某些小部件的情况,这些小部件是那些不可见小部件的子级。

小部件在以下情况下会隐藏:

  • 作为独立窗口创建的,
  • 作为可见小部件的子级创建的,
  • hide() 或 setVisible(false) 被调用。

bool QWidget::isVisibleTo(const QWidget *ancestor) const

如果ancestor 显示,则返回 true;否则返回 false

如果小部件本身及其所有父级(但不包括 ancestor)均未明确被隐藏,则会发生这种情况。

即使小部件被屏幕上的其他窗口遮挡,此函数仍将返回 true,如果移动它们,它将是可见的。

isVisibleTo(0) 等同于 isVisible()。

另请参阅show(),hide(),以及 isVisible()。

bool QWidget::isWindow() const

如果小部件是一个独立窗口,则返回 true,否则返回 false

窗口是一个不视觉上是任何其他小部件的子级的小部件,通常有一个框架和一个 窗口标题

窗口可以有一个 父级小部件。如果小部件与父级一起删除,它将被删除,如果父级最小化,它将被最小化等。如果窗口管理器支持,它还将与父级共享一个任务栏入口。

QDialogQMainWindow 小部件默认是窗口,即使构造函数中指定了父级小部件也是如此。此行为由 Qt::Window 标志指定。

另请参阅window(),isModal(),以及 parentWidget()。

[虚受保护的] void QWidget::keyPressEvent(QKeyEvent *event)

可以为事件 event 实现此事件处理器,以便接收小部件的按键事件。

小部件必须调用 setFocusPolicy() 才能接受初始焦点并拥有焦点以便接收按键事件。

如果重新实现此处理程序,如果不对按键进行操作,则调用基类实现非常重要。

默认实现关闭弹出小部件,如果用户按下 QKeySequence::Cancel(通常是 Escape 键)的键序列。否则,事件被忽略,以便小部件的父级可以解释它。

请注意,QKeyEvent 以 isAccepted() == true 开始,因此无需调用 QKeyEvent::accept() - 只需不要调用基类实现即可。

另请参阅keyReleaseEvent(),setFocusPolicy(),focusInEvent(),focusOutEvent(),event(),以及 QKeyEvent

[虚受保护的] void QWidget::keyReleaseEvent(QKeyEvent *event)

此事件处理器对应于 event 事件,可以在子类中重新实现以接收部件的关键释放事件。

部件最初必须 接收焦点拥有焦点 才能接收关键释放事件。

如果重新实现此处理程序,如果不对按键进行操作,则调用基类实现非常重要。

默认实现忽略事件,以便部件的父部件可以解释它。

请注意,QKeyEvent 以 isAccepted() == true 开始,因此无需调用 QKeyEvent::accept() - 只需不要调用基类实现即可。

另请参阅keyPressEvent()、QEvent::ignoresetFocusPolicyfocusInEventfocusOutEventeventQKeyEvent

[静态] QWidget *QWidget::keyboardGrabber()

返回当前正在抓取键盘输入的部件。

如果此应用程序中没有部件正在抓取键盘,则返回 nullptr

另请参阅grabMousemouseGrabber

QLayout *QWidget::layout() const

返回此部件上安装的布局管理器,如果没有安装布局管理器,则返回 nullptr

布局管理器设置布局中添加的子部件的几何形状。

另请参阅setLayoutsizePolicy布局管理

[虚拟保护] void QWidget::leaveEvent(QEvent *event)

可以在子类中实现此事件处理器以接收通过 event 参数传递的部件离开事件。

当鼠标光标离开部件时,会向该部件发送离开事件。

另请参阅enterEventmouseMoveEventevent

[槽] void QWidget::lower()

将部件降低到父部件堆栈的底部。

此调用后,部件将视觉上位于任何重叠的兄弟部件之后(因此被它们遮挡)。

另请参阅raisestackUnder

[自 6.0 开始] QPointF QWidget::mapFrom(const QWidget *parent, const QPointF &pos) const

将父部件 parent 的坐标系中的部件坐标 pos 转换为该部件的坐标系。函数参数 parent 不能为 nullptr,并且必须是调用部件的父部件。

此函数在 Qt 6.0 中引入。

另请参阅mapTomapFromParentmapFromGlobalunderMouse

QPoint QWidget::mapFrom(const QWidget *parent, const QPoint &pos) const

这是一个重载函数。

[since 6.0] QPointF QWidget::mapFromGlobal(const QPointF &pos) const

将全局屏幕坐标 pos 转换为小部件坐标。

此函数在 Qt 6.0 中引入。

另请参阅mapToGlobal(),mapFrom() 和 mapFromParent()。

QPoint QWidget::mapFromGlobal(const QPoint &pos) const

这是一个重载函数。

[since 6.0] QPointF QWidget::mapFromParent(const QPointF &pos) const

将父小部件坐标 pos 转换为小部件坐标。

如果没有父小部件,则与 mapFromGlobal() 相同。

此函数在 Qt 6.0 中引入。

另请参阅mapToParent(),mapFrom(),mapFromGlobal() 和 underMouse()。

QPoint QWidget::mapFromParent(const QPoint &pos) const

这是一个重载函数。

[since 6.0] QPointF QWidget::mapTo(const QWidget *parent, const QPointF &pos) const

将小部件坐标 pos 转换为 parent 的坐标系。 parent 不能是 nullptr,并且必须是调用小部件的父级。

此函数在 Qt 6.0 中引入。

另请参阅mapFrom(),mapToParent(),mapToGlobal() 和 underMouse()。

QPoint QWidget::mapTo(const QWidget *parent, const QPoint &pos) const

这是一个重载函数。

[since 6.0] QPointF QWidget::mapToGlobal(const QPointF &pos) const

将小部件坐标 pos 转换为全局屏幕坐标。例如,mapToGlobal(QPointF(0,0)) 将返回小部件左上像素的全局坐标。

此函数在 Qt 6.0 中引入。

另请参阅mapFromGlobal(),mapTo() 和 mapToParent()。

QPoint QWidget::mapToGlobal(const QPoint &pos) const

这是一个重载函数。

[since 6.0] QPointF QWidget::mapToParent(const QPointF &pos) const

将小部件坐标系中的 pos 转换为父小部件坐标系中的坐标。

如果小部件没有父级,等同于 mapToGlobal()。

此函数在 Qt 6.0 中引入。

另请参阅mapFromParent(),mapTo(),mapToGlobal() 以及 underMouse()。

QPoint QWidget::mapToParent(const QPoint &pos) const

这是一个重载函数。

QRegion QWidget::mask() const

返回当前小部件上设置的遮罩。如果没有设置遮罩,返回值将是一个空区域。

另请参阅setMask(),clearMask() 以及 QRegion::isEmpty()。

[重写虚受保护] int QWidget::metric(QPaintDevice::PaintDeviceMetric m) const

重新实现: QPaintDevice::metric(QPaintDevice::PaintDeviceMetric metric) const

虚拟函数 QPaintDevice::metric() 的内部实现。

m 是要获取的度量。

[虚受保护] void QWidget::mouseDoubleClickEvent(QMouseEvent *event)

此事件处理器,对于事件 event,可以由子类重新实现以接收小部件的鼠标双击事件。

默认实现调用 mousePressEvent

注意: 除了双击事件之外,小部件还将接收鼠标按下和鼠标释放事件。如果响应用户界面的事件且有另一个重叠此小部件消失,则仅接收双击事件。开发者需确保应用程序正确解释这些事件。

另请参阅mousePressEvent(),mouseReleaseEvent(),mouseMoveEvent(),event() 以及 QMouseEvent

[静态] QWidget *QWidget::mouseGrabber()

返回当前正在捕获鼠标输入的小部件。

如果没有小部件在此应用程序中当前捕获鼠标,则返回 nullptr

另请参阅grabMouse() 以及 keyboardGrabber

[虚受保护] void QWidget::mouseMoveEvent(QMouseEvent *event)

此事件处理器,对于事件 event,可以由子类重新实现以接收小部件的鼠标移动事件。

如果关闭了鼠标跟踪,只有当在鼠标移动时按下鼠标按钮时,才会触发鼠标移动事件。如果开启了鼠标跟踪,即使没有按下鼠标按钮也会发生鼠标移动事件。

QMouseEvent::pos() 报告鼠标光标相对于此小部件的位置。对于按下和释放事件,位置通常与最后鼠标移动事件的位置相同,但如果用户的手抖动,则可能不同。这是底层窗口系统的特性,而不是 Qt 的特性。

如果您想在鼠标移动时立即显示工具提示(例如,使用 QMouseEvent::pos() 获取鼠标坐标并将其作为工具提示显示),则必须首先启用上述鼠标跟踪。然后,为了确保工具提示立即更新,您必须在实现 mouseMoveEvent() 时调用 QToolTip::showText(),而不是调用 setToolTip()。

另请参阅:setMouseTracking(),mousePressEvent(),mouseReleaseEvent(),mouseDoubleClickEvent(),event(),QMouseEventScribble 示例

[虚保护] void QWidget::mousePressEvent(QMouseEvent *event)

此事件处理器适用于事件 event,可以在子类中重新实现以接收小部件的鼠标按下事件。

如果在 mousePressEvent() 中创建新的小部件,则 mouseReleaseEvent() 可能不会如预期那样结束,这取决于底层窗口系统(或 X11 窗口管理器)、小部件的位置以及其他因素。

默认实现实现了在点击窗口外部时关闭弹出小部件。对于其他小部件类型,则不执行任何操作。

另请参阅:mouseReleaseEvent(),mouseDoubleClickEvent(),mouseMoveEvent(),event(),QMouseEventScribble 示例

[虚保护] void QWidget::mouseReleaseEvent(QMouseEvent *event)

此事件处理器适用于事件 event,可以在子类中重新实现以接收小部件的鼠标释放事件。

另请参阅:mousePressEvent(),mouseDoubleClickEvent(),mouseMoveEvent(),event(),QMouseEventScribble 示例

void QWidget::move(int x, int y)

这是一个重载函数。

这相当于 move(QPoint(x, y))。

注意:设置属性 pos 的函数。

[虚保护] void QWidget::moveEvent(QMoveEvent *event)

此事件处理器可以在子类中重新实现以接收传递给event参数的 widget 移动事件。当小部件接收到此事件时,它已经处于新位置。

旧位置可通过 QMoveEvent::oldPos() 访问。

另请参阅:resizeEvent(),event(),move() 和 QMoveEvent

[虚拟受保护] bool QWidget::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)

这个特殊的事件处理程序可以在子类中重写,以接收由 eventType 标识的原生平台事件,这些事件通过 message 参数传递。

在您对这个函数的重写中,如果您想要阻止 Qt 处理该事件,返回 true 并设置 result。只有在 Windows 上,result 参数才有意义。如果返回 false,此原生事件将被传递回 Qt,Qt 将将其转换为 Qt 事件并发送到小部件。

注意:如果小部件有原生窗口句柄,才会将事件传递给此事件处理程序。

注意:此函数替代了 Qt 4 的 x11Event(),winEvent() 和 macEvent() 事件过滤器函数。

平台事件类型标识符消息类型结果类型
Windows"windows_generic_MSG"MSG *LRESULT
macOS"NSEvent"NSEvent *
XCB"xcb_generic_event_t"xcb_generic_event_t *

另请参阅:QAbstractNativeEventFilter.

QWidget *QWidget::nativeParentWidget() const

返回此小部件的原生父级,即具有系统标识符的下一个祖先小部件,如果没有原生父级,则返回 nullptr

另请参阅:effectiveWinId

QWidget *QWidget::nextInFocusChain() const

返回小部件焦点链中的下一个小部件。

另请参阅:previousInFocusChain

void QWidget::overrideWindowFlags(Qt::WindowFlags flags)

将小部件的窗口标志设置为 flags 告知窗口系统。

警告:除非您真的了解您在做什么,否则不要调用此函数。

另请参阅:setWindowFlags

[覆盖虚函数] QPaintEngine *QWidget::paintEngine() const

重实现:QPaintDevice::paintEngine() const

返回小部件的绘图引擎。

注意,用户不应明确调用此函数,因为它是仅用于重写的目的。此函数由 Qt 内部调用,默认实现可能并不总是返回一个有效的指针。

[虚拟受保护] void QWidget::paintEvent(QPaintEvent *event)

此事件处理程序可以在子类中重写,以接收通过 event 传递的绘图事件。

绘图事件是请求重绘小部件的所有部分或部分的事件。它可能由于以下原因之一发生

  • repaint() 或 update() 被调用,
  • 小部件被遮挡,现已揭露,或
  • 许多其他原因。

许多小部件可以在被要求时简单地重绘整个表面,但一些较慢的小部件需要通过仅重绘请求的区域来优化:QPaintEvent::region。这种速度优化不改变结果,因为在事件处理期间重绘被剪辑到该区域。例如,QListViewQTableView 就是这样做的。

Qt 也试图通过合并多个重绘事件为一个来加快重绘速度。当调用多次 update() 或窗口系统发送多个重绘事件时,Qt 会将这些事件合并为一个具有较大区域的单个事件(请参阅 QRegion::united)。repaint() 函数不允许这种优化,因此建议尽可能使用 update()。

在重绘事件发生时,更新区域通常会先被清除,因此你是在小部件的背景上绘制。

可以使用 setBackgroundRole() 和 setPalette() 来设置背景。

自 Qt 4.0 以来,QWidget 自动对绘图进行双缓冲,所以不需要在 paintEvent() 中编写双缓冲代码以避免闪烁。

注意:通常,你应该避免在 paintEvent() 内调用 update() 或 repaint()。例如,在 paintEvent() 中调用 update() 或 repaint() 在其子项上会导致未定义的行为;子项可能会或可能不会接收到重绘事件。

警告:如果你使用的是没有 Qt 后台的定制绘图引擎,必须设置 Qt::WA_PaintOnScreen。否则,QWidget::paintEngine() 将永远不会被调用;将使用后备存储。

另请参阅:event()、repaint()、update()、QPainterQPixmapQPaintEvent 以及 Analog Clock

QWidget *QWidget::parentWidget() const

返回此小部件的父项,如果没有父小部件则返回 nullptr

QWidget *QWidget::previousInFocusChain() const

previousInFocusChain 函数返回此小部件焦点链中的前一个小部件。

另请参阅:nextInFocusChain

[slot] void QWidget::raise()

将此小部件提升到父小部件堆栈的顶部。

在此调用之后,小部件将 visuals 地显示在所有重叠的兄弟小部件之前。

注意:当使用 activateWindow() 时,你可以调用此函数以确保窗口堆叠在顶部。

另请参阅:lower() 和 stackUnder

void QWidget::releaseKeyboard()

释放键盘占用。

另请参阅:grabKeyboard()、grabMouse() 和 releaseMouse

void QWidget::releaseMouse()

释放鼠标捕获。

另请参阅grabMouse(),grabKeyboard(),以及releaseKeyboard()。

void QWidget::releaseShortcut(int id)

从 Qt 的快捷方式系统中删除具有给定 id 的快捷方式。当父窗口崩溃时,该部件将不再接收 QEvent::Shortcut 事件(除非它有其他具有相同快捷方式的快捷键)。

注意:由于 Qt 的快捷方式系统在父窗口被销毁时会自动删除快捷方式,因此通常不需要使用此函数。最好使用 QActionQShortcut 来处理快捷方式,因为它们比此低级别函数更容易使用。注意,这操作开销较大。

另请参阅grabShortcut() 和 setShortcutEnabled()。

void QWidget::removeAction(QAction *action)

从该窗口的动作列表中删除动作 action

另请参阅insertAction(),actions(),以及 insertAction()。

void QWidget::render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))

使用 renderFlags 确定渲染方式,将此部件的 sourceRegion 渲染到 target 上。渲染从 targettargetOffset 开始。例如

QPixmap pixmap(widget->size());
widget->render(&pixmap);

如果 sourceRegion 是一个空区域,则该函数将使用 QWidget::rect() 作为区域,即整个部件。

在渲染之前,确保您已对 target 设备的活动画家(如果有)调用了 QPainter::end()。例如

QPainter painter(this);
...
painter.end();
myWidget->render(this);

注意:若要获得 QOpenGLWidget 的内容,请使用 QOpenGLWidget::grabFramebuffer()。

void QWidget::render(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))

这是一个重载函数。

将部件渲染到画家的 painter's QPainter::device 上。

当渲染时,会用到对油漆工 painter 应用的变换和设置。

注意:油漆工必须处于活动状态。在 macOS 上,该部件将被渲染到 QPixmap 中,然后由油漆工上绘。

另请参阅QPainter::device()。

[槽函数] void QWidget::repaint()

直接通过调用 paintEvent() 立即重绘小部件,除非禁止更新或小部件被隐藏。

我们建议只在需要立即重绘的情况下使用 repaint(),例如在动画过程中。在大多数情况下,update() 更好,因为它允许 Qt 优化速度并最小化闪烁。

警告:如果在可能会从 paintEvent() 调用的函数中调用 repaint(),可能会导致无限递归。update() 函数永远不会导致递归。

另请参阅:update(),paintEvent(),和 setUpdatesEnabled()。

void QWidget::repaint(int x, int y, int w, int h)

这是一个重载函数。

此版本将重绘小部件内部的一个矩形 (x, y, w, h)。

如果 w 为负值,则替换为 width() - x,如果 h 为负值,则替换为 height() - y

void QWidget::repaint(const QRect &rect)

这是一个重载函数。

此版本将重绘小部件内部的一个矩形 rect

void QWidget::repaint(const QRegion &rgn)

这是一个重载函数。

此版本将重绘小部件内部的一个区域 rgn

void QWidget::resize(int w, int h)

这是一个重载函数。

这对应于 resize(QSize(w, h))。

注意:属性 size 的设置函数。

[virtual protected] void QWidget::resizeEvent(QResizeEvent *event)

可以在子类中重新实现此事件处理器来接收通过 event 参数传递的小部件尺寸改变事件。当调用 resizeEvent() 时,小部件已经具有新的几何形状。可以通过 QResizeEvent::oldSize() 访问旧尺寸。

在处理尺寸改变事件后,小部件将立即被擦除并接收到一个绘制事件。在此事件处理器内部不应(也不应该)进行任何绘制。

另请参阅:moveEvent(),event(),resize(),QResizeEventpaintEvent,和 Scribble Example

bool QWidget::restoreGeometry(const QByteArray &geometry)

此函数将恢复存储在字节数组 geometry 中顶层小部件的几何形状和状态。成功则返回 true,否则返回 false

如果恢复的几何形状在屏幕外,它将被修改为位于可用的屏幕几何形状内。

要恢复使用 QSettings 保存的几何形状,可以使用如下代码

QSettings settings("MyCompany", "MyApp");
myWidget->restoreGeometry(settings.value("myWidget/geometry").toByteArray());

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

使用 QMainWindow::restoreState() 来恢复工具栏和停靠小部件的几何形状和状态。

另请参阅 saveGeometry(),QSettingsQMainWindow::saveState() 以及 QMainWindow::restoreState()。

QByteArray QWidget::saveGeometry() const

保存顶级小部件的当前几何形状和状态。

要在窗口关闭时保存几何形状,您可以实现如下关闭事件:

void MyWidget::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    QWidget::closeEvent(event);
}

有关窗口 geometry 问题概述,请参阅窗口 Geometry 文档。

使用 QMainWindow::saveState() 保存几何形状以及工具栏和浮动窗口部件的状态。

另请参阅 restoreGeometry(),QMainWindow::saveState() 以及 QMainWindow::restoreState()。

QScreen *QWidget::screen() const

返回该小部件所在的屏幕。

另请参阅 setScreen() 和 windowHandle()。

void QWidget::scroll(int dx, int dy)

滚动小部件及其子小部件,使它们向右滚动 dx 像素,并向下滚动 dy 像素。其中 dxdy 可能是负值。

滚动后,小部件将接收到绘制事件以重新绘制所需重新绘制的区域。对于 Qt 知道是不可透明的_widget,这仅是新的曝光部分。例如,如果一个不可透明的小部件向左滚动 8 像素,则只需更新右边缘 8 像素宽的条纹。

由于小部件默认通过其父级别联内容,您需要设置 autoFillBackground 属性或使用 setAttribute() 来设置 Qt::WA_OpaquePaintEvent 属性,以使小部件不可透明。

对于使用内容级联的小部件,滚动会导致整个滚动区域更新。

另请参阅 透明度和双缓冲

void QWidget::scroll(int dx, int dy, const QRect &r)

这是一个重载函数。

此版本只滚动 r 而不移动小部件的子项。

如果 r 为空或无效,则结果未定义。

另请参阅 QScrollArea

void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on = true)

如果 on 为真,则在当前小部件上设置属性 attribute;否则清除该属性。

另请参阅 testAttribute()。

void QWidget::setBackgroundRole(QPalette::ColorRole role)

将小部件的背景角色设置为 role

后台角色定义了从小部件的 palette 中使用以渲染后台的画笔。

如果 roleQPalette::NoRole,则小部件将继承其父级背景角色。

请注意,样式可以自由地从调色板中选择任何颜色。如果您使用 setBackgroundRole() 无法达到预期的效果,可以修改调色板或设置样式表。

另请参阅 backgroundRole() 和 foregroundRole()。

void QWidget::setBaseSize(int basew, int baseh)

这是一个重载函数。

这对应于设置 setBaseSize(QSize(basew, baseh))。设置小部件的基准尺寸为宽度 basew 和高度 baseh。

注意:属性 baseSize 的设置器函数。

void QWidget::setContentsMargins(int left, int top, int right, int bottom)

设置小部件内容的边距大小为 left、top、right、bottom。边距由布局系统使用,子类也可以用其来指定绘制区域(例如,不包括边框)。

改变边距将触发 resizeEvent()。

另请参阅:contentsRect() 和 contentsMargins()。

void QWidget::setContentsMargins(const QMargins &margins)

这是一个重载函数。

setContentsMargins 函数设置小部件内容的边距。

设置小部件内容的边距为由 margins 定义的尺寸。边距由布局系统使用,子类也可以用其来指定绘制区域(例如,不包括边框)。

改变边距将触发 resizeEvent()。

另请参阅:contentsRect() 和 contentsMargins()。

[槽] void QWidget::setDisabled(bool disable)

如果 disable 为 true,则禁用小部件输入事件;否则启用输入事件。

有关更多信息,请参阅 enabled 文档。

另请参阅isEnabledToQKeyEventQMouseEventchangeEvent

void QWidget::setEditFocus(bool enable)

如果 enable 为 true,则让此小部件具有编辑焦点,这时 Qt::Key_UpQt::Key_Down 将正常传递给小部件;否则,使用 Qt::Key_UpQt::Key_Down 来更改焦点。

此功能仅在 Qt for Embedded Linux 中可用。

另请参阅:hasEditFocus() 和 QApplication::navigationMode()。

void QWidget::setFixedHeight(int h)

将小部件的宽度和高度都设置为 h,不改变宽度。为了方便。

另请参阅:sizeHint()、minimumSize()、maximumSize() 和 setFixedSize()。

void QWidget::setFixedSize(const QSize &s)

将小部件的最小和最大尺寸都设置为 s,从而防止其生长或缩小。

这将覆盖由 QLayout 设置的默认大小限制。

要移除限制,请将大小设置为 QWIDGETSIZE_MAX

或者,如果您想基于内容设置小部件的固定大小,您可以调用 QLayout::setSizeConstraint(QLayout::SetFixedSize);

参阅 maximumSizeminimumSize

void QWidget::setFixedSize(int w, int h)

这是一个重载函数。

将小部件的宽度设置为w,高度设置为h

void QWidget::setFixedWidth(int w)

将小部件的最小和最大宽度设置为w,而不改变高度。为方便起见提供。

另请参阅:sizeHint()、minimumSize()、maximumSize() 和 setFixedSize()。

void QWidget::setFocus(Qt::FocusReason reason)

如果此小部件或其父级之一是 活动窗口,则将键盘输入焦点给予此小部件(或其焦点代理)。reason 参数将传递给从此函数发送的任何焦点事件,用于解释导致小部件获得焦点的原因。如果窗口不是活动窗口,则当窗口变为活动窗口时,小部件将被给予焦点。

首先,发送一个焦点即将更改事件到焦点小部件(如果有),以告知它即将失去焦点。然后更改焦点,发送一个焦点消失事件到先前的焦点项,并给新项发送一个焦点进入事件,告知它刚刚获得了焦点。(如果焦点进入和焦点消失的小部件相同,则不发生任何操作。)

注意:在嵌入式平台上,setFocus()不会通过输入法打开输入面板。如果您想发生这种情况,您必须自己向小部件发送一个QEvent::RequestSoftwareInputPanel事件。

setFocus()会给予小部件焦点,不管其焦点策略如何,但不会清除任何键盘捕获(请参阅 grabKeyboard)。

请注意,如果小部件被隐藏,它将不会接受焦点,直到它被显示出来。

警告:如果您在一个可能从 focusOutEvent() 或 focusInEvent() 调用的函数中调用setFocus(),您可能会遇到无限递归。

参阅:hasFocusclearFocusfocusInEventfocusOutEventsetFocusPolicyfocusWidgetQApplication::focusWidgetgrabKeyboardgrabMouse小部件中的键盘焦点QEvent::RequestSoftwareInputPanel

[slot] void QWidget::setFocus()

这是一个重载函数。

如果此小部件或其父级之一是 活动窗口,则给予此小部件(或其焦点代理)键盘输入焦点。

void QWidget::setFocusProxy(QWidget *w)

将小部件的焦点代理设置为小部件w。如果wnullptr,则函数将重置此小部件以没有焦点代理。

一些小部件“可以拥有焦点”,但创建子小部件,例如QLineEdit,来实际处理焦点。在这种情况下,小部件可以将文本框设置为它的焦点代理。

setFocusProxy()用于设置一个当“此小部件”获得焦点时实际上会获得焦点的窗口小部件。如果存在焦点代理,则setFocus()和hasFocus()操作的是焦点代理。如果“此小部件”是焦点窗口小部件,则setFocusProxy()将焦点移动到新的焦点代理。

另请参阅focusProxy

void QWidget::setForegroundRole(QPalette::ColorRole role)

设置窗口小部件的前景色为role

前景角色定义了从组件的QPalette中使用的颜色,用于绘制前景。

如果roleQPalette::NoRole,则窗口小部件将使用与背景角色对比的前景色。

请注意,样式可以自由选择调色板中的任何颜色。如果你通过setForegroundRole()没有达到想要的结果,你可以修改调色板或设置样式表。

另请参阅foregroundRolebackgroundRole

void QWidget::setGeometry(int x, int y, int w, int h)

这是一个重载函数。

这等同于setGeometry(QRect(x, y, w, h))).

注意:这是属性geometry的设置器函数。

void QWidget::setGraphicsEffect(QGraphicsEffect *effect)

setGraphicsEffect函数用于设置窗口小部件的图形效果。

effect设置为窗口小部件的效果。如果此窗口小部件上已经安装了一个效果,则QWidget将在安装新的effect之前删除现有效果。

如果effect是在不同窗口小部件上安装的效果,则setGraphicsEffect()将从中移除效果并安装在此窗口小部件上。

QWidget接管effect的所有权。

注意:此函数将效果应用于自身及其所有子项。

注意:基于OpenGL的窗口小部件,例如QGLWidget、QOpenGLWidgetQQuickWidget不支持图形效果。

另请参阅graphicsEffect

[slot] void QWidget::setHidden(bool hidden)

这是一次方便函数,相当于setVisible(!hidden)。

另请参阅isHidden

void QWidget::setLayout(QLayout *layout)

将窗口小部件的布局管理器设置为layout

如果此窗口小部件上已安装了布局管理器,则QWidget将不允许你安装另一个。你必须首先删除现有的布局管理器(由layout()返回),然后才能使用新布局调用setLayout()。

如果layout是不同窗口小部件上的布局管理器,则setLayout()将使布局成为窗口小部件的布局管理器。

示例

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(formWidget);
    setLayout(layout);

调用此函数的另一种方法是传递此窗口小部件到布局的构造函数。

QWidget将接管layout的所有权。

另请参阅layout()和布局管理

void QWidget::setMask(const QBitmap &bitmap)

仅使具有对应 1 位的 widget 像素可见。如果区域包括 widget 的rect()() 坐标系之外的像素,则该区域的窗口系统控件可能可见或不可见,这取决于平台。

注意,如果区域特别复杂,这种效果可能会很慢。

以下代码示例演示如何使用具有 alpha 通道的图像为 widget 生成遮罩。

    QLabel topLevelLabel;
    QPixmap pixmap(":/images/tux.png");
    topLevelLabel.setPixmap(pixmap);
    topLevelLabel.setMask(pixmap.mask());

此代码显示的标签使用包含的图像进行遮罩,给人一种不规则形状的图像被直接绘制在屏幕上的外观。

仅对有遮罩的 widget 的可见部分接收鼠标事件。

另请参阅maskclearMaskwindowOpacity

void QWidget::setMask(const QRegion &region)

这是一个重载函数。

仅使 widget 与 region 重叠的部分可见。如果区域包括 widget 的rect()() 坐标系之外的像素,则该区域的窗口系统控件可能可见或不可见,这取决于平台。

由于 QRegion 允许创建任意复杂的区域,因此可以创建合适的 widget 遮罩,即使窗口形态非常独特,甚至允许 widget 在其中显示有洞的图像。请注意,如果区域特别复杂,这种效果可能会很慢。

Widget 遮罩用于向窗口系统提供提示,告知应用程序不希望对遮罩外部区域进行鼠标事件。在大多数系统上,这还导致视觉效果粗略裁剪。为了获得平滑的窗口边缘,请使用透明背景和抗锯齿绘制,如下 Transparent Background 示例所示。

另请参阅windowOpacity

void QWidget::setMaximumSize(int maxw, int maxh)

这是一个重载函数。

此函数对应于 setMaximumSize(QSize(maxw, maxh))。将最大宽度设置为 maxw,将最大高度设置为 maxh

注意:该属性 maximumSize 的设置函数。

void QWidget::setMinimumSize(int minw, int minh)

这是一个重载函数。

此函数对应于 setMinimumSize(QSize(minw, minh))。将最小宽度设置为 minw,将最小高度设置为 minh

注意:该属性 minimumSize 的设置函数。

void QWidget::setParent(QWidget *parent)

将 widget 的父对象设置为 parent,并重置窗口标记。widget 将在新父窗口中的位置 (0, 0)。

如果新的父 widget 在不同的窗口中,则被重新父化的 widget 及其子 widget 将按照它们原来的内部顺序附加到新父 widget 的tab 链 的末尾。如果移动的 widget 之一拥有键盘焦点,则 setParent() 会调用 clearFocus() 以该 widget 为参数。

如果新的父小部件与旧父小部件位于同一窗口中,设置父小部件不会改变标签顺序或键盘焦点。

如果“新”的父小部件是旧父小部件,则此功能不执行任何操作。

注意:在更改父小部件时,小部件会变得不可见,即使它之前是可见的。您必须调用 show() 使小部件再次可见。

警告:您很少需要此功能。如果您有一个动态更改其内容的小部件,使用 QStackedWidget 要简单得多。

另请参阅:setWindowFlags

void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)

这是一个重载函数。

此函数还接受小部件标志 f 作为参数。

void QWidget::setScreen(QScreen *screen)

将显示小部件的屏幕设置为 screen

设置屏幕仅对窗口有意义。如果必要,小部件的窗口将在 screen 上重新创建。

注意:如果屏幕是多屏的虚拟桌面的一部分,窗口不会自动移动到 screen。要相对于屏幕放置窗口,请使用屏幕的 topLeft() 位置。

另请参阅:screen() 和 QWindow::setScreen()。

void QWidget::setShortcutAutoRepeat(int id, bool enable = true)

如果 enable 为 true,则会启用给定 id 的快捷键的自动重复;否则,它会被禁用。

另请参阅:grabShortcut() 和 releaseShortcut().

void QWidget::setShortcutEnabled(int id, bool enable = true)

如果 enable 为 true,则启用给定 id 的快捷键;否则,该快捷键会被禁用。

警告:通常您不需要使用此功能,因为 Qt 的快捷键系统会自动根据小部件的隐藏/显示和获得/失去焦点来启用/禁用快捷键。最好使用 QActionQShortcut 来处理快捷键,因为它们比此低级函数更容易使用。

另请参阅:grabShortcut() 和 releaseShortcut().

void QWidget::setSizeIncrement(int w, int h)

这是一个重载函数。

将 x(宽度)大小增量设置为 w,将 y(高度)大小增量设置为 h

注意:这是属性 sizeIncrement 的设置器函数。

void QWidget::setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)

这是一个重载函数。

将小部件的大小策略设置为 horizontalvertical,具有标准拉伸和没有高度为宽度的策略。

注意:这是属性 sizePolicy 的设置器函数。

另请参阅:QSizePolicy::QSizePolicy().

void QWidget::setStyle(QStyle *style)

将小部件的 GUI 样式设置为 style。样式对象的拥有权不会被转移。

如果没有设置样式,小部件将使用应用程序的样式,而不是QApplication::style()。

设置小部件的样式对现有或将来子小部件没有影响。

警告:此函数特别适用于演示目的,您想要展示 Qt 的样式功能。真实的应用程序应避免使用,而应使用一致的 GUI 样式。

警告: Qt 风格表目前不支持自定义 QStyle 子类。我们计划在未来某个版本中解决此问题。

另请参阅:style(),QStyleQApplication::style() 和 QApplication::setStyle()。

[静态] void QWidget::setTabOrder(QWidget *first, QWidget *second)

第二个 小部件添加到 第一个 小部件的焦点顺序之后。

实际上,它从其焦点链中移除 第二个 小部件,并将它插入到 第一个 小部件之后。

请注意,由于 第二个 小部件的选项卡顺序已更改,您应该按以下顺序排列链:

setTabOrder(a, b); // a to b
setTabOrder(b, c); // a to b to c
setTabOrder(c, d); // a to b to c to d

不是 如此

// WRONG
setTabOrder(c, d); // c to d
setTabOrder(a, b); // a to b AND c to d
setTabOrder(b, c); // a to b to c, but not c to d

如果 第一个第二个 有焦点代理,则 setTabOrder() 会正确替换代理。

注意:自 Qt 5.10 起:"一个具有子代理焦点的窗口被视为复合窗口。当设置一或两个复合窗口之间的选项卡顺序时,每个复合窗口内部将保留局部选项卡顺序。这意味着如果两个窗口都是复合窗口,其结果选项卡顺序将是第一个窗口中最后一个子窗口,到第二个窗口中第一个子窗口。

另请参阅:setFocusPolicy(),setFocusProxy() 和 Widgets 中的键盘焦点

[静态,自 6.6 版起] void QWidget::setTabOrder(std::initializer_list<QWidget *> widgets)

这是一个重载函数。

通过调用 QWidget::setTabOrder(QWidget *, QWidget *) 为 widgets 列表中的小部件设置选项卡顺序,方法是对每一对连续的小部件进行调用。

您可以通过以下方式调用,而不是手动设置每一对,如下所示:

setTabOrder(a, b); // a to b
setTabOrder(b, c); // a to b to c
setTabOrder(c, d); // a to b to c to d

您可以通过以下方式调用

setTabOrder({a, b, c, d}); // a to b to c to d

调用不会创建封闭的选项卡焦点循环。如果有更多具有 Qt::TabFocus 焦点策略的小部件,按 d 选项卡将使焦点移动到这些窗口之一,而不是回到 a

此函数是在 Qt 6.6 中引入的。

另请参阅:setFocusPolicy(),setFocusProxy() 和 Widgets 中的键盘焦点

void QWidget::setWindowFlag(Qt::WindowType flag, bool on = true)

如果 on 为 true,则将窗口标志 flag 设置在此小部件上;否则清除标志。

另请参阅:setWindowFlags(),windowFlags() 和 windowType()。

void QWidget::setWindowRole(const QString &role)

将窗口的角色设置为 role。此操作只适用于 X11 上的窗口。

另请参阅:windowRole()。

void QWidget::setWindowState(Qt::WindowStates windowState)

将窗口状态设置为 windowState。窗口状态是 Qt::WindowState 的 OR 组合:Qt::WindowMinimized、Qt::WindowMaximized、Qt::WindowFullScreen 和 Qt::WindowActive。

如果窗口不可见(即 isVisible() 返回 false),则当调用 show() 时窗口状态生效。对于可见窗口,更改是立即发生的。例如,要在全屏和正常模式之间切换,请使用以下代码:

w->setWindowState(w->windowState() ^ Qt::WindowFullScreen);

要恢复并激活最小化窗口(同时保留其最大化/全屏状态),请使用以下操作

w->setWindowState((w->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);

调用此函数将隐藏小部件。您必须调用 show() 来重新使小部件可见。

注意:在某些窗口系统中,Qt::WindowActive 不是立即的,可能在某些情况下被忽略。

当窗口状态发生变化时,小部件会收到一个类型为 QEvent::WindowStateChange 的 changeEvent。

另请参阅:Qt::WindowState 和 windowState

void QWidget::setupUi(QWidget *widget)

为指定的 widget 设置用户界面。

注意:此功能适用于使用 uic 创建的用户界面描述派生的控件。

另请参阅:在使用 Designer UI 文件的应用程序中使用 Designer UI 文件

[slot] void QWidget::show()

显示小部件及其子小部件。

对于子窗口,这相当于调用 setVisible(true)。否则,相当于调用 showFullScreen()、showMaximized() 或 setVisible(true),具体取决于平台对窗口标志的默认行为。

另请参阅:raise、showEvent、hide、setVisible、showMinimized、showMaximized、showNormal、isVisible 和 windowFlags

[virtual protected] void QWidget::showEvent(QShowEvent *event)

可以在子类中重写此事件处理程序,以接收通过 event 参数传入的 widget 显示事件。

非自发性显示事件在显示小部件之前立即发送。窗口的自发性显示事件将在之后发送。

注意:当窗口系统更改小部件的映射状态时,小部件接收自发的显示和隐藏事件,例如,当用户最小化窗口时,发生自发的隐藏事件,当窗口再次恢复时,发生自发的显示事件。接收到自发的隐藏事件后,小部件仍然被视为在 isVisible() 的意义上可见。

另请参阅:visible、event 和 QShowEvent

[slot] void QWidget::showFullScreen()

以全屏模式显示小部件。

调用此函数将仅影响窗口。

要从全屏模式返回,请调用 showNormal() 或 close()。

注意:在全屏模式下,Windows上运行良好,但在X下存在某些问题。这些问题是由于规范X11客户端和窗口管理器之间通信的ICCCM协议的限制造成的。ICCCM根本不理解非装饰的全屏窗口的概念。因此,你能做的就是请求无边框窗口并将它放置和调整大小以填满整个屏幕。根据窗口管理器的不同,这可能有效或无效。无边框窗口的请求使用MOTIF提示来实现,这是几乎所有现代窗口管理器至少部分支持的。

另一种选择是完全不通过窗口管理器,并使用具有Qt::X11BypassWindowManagerHint标志的窗口。但这会有其他严重问题,比如破坏键盘焦点,以及当用户打开或关闭其他窗口时的非常奇怪的效果。

遵循现代后ICCCM规范的X11窗口管理器可以正确支持全屏模式。

在macOS上,显示全屏窗口会将整个应用程序置于全屏模式,为其提供一个专用桌面。当应用程序处于全屏模式运行时,显示另一个窗口可能会自动使该窗口也切换为全屏。为了避免这种情况,可以在显示另一个窗口之前调用showNormal()或close()关闭全屏窗口来退出全屏模式。

另请参阅:showNormal(),showMaximized(),show(),isVisible()和close()。

[槽] void QWidget::showMaximized()

显示最大化的小部件。

调用此函数将仅影响窗口。

在X11上,此函数可能无法与某些窗口管理器正确工作。关于解释,请参阅窗口几何形状文档。

另请参阅:setWindowState(),showNormal(),showMaximized(),show(),hide()和isVisible()。

[槽] void QWidget::showMinimized()

以图标形式显示最小化的小部件。

调用此函数将仅影响窗口。

另请参阅:showNormal(),showMaximized(),show(),hide(),isVisible()和isMinimized()。

[槽] void QWidget::showNormal()

在最大化或最小化后恢复小部件。

调用此函数将仅影响窗口。

另请参阅:setWindowState(),showMinimized(),showMaximized(),show(),hide()和isVisible()。

void QWidget::stackUnder(QWidget *w)

将小部件放置在其父小部件堆中的w之下。

为此,小部件本身及其w必须是兄弟关系。

另请参阅:raise()和lower()。

QStyle *QWidget::style() const

另请参阅:QWidget::setStyle(),QApplication::setStyle()和QApplication::style()。

[虚拟受保护] void QWidget::tabletEvent(QTabletEvent *event)

此事件处理程序,用于处理事件 event,可以在子类中重新实现以接收小部件的平板电脑事件。

如果您重新实现了此处理程序,如果您未处理它,则非常重要,您必须调用ignore()事件,以便小部件的父项可以解释它。

默认实现忽略该事件。

如果关闭了平板电脑跟踪,只有在笔触碰到平板电脑或者在移动笔的同时至少按下一个笔按钮时,才会发生平板电脑移动事件。如果打开了平板电脑跟踪,即使笔靠近平板电脑而未按下任何按钮,也会发生平板电脑移动事件。

另请参阅QEvent::ignore()、QEvent::accept()、event()、setTabletTracking()和QTabletEvent

bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const

如果在这个小部件上设置了属性attribute,则返回true;否则返回false

另请参阅setAttribute

bool QWidget::underMouse() const

如果小部件位于鼠标光标下,则返回true;否则返回false

在拖放操作期间,此值不会正确更新。

另请参阅enterEvent()和leaveEvent

void QWidget::ungrabGesture(Qt::GestureType gesture)

取消为给定的gesture类型订阅小部件

另请参阅grabGesture()和QGestureEvent

[槽函数] void QWidget::update()

如果未禁用更新或小部件是隐藏的,则更新小部件。

此函数不会立即引起重绘;相反,它在Qt返回到主事件循环时安排一个绘图事件进行处理。这允许Qt在速度和减少闪烁方面比repaint()调用优化。

通常情况下,多次调用update()只会产生一次paintEvent()调用。

paintEvent()调用之前,Qt通常会清除小部件的区域。如果设置了Qt::WA_OpaquePaintEvent小部件属性,则小部件负责使用不透明的颜色绘制所有像素。

另请参阅repaint()、paintEvent()、setUpdatesEnabled()和Analog Clock

void QWidget::update(int x, int y, int w, int h)

这是一个重载函数。

此版本更新小部件内的矩形的版本(xywh)。

void QWidget::update(const QRect &rect)

这是一个重载函数。

此版本更新小部件内矩形rect

void QWidget::update(const QRegion &rgn)

这是一个重载函数。

此版本将重绘小部件内部的一个区域 rgn

void QWidget::updateGeometry()

通知布局系统该小部件已更改,可能需要更改几何形状。

如果有更改 sizeHint() 或 sizePolicy(),请调用此函数。

对于显式隐藏的小部件,updateGeometry() 无操作。一旦小部件显示,布局系统将立即通知。

[protected slot] void QWidget::updateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll)

更新小部件的微焦点,并通知输入法已更改由 query 指定的状态。

QRegion QWidget::visibleRegion() const

返回未遮挡的区域内可以发生绘制事件。

对于可见小部件,这是不被其他小部件覆盖的区域的一个近似值;否则,这是一个空区域。

在必要时,repaint() 函数将调用此函数,因此通常不需要调用它。

[virtual protected] void QWidget::wheelEvent(QWheelEvent *event)

此事件处理器,对于事件 event,可以在子类中重写以获取小部件的轮事件。

如果您重新实现了此处理程序,如果您未处理它,则非常重要,您必须调用ignore()事件,以便小部件的父项可以解释它。

默认实现忽略该事件。

另请参阅 QEvent::ignore(),QEvent::accept(),event() 和 QWheelEvent

WId QWidget::winId() const

返回小部件的窗口系统标识符。

在原则上具有可移植性,但如果你使用它,你可能即将进行某些不可移植的操作。请小心。

如果小部件是非原生的(外星),并且在其上调用 winId(),则该小部件将获得一个原生句柄。

此值可能会在运行时更改。在窗口系统标识符更改后,将向小部件发送类型为 QEvent::WinIdChange 的事件。

另请参阅 find

QWidget *QWidget::window() const

返回此小部件的窗口,即具有(或可能具有)窗口系统框架的下一个祖先小部件。

如果小部件是窗口,则返回该小部件本身。

典型用途是更改窗口标题

aWidget->window()->setWindowTitle("New Window Title");

另请参阅 isWindow

QWindow *QWidget::windowHandle() const

如果是原生小部件,则返回相关的 QWindow。否则返回 null。

原生小部件包括顶层小部件、QGLWidget 和在其上调用 winId() 的子小部件。

另请参阅 winId() 和 screen

[signal] void QWidget::windowIconChanged(const QIcon &icon)

当窗口图标更改时发出此信号,其中新 icon 作为参数。

注意:属性 windowIcon 的通知信号。

QString QWidget::windowRole() const

返回窗口的角色,或一个空字符串。

另请参阅 setWindowRole(),windowIcon,以及windowTitle

Qt::WindowStates QWidget::windowState() const

返回当前的窗口状态。窗口状态是Qt::WindowState的组合,这些状态可以通过位或(OR)操作组合起来:Qt::WindowMinimizedQt::WindowMaximizedQt::WindowFullScreen,以及Qt::WindowActive

另请参阅 Qt::WindowStatesetWindowState

[信号] void QWidget::windowTitleChanged(const QString &title)

当窗口标题更改时,会发出此信号,并将新的title作为参数传递。

注意:属性windowTitle的通知信号。

Qt::WindowType QWidget::windowType() const

返回此小部件的窗口类型。这等于windowFlags() & Qt::WindowType_Mask

另请参阅 windowFlags

宏文档

QWIDGETSIZE_MAX

定义了QWidget对象的最大尺寸。

小部件允许的最大尺寸是QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX),即QSize (16777215,16777215)。

另请参阅 QWidget::setMaximumSize

© 2024 Qt公司有限公司。本文件中包含的文档贡献的版权属于各自的拥有者。本文件提供的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt和相关的标志是芬兰Qt公司及其它国家的商标。所有其他商标属于各自的所有者。