本页内容

QWidget Class

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

公共类型

enum RenderFlag { DrawWindowBackground, DrawChildren, IgnoreMask }
flags RenderFlags

属性

公共函数

QWidget(QWidget*parent= nullptr, Qt::WindowFlagsf= Qt::WindowFlags())
虚拟 ~QWidget()
bool acceptDrops() const
QString accessibleDescription() const
QString accessibleIdentifier() const
QString accessibleName() const
QList<QAction *> actions() const
void activateWindow()
void addAction(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 QKeySequence&shortcut)
(since 6.3) QAction *addAction(const QIcon&icon, const QString&text, const QKeySequence&shortcut)
(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, Args &&...args)
(since 6.3) QAction *addAction(const QIcon&icon, const QString&text, const QKeySequence&shortcut, Args &&...args)
(since 6.3) QAction *addAction(const QString&text, const QObject*receiver, const char*member, Qt::ConnectionTypetype= Qt::AutoConnection)
(since 6.3) QAction *addAction(const QIcon&icon, const QString&text, const QObject*receiver, const char*member, Qt::ConnectionTypetype= Qt::AutoConnection)
(since 6.3) QAction *addAction(const QString&text, const QKeySequence&shortcut, const QObject*receiver, const char*member, Qt::ConnectionTypetype= Qt::AutoConnection)
(since 6.3) QAction *addAction(const QIcon&icon, const QString&text, const QKeySequence&shortcut, const QObject*receiver, const char*member, Qt::ConnectionTypetype= Qt::AutoConnection)
void addActions(const QList<QAction *>&actions)
void adjustSize()
bool autoFillBackground() const
QPalette::ColorRole backgroundRole() const
QBackingStore *backingStore() const
QSize baseSize() const
QWidget *childAt(intx, inty) const
QWidget *childAt(const QPoint&p) const
(since 6.8) QWidget *childAt(const QPointF&p) const
QRect childrenRect() const
QRegion childrenRegion() const
void clearFocus()
void clearMask()
QMargins contentsMargins() const
QRect contentsRect() const
Qt::ContextMenuPolicy contextMenuPolicy() const
QCursor cursor() const
WId effectiveWinId() const
void ensurePolished() const
Qt::FocusPolicy focusPolicy() const
QWidget *focusProxy() const
QWidget *focusWidget() const
const QFont &font() const
QFontInfo fontInfo() const
QFontMetrics fontMetrics() const
QPalette::ColorRole foregroundRole() const
QRect frameGeometry() const
QSize frameSize() const
const QRect &geometry() const
QPixmap grab(const QRect&rectangle= QRect(QPoint(0, 0), QSize(-1, -1)))
void grabGesture(Qt::GestureType手势, Qt::GestureFlags标志= Qt::GestureFlags())
void grabKeyboard()
void grabMouse()
void grabMouse(const QCursor&cursor)
int grabShortcut(const QKeySequence&key, Qt::ShortcutContextcontext= Qt::WindowShortcut)
QGraphicsEffect *graphicsEffect() const
QGraphicsProxyWidget *graphicsProxyWidget() const
bool hasFocus() const
虚拟 bool hasHeightForWidth() const
bool hasMouseTracking() const
bool hasTabletTracking() const
int height() const
虚拟 int heightForWidth(intw) const
Qt::InputMethodHints inputMethodHints() const
虚拟 QVariant inputMethodQuery(Qt::InputMethodQueryquery) const
void insertAction(QAction*before, QAction*action)
void insertActions(QAction*before, const QList<QAction *>&actions)
bool isActiveWindow() const
bool isAncestorOf(const QWidget*child) const
bool isEnabled() const
bool isEnabledTo(const QWidget*ancestor) const
bool isFullScreen() const
bool isHidden() const
bool isMaximized() const
bool isMinimized() const
bool isModal() const
bool isVisible() const
bool isVisibleTo(const QWidget*ancestor) const
bool isWindow() const
bool isWindowModified() const
QLayout *layout() const
Qt::LayoutDirection layoutDirection() const
QLocale locale() const
(since 6.0) QPointF mapFrom(const QWidget*parent, const QPointF&pos) const
QPoint mapFrom(const QWidget*parent, const QPoint&pos) const
(since 6.0) QPointF mapFromGlobal(const QPointF&pos) const
QPoint mapFromGlobal(const QPoint&pos) const
(since 6.0) QPointF mapFromParent(const QPointF&pos) const
QPoint mapFromParent(const QPoint&pos) const
(since 6.0) QPointF mapTo(const QWidget*parent, const QPointF&pos) const
QPoint mapTo(const QWidget*parent, const QPoint&pos) const
(since 6.0) QPointF mapToGlobal(const QPointF&pos) const
QPoint mapToGlobal(const QPoint&pos) const
(since 6.0) QPointF mapToParent(const QPointF&pos) const
QPoint mapToParent(const QPoint&pos) const
QRegion mask() const
int maximumHeight() const
QSize maximumSize() const
int maximumWidth() const
int minimumHeight() const
QSize minimumSize() const
virtual QSize minimumSizeHint() const
int minimumWidth() const
void move(intx, inty)
void move(const QPoint &)
QWidget *nativeParentWidget() const
QWidget *nextInFocusChain() const
QRect normalGeometry() const
void overrideWindowFlags(Qt::WindowFlags标志)
const QPalette &palette() const
QWidget *parentWidget() const
QPoint pos() const
QWidget *previousInFocusChain() const
QRect rect() const
void releaseKeyboard()
void releaseMouse()
void releaseShortcut(intid)
void removeAction(QAction*action)
void render(QPaintDevice*target, const QPoint&targetOffset= QPoint(), const QRegion&sourceRegion= QRegion(), QWidget::RenderFlagsrenderFlags= RenderFlags(DrawWindowBackground | DrawChildren))
void render(QPainter*painter, const QPoint&targetOffset= QPoint(), const QRegion&sourceRegion= QRegion(), QWidget::RenderFlagsrenderFlags= RenderFlags(DrawWindowBackground | DrawChildren))
void repaint(const QRect&rect)
void repaint(const QRegion&rgn)
void repaint(intx, inty, intw, inth)
void resize(intw, inth)
void resize(const QSize &)
bool restoreGeometry(const QByteArray&geometry)
QByteArray saveGeometry() const
QScreen *screen() const
void scroll(intdx, intdy)
void scroll(intdx, intdy, const QRect&r)
void setAcceptDrops(boolon)
void setAccessibleDescription(const QString&description)
void setAccessibleIdentifier(const QString&标识符)
void setAccessibleName(const QString&name)
void setAttribute(Qt::WidgetAttribute属性, boolon= true)
void setAutoFillBackground(boolenabled)
void setBackgroundRole(QPalette::ColorRole角色)
void setBaseSize(const QSize &)
void setBaseSize(intbasew, intbaseh)
void setContentsMargins(intleft, inttop, intright, intbottom)
void setContentsMargins(const QMargins&margins)
void setContextMenuPolicy(Qt::ContextMenuPolicypolicy)
void setCursor(const QCursor &)
void setFixedHeight(inth)
void setFixedSize(const QSize&s)
void setFixedSize(intw, inth)
void setFixedWidth(intw)
void setFocus(Qt::FocusReasonreason)
void setFocusPolicy(Qt::FocusPolicypolicy)
void setFocusProxy(QWidget*w)
void setFont(const QFont &)
void setForegroundRole(QPalette::ColorRole角色)
void setGeometry(intx, inty, intw, inth)
void setGeometry(const QRect &)
void setGraphicsEffect(QGraphicsEffect*effect)
void setInputMethodHints(Qt::InputMethodHintshints)
void setLayout(QLayout*layout)
void setLayoutDirection(Qt::LayoutDirectiondirection)
void setLocale(const QLocale&locale)
void setMask(const QBitmap&bitmap)
void setMask(const QRegion&region)
void setMaximumHeight(intmaxh)
void setMaximumSize(const QSize &)
void setMaximumSize(intmaxw, intmaxh)
void setMaximumWidth(intmaxw)
void setMinimumHeight(intminh)
void setMinimumSize(const QSize &)
void setMinimumSize(intminw, intminh)
void setMinimumWidth(intminw)
void setMouseTracking(boolenable)
void setPalette(const QPalette &)
void setParent(QWidget*parent)
void setParent(QWidget*parent, Qt::WindowFlagsf)
void setScreen(QScreen*screen)
void setShortcutAutoRepeat(intid, boolenable= true)
void setShortcutEnabled(intid, boolenable= true)
void setSizeIncrement(const QSize &)
void setSizeIncrement(intw, inth)
void setSizePolicy(QSizePolicy)
void setSizePolicy(QSizePolicy::Policyhorizontal, QSizePolicy::Policyvertical)
void setStatusTip(const QString &)
void setStyle(QStyle*style)
void setTabletTracking(boolenable)
void setToolTip(const QString &)
void setToolTipDuration(intmsec)
void setUpdatesEnabled(boolenable)
void setWhatsThis(const QString &)
void setWindowFilePath(const QString&filePath)
void setWindowFlag(Qt::WindowType标志, bool开启= true)
void setWindowFlags(Qt::WindowFlagstype)
void setWindowIcon(const QIcon&icon)
void setWindowModality(Qt::WindowModality窗口模式)
void setWindowOpacity(qreal级别)
void setWindowRole(const QString&role)
void setWindowState(Qt::WindowStates窗口状态)
void setupUi(QWidget*widget)
QSize size() const
virtual QSize sizeHint() const
QSize sizeIncrement() const
QSizePolicy sizePolicy() const
void stackUnder(QWidget*w)
QString statusTip() const
QStyle *style() const
QString styleSheet() const
bool testAttribute(Qt::WidgetAttribute属性) const
QString toolTip() const
int toolTipDuration() const
bool underMouse() const
void ungrabGesture(Qt::GestureType手势)
void unsetCursor()
void unsetLayoutDirection()
void unsetLocale()
void update(const QRect&rect)
void update(const QRegion&rgn)
void update(intx, inty, intw, inth)
void updateGeometry()
bool updatesEnabled() const
QRegion visibleRegion() const
QString whatsThis() const
int width() const
WId winId() const
QWidget *window() const
QString windowFilePath() const
Qt::WindowFlags windowFlags() const
QWindow *windowHandle() const
QIcon windowIcon() const
Qt::WindowModality windowModality() const
qreal windowOpacity() const
QString windowRole() const
Qt::WindowStates windowState() const
QString windowTitle() const
Qt::WindowType windowType() const
int x() const
int y() const

重新实现的公共函数

virtual QPaintEngine *paintEngine() const override

公共插槽

bool close()
void hide()
void lower()
void raise()
void repaint()
void setDisabled(bool disable)
void setEnabled(bool)
void setFocus()
void setHidden(bool hidden)
void setStyleSheet(const QString &styleSheet)
virtual void setVisible(bool visible)
void setWindowModified(bool)
void setWindowTitle(const QString &)
void show()
void showFullScreen()
void showMaximized()
void showMinimized()
void showNormal()
void update()

信号

void customContextMenuRequested(const QPoint &pos)
void windowIconChanged(const QIcon &icon)
void windowTitleChanged(const QString &title)

静态公共成员

QWidget *createWindowContainer(QWindow *window, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
QWidget *find(WId id)
QWidget *keyboardGrabber()
QWidget *mouseGrabber()
void setTabOrder(QWidget *first, QWidget *second)
(since 6.6) void setTabOrder(std::initializer_list<QWidget *> widgets)

受保护函数

virtual void actionEvent(QActionEvent *event)
virtual void changeEvent(QEvent *event)
virtual void closeEvent(QCloseEvent *event)
virtual void contextMenuEvent(QContextMenuEvent *event)
void create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true)
void destroy(bool destroyWindow = true, bool destroySubWindows = true)
virtual void dragEnterEvent(QDragEnterEvent *event)
virtual void dragLeaveEvent(QDragLeaveEvent *event)
virtual void dragMoveEvent(QDragMoveEvent *event)
virtual void dropEvent(QDropEvent *event)
virtual void enterEvent(QEnterEvent *event)
virtual void focusInEvent(QFocusEvent *event)
bool focusNextChild()
virtual bool focusNextPrevChild(bool next)
virtual void focusOutEvent(QFocusEvent *event)
bool focusPreviousChild()
virtual void hideEvent(QHideEvent *event)
virtual void inputMethodEvent(QInputMethodEvent *event)
virtual void keyPressEvent(QKeyEvent *event)
virtual void keyReleaseEvent(QKeyEvent *event)
virtual void leaveEvent(QEvent *event)
virtual void mouseDoubleClickEvent(QMouseEvent *event)
virtual void mouseMoveEvent(QMouseEvent *event)
virtual void mousePressEvent(QMouseEvent *event)
virtual void mouseReleaseEvent(QMouseEvent *event)
virtual void moveEvent(QMoveEvent *event)
virtual bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result)
virtual void paintEvent(QPaintEvent *event)
virtual void resizeEvent(QResizeEvent *event)
virtual void showEvent(QShowEvent *event)
virtual void tabletEvent(QTabletEvent *event)
virtual void wheelEvent(QWheelEvent *event)

重新实现的受保护函数

virtual bool event(QEvent*event) override
virtual void initPainter(QPainter*painter) const override
virtual int metric(QPaintDevice::PaintDeviceMetricm) const override

受保护的槽

void updateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll)

宏

详细说明

小部件是用户界面的基本单元:它从窗口系统接收鼠标、键盘及其他事件,并在屏幕上绘制自身的图像。每个小部件都是矩形的,并且按照Z顺序进行排列。小部件会受到其父窗口以及位于其前方的其他小部件的裁剪。

未嵌入父控件的控件称为窗口。通常,窗口具有边框和标题栏,但也可以通过使用合适的window flags 来创建不带此类装饰的窗口。在Qt中,QMainWindow 以及QDialog 的各种子类是最常见的窗口类型。

每个小部件的构造函数都接受一个或两个标准参数:

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

QWidget 拥有许多成员函数,但其中一些几乎没有直接的功能;例如,QWidget 有一个 font 属性,但它本身从未使用过该属性。有许多子类提供了实际的功能,例如QLabel 、QPushButton 、QListWidget 和QTabWidget 。

顶级小部件与子小部件

没有父控件的控件总是独立窗口(顶级控件)。对于此类控件,setWindowTitle() 和setWindowIcon() 分别用于设置标题栏和图标。

非窗口控件属于子控件,显示在其父控件内部。Qt Widgets 中的大多数控件主要作为子控件使用。例如,虽然可以将按钮作为顶级窗口显示,但大多数开发者更倾向于将按钮放置在其他控件(如QDialog )内部。

带有标注子控件的预约控件

一个包含多个子小部件的父小部件。

上图展示了一个QGroupBox 控件,用于在QGridLayout 提供的布局中容纳各种子控件。QLabel 子控件已用虚线勾勒出轮廓,以标示其完整尺寸。

若要使用 QWidget 来容纳子控件,通常需要为父级 QWidget 添加布局。更多信息请参阅“布局管理”。

复合小部件

当一个控件被用作容器来分组多个子控件时,它就被称为复合控件。可以通过创建一个具有所需视觉属性的控件(例如QFrame )并向其添加子控件来创建复合控件,这些子控件通常由布局进行管理。

复合小部件还可以通过继承标准小部件(如 QWidget 或QFrame )并将其子类的构造函数中添加必要的布局和子小部件来创建。Qt 提供的许多示例都采用了这种方法,QtWidgets 教程中也有相关介绍。

自定义控件与绘制

由于 QWidget 是QPaintDevice 的子类,因此可以通过子类来显示自定义内容,这些内容是通过使用QPainter 类的实例执行一系列绘制操作而组成的。这种方法与Graphics View Framework采用的画布式方法形成对比——在后者中,应用程序将项目添加到场景中,而渲染工作则由框架本身完成。

每个小部件都在其 `paintEvent()` 函数内部执行所有绘制操作。每当小部件需要重绘时(无论是由于外部变化还是应用程序请求),该函数都会被调用。

“模拟时钟”示例展示了简单的控件如何处理绘制事件。

尺寸提示和尺寸策略

在实现新的控件时,几乎总是需要重写sizeHint() 方法,为控件提供合理的默认尺寸,并使用setSizePolicy() 设置正确的尺寸策略。

默认情况下,未提供尺寸提示的复合小部件将根据其子小部件的空间需求进行尺寸调整。

尺寸策略可让您为布局管理系统提供良好的默认行为,以便其他控件能够轻松容纳并管理您的控件。默认尺寸策略表明尺寸提示代表了控件的首选尺寸,这对许多控件而言通常已足够。

注意: 顶级小部件的大小 受限于桌面高度和宽度的 2/3。如果这些边界不足,您可以手动调用 `resize()` 方法调整小部件的大小。

事件

Qt Widgets 会响应通常由用户操作触发的事件。Qt 通过调用特定的事件处理函数来向 Qt Widgets 传递事件,这些函数的参数是QEvent 子类的实例,其中包含每个事件的相关信息。

如果您的控件仅包含子控件,则通常无需实现任何事件处理程序。若要在子控件中检测鼠标点击,请在控件的 `mousePressEvent()` 方法中调用子控件的 `underMouse()` 方法。

Scribble 示例实现了更全面的事件集,用于处理鼠标移动、按钮点击和窗口调整大小。

你需要为自己的控件提供行为和内容,但以下是对与 QWidget 相关的事件的简要概述,从最常见的开始:

  • paintEvent() 会在小部件需要重绘时被调用。每个显示自定义内容的小部件都必须实现该函数。使用 `QPainter ` 进行绘制只能在 `paintEvent()` 函数内进行,或由 `paintEvent()` 调用的函数中进行。
  • resizeEvent() 在小部件被调整大小时被调用。
  • mousePressEvent() 在鼠标光标位于小部件内部时按下鼠标按钮,或者小部件通过 `grabMouse()` 捕获鼠标时被调用。按住鼠标不松开实际上等同于调用 `grabMouse()`。
  • mouseReleaseEvent() 在鼠标按钮被释放时被调用。当小部件已接收过相应的鼠标按下事件时,它才会接收鼠标释放事件。这意味着,如果用户在小部件内部按下鼠标,然后将鼠标拖动到其他位置后才释放鼠标按钮,你的小部件仍会接收该释放事件。 只有一种例外情况:如果在按住鼠标按钮期间弹出了上下文菜单,该菜单会立即截取鼠标事件。
  • mouseDoubleClickEvent() 在用户在小部件内双击时被调用。如果用户双击,小部件将依次接收鼠标按下事件、鼠标释放事件(即鼠标单击事件)、第二次鼠标按下事件、本事件,最后是第二次鼠标释放事件。 (如果在此操作过程中鼠标未保持静止,还可能会接收到一些鼠标移动事件。)在第二次点击到达之前,无法区分单击和双击。(这也是大多数GUI书籍建议将双击作为单击的延伸,而不是触发不同操作的原因之一。)

支持键盘输入的控件需要重新实现几个额外的事件处理程序:

  • keyPressEvent() 会在按键按下时被调用,并在按键按住时间足够长以触发自动重复时再次被调用。Tab 和Shift+Tab 键仅在未被焦点切换机制使用时才会传递给控件。若要强制由您的控件处理这些键,必须重写QWidget::event()。
  • focusInEvent() 会在小部件获得键盘焦点时被调用(假设您已调用setFocusPolicy())。行为规范的小部件会以清晰但不张扬的方式表明其拥有键盘焦点。
  • focusOutEvent() 会在控件失去键盘焦点时被调用。

您可能还需要重写一些不常用的事件处理程序:

  • mouseMoveEvent() 在按住鼠标按钮的同时鼠标移动时被调用。这在拖放操作中非常有用。如果你调用setMouseTracking() 并传入 true,即使没有按住任何按钮,也会收到鼠标移动事件。(另请参阅《拖放指南》。)
  • keyReleaseEvent() 在按键释放时以及按键按下的过程中(如果该按键具有自动重复功能)都会被调用。在这种情况下,控件将针对每次重复接收到一对按键释放和按键按下事件。Tab 和Shift+Tab 键仅在未被焦点切换机制使用时才会传递给控件。若要强制由您的控件处理这些键,必须重写QWidget::event() 方法。
  • wheelEvent() 会在小部件获得焦点时,用户滚动鼠标滚轮的任何时候被调用。
  • enterEvent() 在鼠标进入控件的屏幕区域时被调用。(这不包括控件任何子控件所占用的屏幕区域。)
  • leaveEvent() 在鼠标离开控件的屏幕区域时被调用。如果鼠标进入某个子控件,则不会触发leaveEvent()。
  • moveEvent() 在小部件相对于其父组件发生位移时被调用。
  • closeEvent() 在用户关闭控件时(或调用close() 时)被调用。

此外,QEvent::Type 的文档中还描述了一些较为冷门的事件。要处理这些事件,您需要直接重写event() 方法。

event() 的默认实现处理Tab 和Shift+Tab (用于移动键盘焦点),并将其他大多数事件转发给上述更专业的处理程序之一。

关于事件及其传递机制的详细说明,请参阅《事件系统》。

函数和属性的分组

上下文函数与属性
窗口函数show()、hide()、raise()、lower()、close()。
顶级窗口windowModified、windowTitle 、windowIcon 、isActiveWindow 、activateWindow()、minimized 、showMinimized()、maximized 、showMaximized()、fullScreen 、showFullScreen()、showNormal()。
窗口内容update(),repaint(),scroll().
几何pos、x()、y()、rect 、size 、width()、height()、move()、resize()、sizePolicy 、sizeHint()、minimumSizeHint()、updateGeometry()、layout()、frameGeometry 、geometry 、childrenRect 、childrenRegion 、adjustSize()、mapFromGlobal()、mapToGlobal()、mapFromParent()、mapToParent()、maximumSize 、minimumSize 、sizeIncrement 、baseSize 、setFixedSize()
模式visible、isVisibleTo()、enabled 、isEnabledTo()、modal 、isWindow()、mouseTracking 、updatesEnabled 、visibleRegion()。
外观与感觉style(),setStyle(),styleSheet,cursor,font,palette,backgroundRole(),setBackgroundRole(),fontInfo(),fontMetrics().
键盘焦点功能focus,focusPolicy,setFocus(),clearFocus(),setTabOrder(),setFocusProxy(),focusNextChild(),focusPreviousChild().
鼠标和键盘捕获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().
上下文菜单contextMenuPolicy、contextMenuEvent()、customContextMenuRequested()、actions()
交互式帮助setToolTip(),setWhatsThis()

控件样式表

除了各平台的标准控件样式外,还可以根据style sheet 中指定的规则对控件进行样式设置。此功能允许您自定义特定控件的外观,以便向用户提供关于其用途的视觉提示。例如,可以通过特定样式设置来表明某个按钮将执行破坏性操作。

关于控件样式表的使用,请参阅《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 Widgets 中。如下图所示,如果父控件以非标准方式进行了装饰,这可能会导致一些意想不到的结果。

一个小部件的背景是透明的,另一个小部件的背景是实色的

在不依赖子类化的情况下,自定义标准 Qt Widgets 绘制行为的灵活性略低于自定义控件。通常,通过设置标准控件的 `autoFillBackground ` 属性,即可实现其期望的外观。

创建半透明窗口

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

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

平台说明:

  • X11:此功能依赖于支持 ARGB 视觉模式的 X 服务器和支持合成技术的窗口管理器。
  • Windows:小部件需设置Qt::FramelessWindowHint 窗口标志,透光效果才能生效。
  • macOS:小部件必须设置Qt::FramelessWindowHint 窗口标志,半透明效果才能生效。

原生小部件与非原生小部件

非原生控件是指窗口系统无法识别的控件。它们没有与之关联的原生窗口句柄。此功能可显著加快控件的绘制和调整大小速度,并消除闪烁现象。

如果您需要原生窗口的旧行为,请选择以下选项之一:

  1. 在您的环境中使用 `QT_USE_NATIVE_WINDOWS=1 `。
  2. 在应用程序中设置Qt::AA_NativeWindows 属性。所有控件都将变为原生控件。
  3. 在小部件上设置Qt::WA_NativeWindow 属性:该小部件本身及其所有父级小部件都将变为原生小部件(除非设置了Qt::WA_DontCreateNativeAncestors )。
  4. 调用 `QWidget::winId ` 强制使用原生窗口(这等同于第 3 点)。
  5. 设置Qt::WA_PaintOnScreen 属性以强制使用原生窗口(这与第 3 点含义相同)。

另请参阅 QEvent 、QPainter 、QGridLayout 和QBoxLayout 。

成员类型文档

enum QWidget::RenderFlag
flags QWidget::RenderFlags

此枚举描述了在调用QWidget::render()时如何渲染该控件。

常量值描述
QWidget::DrawWindowBackground0x1如果启用此选项,即使未设置 `autoFillBackground `,小部件的背景也会渲染到目标中。默认情况下,此选项处于启用状态。
QWidget::DrawChildren0x2如果启用此选项,小部件的子元素将递归地渲染到目标中。默认情况下,此选项处于启用状态。
QWidget::IgnoreMask0x4如果启用此选项,在渲染到目标时将忽略小部件的QWidget::mask()方法。默认情况下,此选项处于禁用状态。

RenderFlags 类型是QFlags<RenderFlag> 的 typedef。它存储 RenderFlag 值的按“或”运算组合。

属性文档

acceptDrops : bool

该属性用于指定是否为该控件启用拖放事件

将此属性设置为 true 会向系统声明,该控件可能能够接受拖放事件。

警告:请 勿在拖放事件处理程序中修改此属性。

默认情况下,该属性值为false 。

访问函数:

bool acceptDrops() const
void setAcceptDrops(bool on)

另请参阅 “拖放”。

accessibleDescription : QString

该属性存储了辅助技术所显示的小部件描述

控件的无障碍描述应说明该控件的功能。虽然“accessibleName ”应为简短精炼的字符串(例如“保存”),但描述应提供更多上下文信息,例如“保存当前文档”。

该属性必须进行本地化处理。

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

访问函数:

QString accessibleDescription() const
void setAccessibleDescription(const QString &description)

另请参阅 QWidget::accessibleName 和QAccessibleInterface::text()。

[since 6.9] accessibleIdentifier : QString

该属性存储辅助技术所识别的小部件标识符

如果设置了此属性,辅助技术即可使用该小部件的可访问标识符来识别特定的小部件,例如在自动化测试中。

该枚举类型在 Qt 6.9 中引入。

访问函数:

QString accessibleIdentifier() const
void setAccessibleIdentifier(const QString &identifier)

accessibleName : QString

该属性存储辅助技术所识别的小部件名称

这是屏幕阅读器等辅助技术用于播报该控件的主要名称。对于大多数控件,无需设置此属性。例如,对于QPushButton ,将直接使用按钮上的文本。

当控件未提供任何文本时,设置此属性非常重要。例如,仅包含图标的按钮需要设置此属性才能与屏幕阅读器配合使用。名称应简短,并能准确反映控件传达的视觉信息。

该属性必须进行本地化处理。

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

访问函数:

QString accessibleName() const
void setAccessibleName(const QString &name)

另请参阅 QWidget::accessibleDescription 和QAccessibleInterface::text()。

autoFillBackground : bool

该属性控制小部件的背景是否自动填充

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

此外,窗口的背景始终采用QPalette::Window 填充,除非设置了 WA_OpaquePaintEvent 或 WA_NoSystemBackground 属性。

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

警告: 在与Qt 样式表结合使用时,请 谨慎使用 此属性。当小部件的样式表中包含有效的背景或边框图像时,此属性会自动禁用。

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

访问函数:

bool autoFillBackground() const
void setAutoFillBackground(bool enabled)

另请参阅 Qt::WA_OpaquePaintEvent 、Qt::WA_NoSystemBackground 和Transparency and Double Buffering 。

baseSize : QSize

该属性存储控件的基底尺寸

如果小部件定义了 `sizeIncrement()`,则会使用基础尺寸来计算合适的小部件尺寸。

默认情况下,对于新创建的小部件,该属性包含一个宽度和高度均为零的尺寸。

访问函数:

QSize baseSize() const
void setBaseSize(const QSize &)
void setBaseSize(int basew, int baseh)

另请参阅 setSizeIncrement()。

[read-only] childrenRect : QRect

该属性保存了控件子元素的边界矩形

隐藏的子控件不包括在内。

默认情况下,对于没有子控件的控件,该属性包含一个宽度和高度均为零、位于原点的矩形。

访问函数:

QRect childrenRect() const

另请参阅 childrenRegion() 和geometry()。

[read-only] childrenRegion : QRegion

该属性存储了控件子元素所占据的合并区域

隐藏的子控件不包括在内。

默认情况下,对于没有子控件的控件,该属性包含一个空区域。

访问函数:

QRegion childrenRegion() const

另请参阅 childrenRect()、geometry() 和mask()。

contextMenuPolicy : Qt::ContextMenuPolicy

小部件如何显示上下文菜单

该属性的默认值为Qt::DefaultContextMenu ,这意味着会调用contextMenuEvent()处理程序。其他取值包括Qt::NoContextMenu 、Qt::PreventContextMenu 、Qt::ActionsContextMenu 以及Qt::CustomContextMenu 。当设置为Qt::CustomContextMenu 时,会发出customContextMenuRequested()信号。

访问函数:

Qt::ContextMenuPolicy contextMenuPolicy() const
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)

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

cursor : QCursor

该属性用于存储此控件的光标形状

当鼠标光标悬停在此控件上方时,将呈现此形状。有关一系列有用的形状,请参阅list of predefined cursor objects 。

编辑器控件可能会使用“I”形光标:

setCursor(Qt::IBeamCursor);

如果未设置光标,或者在调用 unsetCursor() 之后,将使用父控件的光标。

默认情况下,此属性包含一个形状为Qt::ArrowCursor 的鼠标光标。

某些底层窗口实现会在光标离开小部件时重置光标,即使此时鼠标已被捕获。若希望所有小部件(即使位于窗口之外)都保持光标显示,请考虑使用QGuiApplication::setOverrideCursor()。

访问函数:

QCursor cursor() const
void setCursor(const QCursor &)
void unsetCursor()

另请参阅 QGuiApplication::setOverrideCursor()。

enabled : bool

该属性表示小部件是否处于启用状态

通常情况下,启用的控件会处理键盘和鼠标事件;而禁用的控件则不会。QAbstractButton 是一个例外。

某些控件在禁用时会以不同的方式显示。例如,按钮可能会将标签显示为灰色。如果您的控件需要知道何时被启用或禁用,可以使用类型为 `QEvent::EnabledChange` 的 `changeEvent()` 方法。

禁用一个小部件会隐式地禁用其所有子小部件。启用则会相应地启用所有子小部件,除非它们已被显式禁用。当父小部件仍处于禁用状态时,无法显式启用非窗口类型的子小部件。

默认情况下,此属性的值为 `true`。

访问函数:

bool isEnabled() const
void setEnabled(bool)

另请参阅 isEnabledTo()、QKeyEvent 、QMouseEvent 以及changeEvent()。

[read-only] focus : bool

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

默认情况下,该属性的值为false 。

注意:获取 小部件的此属性值,实际上等同于检查QApplication::focusWidget()是否指向该小部件。

访问函数:

bool hasFocus() const

另请参阅 setFocus()、clearFocus()、setFocusPolicy() 和QApplication::focusWidget()。

focusPolicy : Qt::FocusPolicy

该属性用于指定控件接受键盘焦点的模式

如果小部件通过 Tab 键接受键盘焦点,则策略为Qt::TabFocus ;如果通过点击接受焦点,则为Qt::ClickFocus ;如果同时接受这两种方式,则为Qt::StrongFocus ;如果完全不接受焦点,则为Qt::NoFocus (默认值)。

如果小部件处理键盘事件,则必须为其启用键盘焦点。这通常在小部件的构造函数中完成。例如,QLineEdit 的构造函数会调用 setFocusPolicy(Qt::StrongFocus)。

如果控件具有焦点代理,则焦点策略将传播至该代理。

访问函数:

Qt::FocusPolicy focusPolicy() const
void setFocusPolicy(Qt::FocusPolicy policy)

另请参阅 focusInEvent()、focusOutEvent()、keyPressEvent()、keyReleaseEvent() 以及enabled 。

font : QFont

该属性存储当前为控件设置的字体

该属性描述了控件请求的字体。该字体在渲染标准组件时由控件的样式使用,并可作为一种手段,确保自定义控件能与原生平台的外观和感觉保持一致。通常情况下,不同的平台或不同的样式会为应用程序定义不同的字体。

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

默认值取决于系统环境。QApplication 维护着一个系统/主题字体,作为所有小部件的默认字体。某些类型的小部件可能还有特殊的默认字体。您还可以通过向QApplication::setFont() 传递自定义字体和小部件名称,自行定义小部件的默认字体。 最后,系统会将该字体与 Qt 的字体数据库进行比对,以找到最匹配的字体。

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

QWidget的字体传播机制与其调色板传播机制类似。

当前样式(用于渲染所有标准 Qt Widgets 的内容)可以自由选择使用 Widgets 字体,或在某些情况下(部分或完全)忽略该字体。 特别是,某些样式(如 GTK 样式、Mac 样式和 Windows Vista 样式)会对小部件字体进行特殊修改,以匹配平台的原生外观和感觉。因此,无法保证为小部件字体设置属性一定会改变小部件的外观。相反,您可以选择应用一个样式表。

注意:如果 在同一控件上同时使用了Qt 样式表和setFont(),当设置发生冲突时,样式表将具有优先级。

访问函数:

const QFont &font() const
void setFont(const QFont &)

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

[read-only] frameGeometry : QRect

控件相对于其父级(包括任何窗口边框)的几何位置

有关窗口几何相关问题的概述,请参阅“窗口几何”文档。

默认情况下,该属性的值取决于用户的平台和屏幕几何信息。

访问函数:

QRect frameGeometry() const

另请参阅 geometry()、x()、y() 和pos()。

[read-only] frameSize : QSize

该属性存储了小部件的尺寸,其中包括窗口边框

默认情况下,该属性的值取决于用户的平台和屏幕几何信息。

访问函数:

QSize frameSize() const

[read-only] fullScreen : bool

该属性用于指定控件是否以全屏模式显示

处于全屏模式的小部件会占据整个屏幕区域,且不显示窗口装饰(如标题栏)。

默认情况下,该属性的值为false 。

访问函数:

bool isFullScreen() const

另请参阅 windowState()、minimized 以及maximized 。

geometry : QRect

该属性存储了控件相对于其父控件的几何位置,且不包含窗口边框

如果该小部件是顶级小部件(即窗口),则其几何尺寸以全局屏幕坐标表示。

更改几何属性时,如果小部件可见,它会立即收到移动事件(moveEvent())和/或调整大小事件(resizeEvent())。如果小部件当前不可见,则保证在显示之前收到相应的事件。

如果大小参数超出了由minimumSize() 和maximumSize() 定义的范围,则会对其进行调整。

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

有关窗口几何问题的概述,请参阅“窗口几何”文档。

默认情况下,该属性的值取决于用户的平台和屏幕几何属性。

访问函数:

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

另请参阅 frameGeometry()、rect()、move()、resize()、moveEvent()、resizeEvent()、minimumSize() 和maximumSize()。

[read-only] height : int

该属性存储控件的高度,不包括任何窗口边框

有关窗口几何问题的概述,请参阅“窗口几何”文档。

默认情况下,该属性的值取决于用户的平台和screen geometry 。

访问函数:

int height() const

另请参阅 geometry 、width 以及size 。

inputMethodHints : Qt::InputMethodHints

该控件具有哪些输入法相关的提示。

此属性仅适用于输入控件。输入法会利用该属性获取操作提示,以确定应如何运行。例如,如果设置了Qt::ImhFormattedNumbersOnly 标志,输入法可能会调整其视觉组件,以表明当前仅允许输入数字。

警告:某些 控件需要特定标志才能按预期工作。要设置标志,请使用w->setInputMethodHints(w->inputMethodHints()|f) ,而不是w->setInputMethodHints(f) 。

注意:这些 标志仅作为提示,因此具体的输入法实现可以忽略它们。若要确保输入特定类型的字符,还应为控件设置 `QValidator `。

默认值为Qt::ImhNone 。

访问函数:

Qt::InputMethodHints inputMethodHints() const
void setInputMethodHints(Qt::InputMethodHints hints)

另请参阅 inputMethodQuery()。

[read-only] isActiveWindow : bool

该属性表示该控件的窗口是否为活动窗口

活动窗口是指包含当前拥有键盘焦点的控件的窗口(即使该窗口没有控件,或者其所有控件均不接受键盘焦点,该窗口仍可能拥有焦点)。

当弹出窗口可见时,无论对于活动窗口还是弹出窗口,此属性均为true 。

默认情况下,该属性的值为false 。

访问函数:

bool isActiveWindow() const

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

layoutDirection : Qt::LayoutDirection

该属性用于存储此控件的布局方向。

注意: 自 Qt 4.7 起,此方法 不再影响文本的布局方向。

默认情况下,该属性的值为Qt::LeftToRight 。

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

访问函数:

Qt::LayoutDirection layoutDirection() const
void setLayoutDirection(Qt::LayoutDirection direction)
void unsetLayoutDirection()

另请参阅 ` QApplication::layoutDirection`。

locale : QLocale

该属性存储控件的区域设置

只要未设置特殊的区域设置,此处要么是父控件的区域设置,要么(如果该控件是顶级控件)是默认区域设置。

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

访问函数:

QLocale locale() const
void setLocale(const QLocale &locale)
void unsetLocale()

另请参阅 QLocale 和QLocale::setDefault()。

[read-only] maximized : bool

该属性表示此控件是否处于最大化状态

该属性仅适用于窗口。

注意:由于 某些窗口系统的限制,该属性并不总能返回预期的结果(例如,如果用户在 X11 环境下通过窗口管理器将窗口最大化,Qt 无法将其与其他任何调整大小操作区分开来)。随着窗口管理器协议的演进,这一情况预计会得到改善。

默认情况下,该属性的值为false 。

访问函数:

bool isMaximized() const

另请参阅 windowState()、showMaximized()、visible 、show()、hide()、showNormal() 以及minimized 。

maximumHeight : int

该属性存储控件的最大高度(以像素为单位)

该属性对应于maximumSize 属性所存储的高度。

默认情况下,该属性的值为 16777215。

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

访问函数:

int maximumHeight() const
void setMaximumHeight(int maxh)

另请参阅 maximumSize 和maximumWidth 。

maximumSize : QSize

该属性存储了控件的最大尺寸(以像素为单位)

控件的大小不能调整到超过其最大尺寸。

默认情况下,该属性包含一个宽度和高度均为 16777215 的尺寸。

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

访问函数:

QSize maximumSize() const
void setMaximumSize(const QSize &)
void setMaximumSize(int maxw, int maxh)

另请参阅 maximumWidth 、maximumHeight 、minimumSize 和sizeIncrement 。

maximumWidth : int

该属性存储了控件的最大宽度(以像素为单位)

该属性对应于maximumSize 属性所保存的宽度。

默认情况下,该属性的值为 16777215。

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

访问函数:

int maximumWidth() const
void setMaximumWidth(int maxw)

另请参阅 maximumSize 和maximumHeight 。

[read-only] minimized : bool

该属性用于指示该控件是否已被最小化(图标化)

此属性仅适用于窗口。

默认情况下,该属性值为false 。

访问函数:

bool isMinimized() const

另请参阅 showMinimized()、visible 、show()、hide()、showNormal() 以及maximized 。

minimumHeight : int

该属性存储控件的最小高度(以像素为单位)

该属性对应于minimumSize 属性所指定的高度。

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

访问函数:

int minimumHeight() const
void setMinimumHeight(int minh)

另请参阅 minimumSize 和minimumWidth 。

minimumSize : QSize

该属性用于指定控件的最小尺寸

控件的大小不能调整为小于其最小大小。如果当前大小小于最小大小,则控件的大小会被强制调整为最小大小。

通过此函数设置的最小尺寸将覆盖由 `QLayout` 定义的最小尺寸。若要取消设置最小尺寸,请使用 `QSize(0, 0)` 作为值。

默认情况下,该属性包含一个宽度和高度均为零的尺寸。

访问函数:

QSize minimumSize() const
void setMinimumSize(const QSize &)
void setMinimumSize(int minw, int minh)

另请参阅 minimumWidth 、minimumHeight 、maximumSize 和sizeIncrement 。

[read-only] minimumSizeHint : QSize

该属性存储了该控件的建议最小尺寸

如果该属性的值是一个无效的大小,则不推荐任何最小大小。

如果该小部件没有布局,minimumSizeHint() 的默认实现将返回一个无效尺寸;否则,将返回布局的最小尺寸。大多数内置小部件都会重写 minimumSizeHint()。

QLayout 除非设置了minimumSize() 方法,或者将大小策略设置为 QSizePolicy::Ignore,否则绝不会将小部件调整为小于最小尺寸提示的大小。如果设置了minimumSize() 方法,则会忽略最小尺寸提示。

访问函数:

virtual QSize minimumSizeHint() const

另请参阅 QSize::isValid()、resize()、setMinimumSize() 和sizePolicy()。

minimumWidth : int

该属性存储了控件的最小宽度(以像素为单位)

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

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

访问函数:

int minimumWidth() const
void setMinimumWidth(int minw)

另请参阅 minimumSize 和minimumHeight 。

该属性用于标识该控件是否为模态控件

此属性仅对窗口有效。模态控件会阻止其他所有窗口中的控件接收任何输入。

默认情况下,该属性的值为false 。

访问函数:

bool isModal() const

另请参阅 isWindow()、windowModality 和QDialog 。

mouseTracking : bool

该属性表示小部件是否启用了鼠标跟踪功能

如果禁用了鼠标跟踪(默认设置),则只有在移动鼠标时至少按下一个鼠标按钮的情况下,控件才会接收鼠标移动事件。

如果启用了鼠标跟踪,即使未按下任何按钮,控件也会接收鼠标移动事件。

访问函数:

bool hasMouseTracking() const
void setMouseTracking(bool enable)

另请参阅 mouseMoveEvent()。

[read-only] normalGeometry : QRect

该属性保存了控件作为普通(非最大化或全屏)顶级控件显示时的几何信息

如果控件已处于此状态,则“normal”几何属性将反映控件当前的geometry()返回的几何信息。

对于子控件,该属性始终保存一个空矩形。

默认情况下,该属性包含一个空矩形。

访问函数:

QRect normalGeometry() const

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

palette : QPalette

该属性存储控件的配色方案

该属性描述了控件的配色方案。控件在渲染标准组件时,其样式会使用该配色方案;此外,该属性还可确保自定义控件与原生平台的视觉风格保持一致。通常情况下,不同的平台或不同的样式会采用不同的配色方案。

当您为控件分配新的调色板时,该调色板中的颜色角色将与控件的默认调色板结合,形成控件的最终调色板。控件背景角色对应的调色板条目用于填充控件的背景(参见QWidget::autoFillBackground ),而前景角色则用于初始化QPainter 中的画笔。

默认值取决于系统环境。QApplication 维护着一个系统/主题调色板,作为所有控件的默认值。某些类型的控件可能还有特殊的默认调色板(例如,在 Windows Vista 上,所有从QMenuBar 派生的类都有一个特殊的默认调色板)。 您还可以通过向 `QApplication::setPalette()` 传递自定义调色板和小部件名称,自行定义小部件的默认调色板。最后,样式总是在分配调色板时提供调整选项(参见 `QStyle::polish()`)。

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

QWidget的调色板传播机制与其字体传播机制类似。

当前样式(用于渲染所有标准 Qt Widgets 的内容)可以自由地从 Widgets 调色板中选择颜色和画笔,或者在某些情况下(部分或完全)忽略该调色板。 特别是,某些样式(如 GTK 样式、Mac 样式和 Windows Vista 样式)依赖第三方 API 来渲染控件的内容,这些样式通常不遵循调色板。因此,无法保证将角色分配给控件的调色板一定会改变控件的外观。 相反,您可以选择应用样式表。

警告:请 勿将此函数与Qt 样式表结合使用。使用样式表时,可以通过“color”、“background-color”、“selection-color”、“selection-background-color”和“alternate-background-color”来定制小部件的调色板。

访问函数:

const QPalette &palette() const
void setPalette(const QPalette &)

另请参阅 QGuiApplication::palette()、QWidget::font() 以及Qt 样式表。

pos : QPoint

该属性存储了该小部件在其父级小部件中的位置

如果该控件是一个窗口,则其位置指该控件在桌面上的位置,包括其边框。

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

默认情况下,该属性包含一个相对于原点的位置。

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

有关窗口几何问题的概述,请参阅“窗口几何”文档。

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

访问函数:

QPoint pos() const
void move(int x, int y)
void move(const QPoint &)

另请参阅 frameGeometry 、size 、x() 和y()。

[read-only] rect : QRect

该属性存储控件的内部几何形状,不包括任何窗口边框

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

有关窗口几何相关问题的概述,请参阅“窗口几何”文档。

默认情况下,该属性的值取决于用户的平台和屏幕几何结构。

访问函数:

QRect rect() const

另请参阅 size 。

size : QSize

该属性存储控件的大小,不包括任何窗口边框

如果在调整大小时小部件处于可见状态,它会立即收到一个调整大小事件(resizeEvent())。如果小部件当前不可见,则保证在显示之前会收到该事件。

如果大小超出由minimumSize() 和maximumSize() 定义的范围,则会进行调整。

默认情况下,该属性包含的值取决于用户的平台和屏幕几何参数。

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

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

访问函数:

QSize size() const
void resize(int w, int h)
void resize(const QSize &)

另请参阅 pos 、geometry 、minimumSize 、maximumSize 、resizeEvent() 以及adjustSize()。

[read-only] sizeHint : QSize

该属性存储了该小部件的建议尺寸

如果该属性的值是一个无效的尺寸,则不会推荐任何尺寸。

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

访问函数:

virtual QSize sizeHint() const

另请参见 QSize::isValid()、minimumSizeHint()、sizePolicy()、setMinimumSize() 和updateGeometry()。

sizeIncrement : QSize

该属性存储控件的大小增量

当用户调整窗口大小时,窗口尺寸将以 sizeIncrement() 为步长进行调整。水平方向上,调整幅度为 sizeIncrement() 像素(width()),垂直方向上为 sizeIncrement.height() 像素,以baseSize() 为基准。小部件的首选尺寸适用于非负整数i和j:

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

请注意,虽然您可以为所有小部件设置尺寸增量,但该设置仅对窗口生效。

默认情况下,该属性包含一个宽度和高度均为零的尺寸。

警告: 在 Windows 环境下,尺寸增量无效;在 X11 环境下,窗口管理器可能会忽略该设置 。

访问函数:

QSize sizeIncrement() const
void setSizeIncrement(const QSize &)
void setSizeIncrement(int w, int h)

另请参阅 size 、minimumSize 和maximumSize 。

sizePolicy : QSizePolicy

该属性保存了控件的默认布局行为

如果有一个QLayout 负责管理该小部件的子元素,则使用该布局指定的尺寸策略。如果不存在这样的QLayout ,则使用此函数的返回结果。

默认策略为“Preferred/Preferred”,这意味着该控件可以自由调整大小,但更倾向于采用sizeHint()返回的大小。类似按钮的控件会将大小策略设置为允许水平拉伸,但垂直方向固定。 这同样适用于行编辑控件(例如QLineEdit 、QSpinBox 或可编辑的QComboBox )以及其他水平方向的控件(例如QProgressBar )。QToolButton 通常为正方形,因此允许在两个方向上扩展。 支持不同方向的控件(例如QSlider 、QScrollBar 或 QHeader)仅指定在相应方向上的拉伸。能够提供滚动条的控件(通常是QScrollArea 的子类)往往指定它们可以使用额外空间,并且可以适应小于sizeHint() 的空间。

访问函数:

QSizePolicy sizePolicy() const
void setSizePolicy(QSizePolicy)
void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)

另请参阅 sizeHint()、QLayout 、QSizePolicy 以及updateGeometry()。

statusTip : QString

该属性用于存储控件的状态提示

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

访问函数:

QString statusTip() const
void setStatusTip(const QString &)

另请参阅 toolTip 和whatsThis 。

styleSheet : QString

该属性存储了小部件的样式表

该样式表包含对控件样式自定义设置的文本描述,具体说明请参阅《Qt 样式表》文档。

为控件设置样式表后,该控件及其子控件将采用一种样式表样式,该样式会包裹当前的style 。关于何时使用样式表,请参阅《Qt Widgets 的样式设计方法》。

访问函数:

QString styleSheet() const
void setStyleSheet(const QString &styleSheet)

另请参阅 setStyle()、QApplication::styleSheet 、Qt样式表以及 Qt Widgets 的样式设置方法。

tabletTracking : bool

该属性表示小部件是否启用了平板电脑追踪功能

如果禁用了平板追踪(默认设置),则小部件仅在触控笔与平板接触,或者在移动触控笔时至少按下一个触控笔按钮时,才会接收平板移动事件。

如果启用了平板追踪,即使触控笔仅悬停在平板附近,小部件也会接收平板移动事件。这对于监控位置以及旋转和倾斜等辅助属性,并在用户界面中提供反馈非常有用。

访问函数:

bool hasTabletTracking() const
void setTabletTracking(bool enable)

另请参阅 tabletEvent()。

toolTip : QString

该属性存储控件的工具提示

请注意,默认情况下,仅对作为活动窗口子节点的控件显示工具提示。您可以通过在窗口上(而非带有工具提示的控件上)设置Qt::WA_AlwaysShowToolTips 属性来更改此行为。

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

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

访问函数:

QString toolTip() const
void setToolTip(const QString &)

另请参阅 QToolTip 、statusTip 和whatsThis 。

toolTipDuration : int

该属性用于设置控件的工具提示显示时长

指定工具提示的显示时长,单位为毫秒。如果值为 -1(默认),则显示时长将根据工具提示的长度自动计算。

访问函数:

int toolTipDuration() const
void setToolTipDuration(int msec)

另请参阅 toolTip 。

updatesEnabled : bool

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

启用了更新的控件会接收绘制事件并具有系统背景;而禁用了更新的控件则不会。这也意味着,如果更新被禁用,调用 `update()` 和 `repaint()` 将不会产生任何效果。

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

setUpdatesEnabled() 通常用于在短时间内禁用更新,例如为了避免在发生重大变化时出现屏幕闪烁。 在 Qt Widgets 中,小部件通常不会产生屏幕闪烁,但在 X11 上,当小部件被隐藏但尚未被其他小部件替换时,服务器可能会清除屏幕上的区域。禁用更新可解决此问题。

示例:

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

禁用一个控件会隐式禁用其所有子控件。启用一个控件会启用所有子控件,但顶级控件或已被显式禁用的控件除外。重新启用更新会隐式地在该控件上调用update()。

访问函数:

bool updatesEnabled() const
void setUpdatesEnabled(bool enable)

另请参阅 paintEvent()。

visible : bool

该属性用于确定控件是否可见

如果小部件的所有父级小部件(直至窗口)均处于可见状态,则调用 setVisible(true) 或show() 可将该小部件设为可见状态。 如果某个祖先小部件不可见,则该小部件不会显示,直到所有祖先小部件均显示为止。如果其大小或位置发生了变化,Qt 保证在小部件显示之前,会向其发送移动和调整大小的事件。如果小部件尚未调整大小,Qt 将使用 `adjustSize()` 将其大小调整为一个合理的默认值。

调用 setVisible(false) 或hide() 可显式隐藏小部件。显式隐藏的小部件将永远不会显示,即使其所有祖先都已显示,除非您将其显式显示。

当小部件的可见性状态发生变化时,它会收到显示和隐藏事件。在隐藏事件和显示事件之间,无需浪费 CPU 周期来准备或向用户显示信息。例如,视频应用程序可以简单地停止生成新帧。

若小部件恰好被屏幕上的其他窗口遮挡,则仍被视为可见。此规则同样适用于图标化窗口以及位于其他虚拟桌面上的窗口(在支持该概念的平台上)。 当窗口系统更改小部件的映射状态时,该小部件会收到自发显示和隐藏事件,例如:当用户最小化窗口时会触发自发隐藏事件,而当窗口被恢复时会触发自发显示事件。

您很少需要重新实现 setVisible() 函数。如果需要在小部件显示前更改某些设置,请改用showEvent()。如果需要进行延迟初始化,请使用传递给event() 函数的 Polish 事件。

访问函数:

bool isVisible() const
virtual void setVisible(bool visible)

另请参阅 show()、hide()、isHidden()、isVisibleTo()、isMinimized()、showEvent() 以及hideEvent()。

whatsThis : QString

该属性用于存储控件的“这是什么”帮助文本。

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

访问函数:

QString whatsThis() const
void setWhatsThis(const QString &)

另请参阅 QWhatsThis 、QWidget::toolTip 以及QWidget::statusTip 。

[read-only] width : int

该属性存储控件的宽度,不包括任何窗口边框

有关窗口几何相关问题的概述,请参阅“窗口几何”文档。

注意:请 勿在多屏幕桌面上使用此函数来获取屏幕宽度。详情请参阅QScreen 。

默认情况下,该属性的值取决于用户的平台和屏幕几何参数。

访问函数:

int width() const

另请参阅 geometry 、height 和size 。

windowFilePath : QString

该属性存储与小部件关联的文件路径

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

如果窗口标题在任何时候被设置,则窗口标题将具有优先级,并取代文件路径字符串显示。

此外,在 macOS 上,该属性还有一个额外的好处:如果文件路径存在,它会为窗口设置代理图标。

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

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

访问函数:

QString windowFilePath() const
void setWindowFilePath(const QString &filePath)

另请参阅 windowTitle 和windowIcon 。

windowFlags : Qt::WindowFlags

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

如果小部件的类型为Qt::Widget 或Qt::SubWindow ,且变为窗口(如Qt::Window 、Qt::Dialog 等),则将其放置在桌面的 (0, 0) 位置。如果小部件已是窗口,且变为Qt::Widget 或Qt::SubWindow ,则将其放置在其父小部件的 (0, 0) 位置。

注意:此函数 在更改窗口标志时会调用setParent(),导致控件被隐藏。必须调用show()才能使控件再次显示。

访问函数:

Qt::WindowFlags windowFlags() const
void setWindowFlags(Qt::WindowFlags type)

另请参阅 windowType()、setWindowFlag() 以及《窗口标志示例》。

windowIcon : QIcon

该属性存储了控件的图标

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

注意:在 macOS上 ,窗口图标代表活动文档,除非已通过setWindowFilePath 设置了文件路径,否则不会显示。

访问函数:

QIcon windowIcon() const
void setWindowIcon(const QIcon &icon)

通知器信号:

void windowIconChanged(const QIcon &icon)

另请参阅 windowTitle 和setWindowFilePath 。

windowModality : Qt::WindowModality

该属性用于指定哪些窗口会被模态控件阻塞

该属性仅对窗口有效。模态控件会阻止其他窗口中的控件接收输入。该属性的值控制着当该控件可见时,哪些窗口会被阻塞。在窗口可见时修改该属性不会产生效果;您必须先调用hide() 隐藏该控件,然后再次调用show() 使其重新可见。

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

访问函数:

Qt::WindowModality windowModality() const
void setWindowModality(Qt::WindowModality windowModality)

另请参阅 isWindow()、QWidget::modal 以及QDialog 。

windowModified : bool

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

“已修改”窗口是指内容已发生变化但尚未保存到磁盘的窗口。该标志在不同平台上的效果各不相同。在 macOS 上,关闭按钮会显示为已修改样式;在其他平台上,窗口标题中会显示一个“*”(星号)。

窗口标题必须包含一个“[*]”占位符,用于指示“*”应出现的位置。通常,它应紧跟在文件名之后(例如,“document1.txt[*] - 文本编辑器”)。如果窗口未被修改,则该占位符会被直接移除。

请注意,如果将某个控件设置为已修改,其所有父控件也将被设置为已修改。但是,如果对某个控件调用setWindowModified(false) 方法,该操作不会传播到其父控件,因为父控件的其他子控件可能已被修改。

访问函数:

bool isWindowModified() const
void setWindowModified(bool)

另请参阅 windowTitle 。

windowOpacity : double

该属性用于存储窗口的不透明度级别。

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

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

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

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

警告:将 此属性从不透明更改为 透明可能会触发一个绘制事件,必须先处理该事件,窗口才能正确显示。这主要影响QScreen::grabWindow() 的使用。另请注意,半透明窗口的更新和调整大小速度远比不透明窗口慢。

访问函数:

qreal windowOpacity() const
void setWindowOpacity(qreal level)

另请参阅 setMask()。

windowTitle : QString

该属性存储窗口标题(标题栏)

该属性仅对顶级控件(如窗口和对话框)有效。如果未设置标题,则标题基于windowFilePath 。如果这两者均未设置,则标题为空字符串。

若使用windowModified 机制,窗口标题必须包含“[*]”占位符,该占位符用于标记“*”应出现的位置。 通常,它应紧跟在文件名之后(例如,“document1.txt[*] - 文本编辑器”)。如果windowModified 属性设置为false (默认值),则会直接移除该占位符。

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

访问函数:

QString windowTitle() const
void setWindowTitle(const QString &)

Notifier 信号:

void windowTitleChanged(const QString &title)

另请参阅 windowIcon 、windowModified 以及windowFilePath 。

[read-only] x : int

该属性存储了控件相对于其父级(包括任何窗口边框)的 x 坐标

有关窗口几何问题的概述,请参阅“窗口几何”文档。

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

访问函数:

int x() const

另请参阅 frameGeometry 、y 和pos 。

[read-only] y : int

该属性存储了控件相对于其父级(包括窗口边框)的 y 坐标

有关窗口几何问题的概述,请参阅“窗口几何”文档。

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

访问函数:

int y() const

另请参阅 frameGeometry 、x 以及pos 。

成员函数文档

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

创建一个作为parent 子窗口的小部件,其小部件标志设置为f 。

如果parent 是nullptr ,则新小部件将成为一个窗口。如果parent 是另一个小部件,则该小部件将成为parent 内的子窗口。当其parent 被删除时,新小部件也将被删除。

控件标志参数f 通常为 0,但可进行设置以自定义窗口边框(即parent 必须为nullptr )。要自定义边框,请使用由任意window flags 按位或运算组合而成的值。

如果将子控件添加到已显示的控件中,必须显式地显示该子控件才能使其可见。

请注意,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

返回该控件的操作列表(该列表可能为空)。

另请参阅 contextMenuPolicy 、insertAction() 和removeAction()。

void QWidget::activateWindow()

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

活动窗口是指可见且拥有键盘输入焦点的顶级窗口。

此函数的作用等同于在顶级窗口的标题栏上单击鼠标。在 X11 环境中,结果取决于窗口管理器。若要确保该窗口同时位于最前,还应调用raise()。请注意,窗口必须处于可见状态,否则 activateWindow() 不会生效。

在 Windows 系统上,如果当前应用程序并非活动窗口时调用此函数,则不会使其成为活动窗口。该函数会更改任务栏条目的颜色,以指示该窗口已发生某种变化。这是因为微软不允许应用程序中断用户在其他应用程序中的当前操作。

另请参阅 isActiveWindow()、window() 和show()。

void QWidget::addAction(QAction *action)

将操作action 追加到该小部件的操作列表中。

所有 QWidget 都拥有一个QAction列表。不过,这些 可以通过多种不同的方式在图形界面中呈现。QAction 列表(由actions() 返回)的默认用途是创建一个上下文QMenu 。

一个QWidget 应仅包含每种操作的一个实例,若添加其已有的操作,不会导致该操作在小部件中出现两次。

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

另请参阅 removeAction()、insertAction()、actions() 以及QMenu 。

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

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

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

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

这些便捷函数会创建一个新操作,其文本为text ,图标为icon ,如有快捷键则为shortcut 。

这些函数会将新创建的操作添加到小部件的操作列表中,并返回该操作。

QWidget 将获取返回的QAction 的所有权。

这些函数在 Qt 6.3 中引入。

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

[since 6.3] template <typename... Args, typename = QWidget::compatible_action_slot_args<Args...>> QAction *QWidget::addAction(const QIcon &icon, const QString &text, Args &&... args)

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

[since 6.3] template <typename... Args, typename = QWidget::compatible_action_slot_args<Args...>> QAction *QWidget::addAction(const QIcon &icon, 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 中引入。

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

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

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

[since 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)

此便捷函数会创建一个新的操作,其文本为text ,图标为icon ,并带有快捷方式shortcut (如有)。

该动作的 `triggered()` 信号与 `receiver` 的 `member ` 槽相连。该函数将新创建的动作添加到控件的动作列表中,并返回该动作。

QWidget 该函数将接管返回的QAction 的所有权。

这些函数是在 Qt 6.3 中引入的。

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

将操作actions 添加到该控件的操作列表中。

另请参阅 removeAction()、QMenu 以及addAction()。

void QWidget::adjustSize()

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

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

对于窗口,还会考虑屏幕尺寸。如果 `sizeHint()` 小于 (200, 100),且大小策略为 `expanding`,则窗口的最小尺寸将不小于 (200, 100)。窗口的最大尺寸为屏幕宽度和高度的 2/3。

另请参阅 sizeHint() 和childrenRect()。

QPalette::ColorRole QWidget::backgroundRole() const

返回控件的背景角色。

背景角色定义了用于渲染背景的、取自小部件palette 中的画笔。

如果未显式设置背景角色,则控件将继承其父控件的背景角色。

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

QBackingStore *QWidget::backingStore() const

返回该控件将绘制内容的QBackingStore 对象。

[virtual protected] void QWidget::changeEvent(QEvent *event)

可以重新实现此事件处理程序来处理状态变化。

可以通过提供的event 获取该事件中正在变化的状态。

状态变化事件包括:QEvent::ToolBarChange 、QEvent::ActivationChange 、QEvent::EnabledChange 、QEvent::FontChange 、QEvent::StyleChange 、QEvent::PaletteChange 、QEvent::WindowTitleChange 、QEvent::IconTextChange 、QEvent::ModifiedChange 、QEvent::MouseTrackingChange 、QEvent::ParentChange 、QEvent::WindowStateChange 、QEvent::LanguageChange 、QEvent::LocaleChange 、QEvent::LayoutDirectionChange 、QEvent::ReadOnlyChange 。

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

返回位于小部件坐标系中位置 (x,y) 处的可见子小部件。如果指定位置处没有可见的子小部件,则该函数返回nullptr 。

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

返回位于坐标点p 处(在控件自身的坐标系中)的可见子控件。

这是一个重载函数。

[since 6.8] QWidget *QWidget::childAt(const QPointF &p) const

返回在小部件自身坐标系中位于坐标点 (p ) 的可见子小部件。

这是一个重载函数。

该函数于 Qt 6.8 中引入。

void QWidget::clearFocus()

从该控件上移除键盘输入焦点。

如果该小部件当前处于焦点状态,系统会向该小部件发送一个focus out event 事件,告知其已失去焦点。

该控件必须启用焦点设置才能获得键盘输入焦点;也就是说,它必须调用setFocusPolicy() 方法。

另请参阅 hasFocus()、setFocus()、focusInEvent()、focusOutEvent()、setFocusPolicy() 以及QApplication::focusWidget()。

void QWidget::clearMask()

删除由setMask() 设置的任何遮罩。

另请参阅 setMask()。

[slot] bool QWidget::close()

关闭此小部件。如果小部件已被关闭,则返回true ;否则返回false 。

首先,它会向控件发送一个QCloseEvent 。如果控件accepts 了关闭事件,则该控件为hidden 。如果它ignores 了该事件,则不会发生任何变化。QWidget::closeEvent()的默认实现会接受关闭事件。

如果小部件设置了Qt::WA_DeleteOnClose 标志,则该小部件也会被删除。无论小部件是否可见,都会向其发送关闭事件。

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

[virtual protected] void QWidget::closeEvent(QCloseEvent *event)

当 Qt 从窗口系统收到针对顶级小部件的窗口关闭请求时,会使用给定的event 调用此事件处理程序。

默认情况下,该事件会被接受,小部件也会随之关闭。您可以重写此函数,以更改小部件响应窗口关闭请求的方式。例如,您可以在所有事件中调用 `ignore()` 来阻止窗口关闭。

主窗口应用程序通常会重写此函数,以检查用户的工作是否已保存,并在关闭前征得用户许可。

另请参阅 event()、hide()、close() 以及QCloseEvent 。

QMargins QWidget::contentsMargins() const

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

另请参阅 setContentsMargins() 和contentsRect()。

QRect QWidget::contentsRect() const

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

另请参阅 setContentsMargins() 和contentsMargins()。

[virtual protected] void QWidget::contextMenuEvent(QContextMenuEvent *event)

该事件处理程序(针对event 事件)可在子类中重新实现,以接收小部件的上下文菜单事件。

当小部件的contextMenuPolicy 属性设置为Qt::DefaultContextMenu 时,将调用该处理程序。

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

另请参阅 event()、QContextMenuEvent 以及customContextMenuRequested()。

[protected] void QWidget::create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true)

创建一个新的控件窗口。

在 Qt 5 中,参数window 、initializeWindow 和destroyOldWindow 将被忽略。请改用QWindow::fromWinId() 创建一个包裹外部窗口的QWindow ,并将该对象传递给QWidget::createWindowContainer()。

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

[static] 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()将窗口从窗口容器中移除。

窗口容器作为原生子窗口附加到其父窗口(即顶级窗口)上。当窗口容器作为QAbstractScrollArea 或QMdiArea 的子窗口使用时,它会为其父链中的每个小部件创建一个native window ,以便在此用例中实现正确的堆叠和裁剪。 为窗口容器创建原生窗口也能确保正确的堆叠和裁剪。此操作必须在显示窗口容器之前完成。包含大量原生子窗口的应用程序可能会出现性能问题。

窗口容器存在以下已知限制:

  • 堆叠顺序;嵌入的窗口将作为不透明框叠加在控件层次结构之上。多个重叠的窗口容器实例的堆叠顺序未定义。
  • 渲染集成:窗口容器不与 `QGraphicsProxyWidget`、`QWidget::render()` 或类似功能互操作。
  • 焦点处理;窗口容器实例可以采用任何焦点策略,它将通过调用QWindow::requestActivate()将焦点委托给窗口。但是,从QWindow 实例返回至正常焦点链的行为取决于QWindow 实例本身的实现。此外,QWindow::requestActivate()是否实际将焦点赋予窗口,取决于具体平台。

    如果嵌入基于Qt Quick 的窗口,Qt 将自动确保按 Tab 键时焦点会在嵌入的 QML 窗口之间切换,从而允许焦点移至窗口容器链中的下一个或上一个可获得焦点的对象。

  • 在基于QWidget 的应用程序中使用过多的窗口容器实例,会严重影响应用程序的整体性能。

注意:如果 `window ` 属于一个小部件(即通过调用 `windowHandle()` 获得了 `window `),则不会创建任何容器。相反,该函数会将小部件重新归属到 `parent` 之后,返回小部件本身。由于不会创建容器,因此会忽略 `flags `。 换言之,如果window 属于某个小部件,建议直接将该小部件的父容器重新设置为parent ,而非使用此函数。

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

当控件的contextMenuPolicy 为Qt::CustomContextMenu ,且用户请求在该控件上显示上下文菜单时,会发出此信号。位置pos 即为控件接收到的上下文菜单事件的位置。通常该位置采用控件坐标系。此规则的例外是QAbstractScrollArea 及其子类,它们会将上下文菜单事件映射到viewport()的坐标系中。

另请参阅 mapToGlobal()、QMenu 以及contextMenuPolicy 。

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

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

destroy() 会递归调用自身,处理所有子控件,并将destroySubWindows 作为destroyWindow 参数传递。若需更精细地控制子控件的销毁,请先有选择地销毁子控件。

该函数通常由QWidget 的析构函数调用。

[virtual protected] void QWidget::dragEnterEvent(QDragEnterEvent *event)

当拖动操作正在进行且鼠标进入此控件时,会调用此事件处理程序。该事件通过event 参数传递进来。

如果忽略该事件,控件将不会收到任何drag move events 。

请参阅“拖放”文档,了解如何在您的应用程序中实现拖放功能。

另请参阅 QDrag 和QDragEnterEvent 。

[virtual protected] void QWidget::dragLeaveEvent(QDragLeaveEvent *event)

当拖动操作正在进行且鼠标离开此控件时,会调用此事件处理程序。该事件通过event 参数传递进来。

有关如何在应用程序中实现拖放功能的概述,请参阅“拖放”文档。

另请参阅 QDrag 和QDragLeaveEvent 。

[virtual protected] void QWidget::dragMoveEvent(QDragMoveEvent *event)

当拖动操作正在进行时,且出现以下任一情况时,将调用此事件处理程序:光标进入该控件、光标在该控件内移动,或者当该控件获得焦点时按下键盘上的修饰键。该事件通过event 参数传递进来。

有关如何在应用程序中实现拖放功能的概述,请参阅“拖放”文档。

另请参阅 QDrag 和QDragMoveEvent 。

[virtual protected] void QWidget::dropEvent(QDropEvent *event)

当拖动操作在此控件上释放时,会调用此事件处理程序。该事件通过event 参数传递进来。

有关如何在应用程序中实现拖放功能的概述,请参阅“拖放”文档。

另请参阅 QDrag 和QDropEvent 。

WId QWidget::effectiveWinId() const

返回该控件的有效窗口系统标识符,即其本机父控件的窗口系统标识符。

如果该小部件是本机小部件,则此函数返回本机小部件 ID。否则,将返回第一个本机父级小部件(即包含该小部件的顶级小部件)的窗口 ID。

注意:我们 建议您不要存储此值,因为它在运行时可能会发生变化。

另请参阅 nativeParentWidget()。

void QWidget::ensurePolished() const

确保该控件及其子控件已由QStyle 进行美化处理(即拥有正确的字体和配色方案)。

QWidget 在控件完全构建完成之后、首次显示之前调用此函数。 如果您希望在执行某项操作之前确保控件已完成“润色”,可以调用此函数,例如,在控件的sizeHint() 重写实现中可能需要正确的字体大小。请注意,此函数是由sizeHint() 的默认实现调用的。

“完善”操作适用于必须在所有构造函数(包括基类和子类的构造函数)调用完毕后才进行的最终初始化。

若需在小部件进行“polishing”时更改某些设置,请重写event() 并处理QEvent::Polish 事件类型。

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

另请参阅 event()。

[virtual protected] void QWidget::enterEvent(QEnterEvent *event)

可以在子类中重新实现此事件处理程序,以接收通过event 参数传递的控件进入事件。

当鼠标光标进入小部件时,会向该小部件发送一个事件。

另请参阅 leaveEvent()、mouseMoveEvent() 和event()。

[override virtual protected] 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()。

[static] QWidget *QWidget::find(WId id)

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

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

[virtual protected] void QWidget::focusInEvent(QFocusEvent *event)

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

控件通常必须将setFocusPolicy()的返回值设置为Qt::NoFocus 以外的值,才能接收焦点事件。(请注意,应用程序开发人员可以对任何控件调用setFocus(),即使这些控件通常不接受焦点。)

默认实现会更新该控件(未指定focusPolicy() 的窗口除外)。

另请参阅 focusOutEvent()、setFocusPolicy()、keyPressEvent()、keyReleaseEvent()、event() 以及QFocusEvent 。

[protected] bool QWidget::focusNextChild()

查找一个新的控件以将键盘焦点赋予其,以符合Tab 的要求,并在找到新控件时返回true ,否则返回false。

另请参阅 focusPreviousChild()。

[virtual protected] bool QWidget::focusNextPrevChild(bool next)

根据情况为“Tab”和“Shift+Tab”键操作查找一个新的控件来获取键盘焦点,如果能找到新的控件,则返回true ;否则返回false。

如果next 为true,则该函数向前搜索;如果next 为false,则向后搜索。

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

子控件会调用其父控件上的 focusNextPrevChild(),但只有包含这些子控件的窗口才能决定将焦点重定向到何处。因此,通过为某个对象重写此函数,您便可以控制所有子控件的焦点遍历。

另请参阅 focusNextChild() 和focusPreviousChild()。

[virtual protected] void QWidget::focusOutEvent(QFocusEvent *event)

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

小部件通常必须将setFocusPolicy()的返回值设置为Qt::NoFocus 以外的值,才能接收焦点事件。(请注意,应用程序开发人员可以对任何小部件调用setFocus(),即使这些小部件通常不接受焦点。)

默认实现会更新该控件(未指定focusPolicy() 的窗口除外)。

另请参阅 focusInEvent()、setFocusPolicy()、keyPressEvent()、keyReleaseEvent()、event() 以及QFocusEvent 。

[protected] 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

返回前景色。

前景角色定义了控件的palette 中用于绘制前景的颜色。

如果未显式设置前景角色,该函数将返回一个与背景角色形成对比的角色。

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

[invokable] 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() 之后才会接收键盘事件。

如果当前有其他小部件正在捕获键盘输入,则会先释放该小部件的捕获状态。

另请参阅 releaseKeyboard()、grabMouse()、releaseMouse() 和focusWidget()。

void QWidget::grabMouse()

捕获鼠标输入。

该控件将接收所有鼠标事件,直到调用releaseMouse()为止;其他控件将完全无法接收到鼠标事件。键盘事件不受影响。若需捕获键盘事件,请使用grabKeyboard()。

警告: 捕获鼠标操作的应用程序中存在的错误 往往会导致终端锁死。使用此函数时请格外谨慎,并在调试时考虑使用-nograb 命令行选项。

在使用 Qt 时,通常无需手动捕获鼠标,因为 Qt 会合理地自动捕获和释放鼠标。特别是,当鼠标按钮被按下时,Qt 会捕获鼠标,并一直保持捕获状态直到最后一个按钮被释放。

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

注意:在 Windows系统上 ,只有当鼠标位于该进程拥有的窗口内时,`grabMouse()` 才有效。在 macOS 系统上,只有当鼠标位于该小部件的边框内时,`grabMouse()` 才有效。

另请参阅 releaseMouse()、grabKeyboard() 和releaseKeyboard()。

void QWidget::grabMouse(const QCursor &cursor)

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

光标将变为cursor 形状(只要鼠标焦点被捕获),并且在调用releaseMouse()之前,该控件将是唯一接收鼠标事件的控件。

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

注意:请参阅 QWidget::grabMouse() 中的注释。

此函数重载了QWidget::grabMouse()。

另请参阅 releaseMouse()、grabKeyboard()、releaseKeyboard() 和setCursor()。

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

向 Qt 的快捷键系统添加一个快捷键,该快捷键会在指定的context 中监听给定的key 序列。如果context 为Qt::ApplicationShortcut ,则该快捷键适用于整个应用程序。否则,它要么仅限于此控件(Qt::WidgetShortcut ),要么仅限于窗口本身(Qt::WindowShortcut )。

如果同一组key 序列已被多个控件捕获,当key 序列发生时,系统会向所有适用的控件发送QEvent::Shortcut 事件,发送顺序是非确定性的,但会将``ambiguous''标志设置为true。

警告: 通常情况下,您 无需使用此函数;相反,应创建包含所需快捷键序列的QAction(如果您还希望有相应的菜单选项和工具栏按钮),或者仅在需要键序列时创建QShortcut。QAction 和QShortcut 都会为您处理所有的事件过滤,并提供在用户触发键序列时触发的信号,因此比这个低级函数要容易使用得多。

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

QGraphicsEffect *QWidget::graphicsEffect() const

graphicsEffect 函数返回指向该控件图形效果的指针。

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

另请参阅 setGraphicsEffect()。

QGraphicsProxyWidget *QWidget::graphicsProxyWidget() const

返回图形视图中相应嵌入式控件的代理控件;否则返回nullptr 。

另请参阅 QGraphicsProxyWidget::createProxyForChildWidget() 和QGraphicsScene::addWidget()。

[virtual] bool QWidget::hasHeightForWidth() const

如果控件的首选高度取决于其宽度,则返回true ;否则返回false 。

[virtual] 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()的角度来看,该小部件仍被视为可见。

另请参阅 visible 、event() 以及QHideEvent 。

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

将painter 的画笔、背景和字体初始化为与给定控件相同的设置。当在QWidget 上打开绘图器时,该函数会自动调用。

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

该事件处理程序(针对event 事件)可在子类中重新实现,以接收输入法组合事件。当输入法状态发生变化时,会调用此处理程序。

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

默认实现会调用 event->ignore(),从而拒绝该输入法事件。更多详情请参阅QInputMethodEvent 的文档。

另请参阅 event() 和QInputMethodEvent 。

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

该方法仅适用于输入控件。输入法通过该方法查询控件的一组属性,以便支持复杂的输入法操作,例如对周边文本的支持和重新转换。

query 指定要查询的属性。

另请参阅 inputMethodEvent(),QInputMethodEvent,QInputMethodQueryEvent 以及inputMethodHints 。

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

将操作action 插入到该小部件的操作列表中,位于操作before 之前。如果before 为nullptr ,或者before 不是该小部件的有效操作,则会将该操作追加到列表末尾。

一个QWidget 应仅包含每种操作的一个实例。

另请参阅 removeAction()、addAction()、QMenu 、contextMenuPolicy 以及actions()。

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

将操作actions 插入到该控件的操作列表中,位置在操作before 之前。如果before 的值为nullptr ,或者before 不是该控件的有效操作,则将该操作追加到列表末尾。

一个QWidget 中,每种操作最多只能出现一次。

另请参阅 removeAction()、QMenu 、insertAction() 和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 。

窗口是一种在视觉上不作为任何其他小部件子元素的小部件,通常具有边框和window title 。

窗口可以拥有一个parent widget 。此时,它将与其父窗口分组,并在父窗口被删除时被删除,在父窗口被最小化时被最小化等。如果窗口管理器支持,它还将与其父窗口共享一个任务栏条目。

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

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

[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event)

该事件处理程序(针对event 事件)可在子类中重新实现,以便接收该控件的按键事件。

小部件必须调用setFocusPolicy() 来初始化焦点,并且必须处于焦点状态,才能接收按键事件。

如果您重写了此处理程序,那么如果您不处理该键,调用基类的实现就非常重要。

默认实现会在用户按下QKeySequence::Cancel 的键序列(通常是 Escape 键)时关闭弹出控件。否则,该事件将被忽略,以便控件的父控件能够对其进行解释。

请注意,QKeyEvent 开始时 isAccepted() == true,因此您无需调用QKeyEvent::accept() —— 只要您对该键采取了处理措施,就不要调用基类的实现。

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

[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event)

该事件处理程序(针对事件event )可在子类中重新实现,以接收该小部件的键释放事件。

小部件必须先调用accept focus ,然后调用have focus ,才能接收键释放事件。

如果您重写了此处理程序,那么如果不对该键采取任何操作,务必调用基类的实现,这一点非常重要。

默认实现会忽略该事件,以便小部件的父级对其进行解释。

请注意,QKeyEvent 开始时 isAccepted() == true,因此您无需调用QKeyEvent::accept()——只要您对该键采取了操作,就不要调用基类的实现即可。

另请参阅 keyPressEvent()、QEvent::ignore()、setFocusPolicy()、focusInEvent()、focusOutEvent()、event() 以及QKeyEvent 。

[static] QWidget *QWidget::keyboardGrabber()

返回当前占用键盘输入的控件。

如果该应用程序中当前没有小部件占用键盘,则返回nullptr 。

另请参阅 grabMouse() 和mouseGrabber()。

QLayout *QWidget::layout() const

返回安装在此控件上的布局管理器;如果未安装任何布局管理器,则返回nullptr 。

布局管理器用于设置已添加到布局中的小部件子元素的几何属性。

另请参阅 setLayout()、sizePolicy()以及“布局管理”。

[virtual protected] void QWidget::leaveEvent(QEvent *event)

可以在子类中重新实现此事件处理程序,以接收通过event 参数传递的控件离开事件。

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

另请参阅 enterEvent()、mouseMoveEvent() 和event()。

[slot] void QWidget::lower()

将该控件移至父控件堆栈的底部。

调用此方法后,该小部件在视觉上将位于任何重叠的同级小部件之后(因此会被这些小部件遮挡)。

另请参阅 raise() 和stackUnder()。

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

将控件坐标pos 从坐标系parent 转换为该控件的坐标系。parent 不能为nullptr ,且必须是调用该控件的父控件。

该函数在 Qt 6.0 中引入。

另请参阅 mapTo()、mapFromParent()、mapFromGlobal() 以及underMouse()。

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()。

[override virtual protected] int QWidget::metric(QPaintDevice::PaintDeviceMetric m) const

重写了:QPaintDevice::metric(QPaintDevice::PaintDeviceMetric metric) const。

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

m 是要获取的度量。

[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event)

该事件处理程序(针对event 事件)可在子类中重新实现,以接收该控件的鼠标双击事件。

默认实现会调用mousePressEvent()。

注意: 除了双击事件外,该控件 还会接收鼠标按下和鼠标释放事件。如果另一个与该控件重叠的控件因按下或释放事件而消失,则该控件将仅接收双击事件。开发者需确保应用程序能正确解释这些事件。

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

[static] QWidget *QWidget::mouseGrabber()

返回当前捕获鼠标输入的控件。

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

另请参阅 grabMouse() 和keyboardGrabber()。

[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event)

该事件处理程序(针对event 事件)可在子类中重新实现,以接收该控件的鼠标移动事件。

如果关闭了鼠标跟踪功能,则只有在移动鼠标的同时按下鼠标按钮时,才会触发鼠标移动事件。如果启用了鼠标跟踪功能,即使未按下任何鼠标按钮,也会触发鼠标移动事件。

QMouseEvent::position() 报告相对于该小部件的鼠标光标位置。对于按下和释放事件,该位置通常与上一次鼠标移动事件的位置相同,但如果用户的手在抖动,位置可能会有所不同。这是底层窗口系统的特性,而非 Qt Widgets 的特性。

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

另请参阅 setMouseTracking()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、event()、QMouseEvent 以及Scribble 示例。

[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event)

该事件处理程序(针对event 事件)可在子类中重新实现,以接收该小部件的鼠标按下事件。

如果你在 `mousePressEvent()` 中创建了新的控件,那么 `mouseReleaseEvent()` 可能不会如你所愿地结束执行,这取决于底层窗口系统(或 X11 窗口管理器)、控件的位置以及其他因素。

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

另请参阅 mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、event()、QMouseEvent 以及Scribble 示例。

[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event)

该事件处理程序(针对event 事件)可在子类中重新实现,以接收该控件的鼠标释放事件。

另请参阅 mousePressEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、event()、QMouseEvent 以及“涂鸦示例”。

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

这对应于 move(QPoint(x,y))。

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

这是一个重载函数。

[virtual protected] void QWidget::moveEvent(QMoveEvent *event)

可以在子类中重新实现此事件处理程序,以接收通过event 参数传递的控件移动事件。当控件接收到此事件时,它已位于新位置。

可通过QMoveEvent::oldPos() 获取旧位置。

另请参阅 resizeEvent()、event()、move() 以及QMoveEvent 。

[virtual protected] bool QWidget::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)

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

在重写此函数时,若要阻止 Qt 处理该事件,请返回 true 并设置result 。result 参数仅在 Windows 系统上有效。若返回 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()。

[override virtual] QPaintEngine *QWidget::paintEngine() const

重写:QPaintDevice::paintEngine() const。

返回小部件的绘制引擎。

请注意,用户不应显式调用此函数,因为它仅用于重写目的。该函数由 Qt 在内部调用,且默认实现并不总是返回有效的指针。

[virtual protected] void QWidget::paintEvent(QPaintEvent *event)

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

绘制事件是要求重新绘制小部件全部或部分内容的请求。它可能因以下任一原因而触发:

  • repaint() 或update() 被调用,
  • 控件曾被遮挡,现已恢复可见,或
  • 以及其他多种原因。

许多控件在收到请求时可以直接重绘其整个表面,但某些运行较慢的控件需要通过仅重绘请求区域来优化性能:QPaintEvent::region()。这种速度优化不会改变结果,因为在事件处理过程中,重绘操作会被裁剪到该区域内。例如,QListView 和QTableView 就采用了这种做法。

Qt 还会通过将多个绘制事件合并为一个来尝试加快绘制速度。当update() 被多次调用,或者窗口系统发送了多个绘制事件时,Qt 会将这些事件合并为一个绘制区域更大的事件(参见QRegion::united())。repaint() 函数不支持此优化,因此我们建议尽可能使用update()。

当绘制事件发生时,更新区域通常已被清空,因此您是在小部件的背景上进行绘制。

背景可通过setBackgroundRole() 和setPalette() 进行设置。

自 Qt 4.0 以来,QWidget 会自动对绘制操作进行双缓冲,因此无需在 paintEvent() 中编写双缓冲代码来避免闪烁。

注意:通常, 应避免在 paintEvent()内部调用update() 或repaint()。例如,在 paintEvent() 内部对子控件调用update() 或repaint() 会导致未定义的行为;子控件可能收到也可能不收到绘制事件。

警告:如果您使用的是 不依赖 Qt 背板(backingstore)的自定义绘制引擎,则 必须设置 `Qt::WA_PaintOnScreen `。否则,`QWidget::paintEngine()` 将永远不会被调用;系统将转而使用背板。

另请参阅 event()、repaint()、update()、QPainter 、QPixmap 、QPaintEvent 以及Analog Clock。

QWidget *QWidget::parentWidget() const

返回该控件的父控件;如果该控件没有父控件,则返回nullptr 。

QWidget *QWidget::previousInFocusChain() const

InFocusChain 函数返回该小部件焦点链中的上一个小部件。

另请参阅 ` nextInFocusChain()`。

[slot] void QWidget::raise()

将此控件提升至父控件堆栈的最顶层。

调用此函数后,该控件在视觉上将位于任何重叠的同级控件之前。

注意: 使用 `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 的快捷键系统会自动移除快捷键。建议使用QAction 或QShortcut 来处理快捷键,因为它们比此低级函数更易于使用。另请注意,这是一项资源消耗较大的操作。

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

void QWidget::removeAction(QAction *action)

从该控件的操作列表中移除操作action 。

另请参阅 insertAction() 和actions()。

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

将此控件的sourceRegion 渲染到target 中,并使用renderFlags 来确定渲染方式。渲染从target 中的targetOffset 开始。例如:

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 的QPainter::device()中。

渲染时将应用painter 上已设置的变换和配置。

注意: painter 必须处于活动状态 。在 macOS 上,控件将渲染到QPixmap 中,然后由painter 进行绘制。

这是一个重载函数。

另请参阅 QPainter::device()。

[slot] void QWidget::repaint()

通过立即调用 `paintEvent()` 直接重绘控件,除非更新已被禁用或控件处于隐藏状态。

我们建议仅在需要立即重绘时(例如在动画过程中)才使用 repaint()。在大多数情况下,update() 是更好的选择,因为它允许 Qt 进行速度优化并最大限度地减少闪烁。

警告:若在 可能被paintEvent()调用的函数中调用repaint(),可能会导致无限递归。而update()函数绝不会引发递归。

注意:此 槽已被重载。要连接到此槽:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        widget, qOverload<>(&QWidget::repaint));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        widget, [receiver = widget]() { receiver->repaint(); });
有关更多示例和方法,请参阅“连接到重载的槽”。

另请参阅 update()、paintEvent() 和setUpdatesEnabled()。

void QWidget::repaint(const QRect &rect)

此版本会重新绘制控件内部的一个矩形rect 。

这是一个重载函数。

void QWidget::repaint(const QRegion &rgn)

此版本会重新绘制控件内的区域rgn 。

这是一个重载函数。

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

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

如果w 为负数,则将其替换为width() - x ;如果h 为负数,则将其替换为height() - y 。

这是一个重载函数。

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()、QResizeEvent 、paintEvent() 以及Scribble 示例。

bool QWidget::restoreGeometry(const QByteArray &geometry)

恢复存储在字节数组geometry 中的顶级控件的几何形状和状态。成功时返回true ;否则返回false 。

如果恢复后的几何位置超出屏幕范围,系统会将其调整为位于可用屏幕几何范围之内。

要恢复使用QSettings 保存的几何信息,可以使用如下代码:

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

有关窗口几何相关问题的概述,请参阅“窗口几何”文档。

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

另请参阅 saveGeometry()、QSettings 、QMainWindow::saveState() 和QMainWindow::restoreState()。

QByteArray QWidget::saveGeometry() const

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

若要在窗口关闭时保存几何尺寸,可以像这样实现一个关闭事件:

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

有关窗口几何形状问题的概述,请参阅“窗口几何形状”文档。

使用 `QMainWindow::saveState()` 来保存工具栏和停靠控件的几何尺寸及状态。

另请参阅 restoreGeometry()、QMainWindow::saveState() 和QMainWindow::restoreState()。

QScreen *QWidget::screen() const

返回该控件所在的屏幕。

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

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

将小部件及其子项向右滚动dx 像素,向下滚动dy 像素。dx 和dy 均可为负值。

滚动完成后,小部件将收到需要重绘区域的绘制事件。对于 Qt 识别为不透明的小部件,仅需更新新暴露的部分。例如,如果将一个不透明的小部件向左滚动 8 像素,则只需更新右边缘处一条 8 像素宽的条带。

由于小部件默认会传播其父项的内容,您需要设置autoFillBackground 属性,或使用setAttribute()来设置Qt::WA_OpaquePaintEvent 属性,才能使小部件变为不透明。

对于使用内容传播的小部件,滚动操作将导致整个滚动区域更新。

另请参阅 Transparency and Double Buffering 。

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 的画笔。

如果 `role ` 为 `QPalette::NoRole`,则小部件将继承其父级小部件的背景角色。

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

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

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

这相当于 setBaseSize(QSize(basew,baseh))。将小部件的基础尺寸设置为宽度basew 和高度baseh 。

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

这是一个重载函数。

另请参阅 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()。

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

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

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

另请参阅 isEnabledTo()、QKeyEvent 、QMouseEvent 以及changeEvent()。

void QWidget::setFixedHeight(int h)

将控件的最小高度和最大高度均设置为h ,同时保持宽度不变。此功能仅为方便起见而提供。

另请参见 sizeHint()、minimumSize()、maximumSize() 以及setFixedSize()。

void QWidget::setFixedSize(const QSize &s)

将控件的最小和最大尺寸均设置为s ,从而防止其扩大或缩小。

这将覆盖由QLayout 设定的默认尺寸约束。

要取消约束,请将大小设置为 `QWIDGETSIZE_MAX`。

或者,如果您希望小部件根据其内容具有固定大小,可以调用QLayout::setSizeConstraint (QLayout::SetFixedSize );

另请参阅 maximumSize 和minimumSize 。

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)

如果该控件或其父控件之一是active window ,则将键盘输入焦点赋予该控件(或其焦点代理)。reason 参数将被传递给该函数发出的任何焦点事件,用于说明导致该控件获得焦点的原因为何。 如果窗口当前非活动状态,则当窗口变为活动状态时,该小部件将获得焦点。

首先,会向焦点控件(如有)发送一个“焦点即将改变”事件,以告知其即将失去焦点。 随后焦点发生切换:系统会向先前拥有焦点的控件发送“焦点移出”事件,并向新获得焦点的控件发送“焦点进入”事件,以告知其刚刚获得了焦点。(如果“焦点进入”和“焦点移出”的控件是同一个,则不会发生任何操作。)

注意:在 嵌入式平台上 ,setFocus() 不会导致输入法打开输入面板。若要触发此操作,您必须自行向控件发送QEvent::RequestSoftwareInputPanel 事件。

setFocus() 会将焦点赋予小部件,无论其焦点策略如何,但不会清除任何键盘锁定(参见grabKeyboard())。

请注意,如果小部件处于隐藏状态,则在显示之前不会接受焦点。

警告:若在 可能被 `focusOutEvent()` 或 `focusInEvent()` 调用的函数中调用 `setFocus()`,可能会导致无限递归。

另请参阅 hasFocus()、clearFocus()、focusInEvent()、focusOutEvent()、setFocusPolicy()、focusWidget()、QApplication::focusWidget()、grabKeyboard()、grabMouse()、小部件中的键盘焦点以及QEvent::RequestSoftwareInputPanel 。

[slot] void QWidget::setFocus()

如果该控件或其父控件之一是active window ,则将键盘输入焦点赋予该控件(或其焦点代理)。

注意:此 插槽已被重载。要连接到此插槽:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        widget, qOverload<>(&QWidget::setFocus));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        widget, [receiver = widget]() { receiver->setFocus(); });
有关更多示例和方法,请参阅“连接到重载的槽”。

void QWidget::setFocusProxy(QWidget *w)

将控件的焦点代理设置为控件w 。如果w 的值为nullptr ,则该函数会将此控件重置为不设置焦点代理。

某些控件可以“获得焦点”,但会创建一个子控件(例如QLineEdit )来实际处理焦点。在这种情况下,该控件可以将行编辑框设置为其焦点代理。

setFocusProxy() 用于设置当“此控件”获得焦点时,实际接收焦点的控件。如果存在焦点代理,则setFocus() 和hasFocus() 将对该焦点代理进行操作。如果“此控件”本身即是焦点控件,则 setFocusProxy() 会将焦点转移到新的焦点代理上。

另请参阅 focusProxy()。

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

将控件的前景色设置为role 。

前景角色定义了从控件的palette 中提取的、用于绘制前景的颜色。

如果role 为QPalette::NoRole ,则小部件将使用与背景角色形成对比的前景角色。

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

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

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

这对应于 setGeometry(QRect(x,y,w,h))。

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

这是一个重载函数。

另请参阅 geometry()。

void QWidget::setGraphicsEffect(QGraphicsEffect *effect)

setGraphicsEffect 函数用于设置控件的图形效果。

将effect 设置为控件的效果。如果该控件上已经安装了效果,QWidget 会在安装新的effect 之前删除现有效果。

如果effect 是安装在另一个小部件上的效果,setGraphicsEffect() 将从该小部件上移除该效果,并将其安装到此小部件上。

QWidget 将effect 的所有权移交。

注意:此 函数将把该效果应用到自身及其所有子控件上。

注意: 基于 OpenGL 的控件(如 QGLWidget、QOpenGLWidget 和QQuickWidget )不支持图形 效果。

另请参阅 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);
formWidget->setLayout(layout);

除了调用此函数外,另一种方法是将该小部件传递给布局的构造函数。

QWidget 将接管layout 的所有权。

另请参阅 ` layout()`和“布局管理”。

void QWidget::setMask(const QBitmap &bitmap)

仅使那些在bitmap 中对应的1位所对应的控件像素可见。如果该区域包含控件rect()范围之外的像素,则该区域内的窗口系统控件是否可见,取决于具体平台。

请注意,如果该区域特别复杂,此操作可能会比较慢。

以下代码演示了如何使用带 alpha 通道的图像为小部件生成蒙版:

QLabel topLevelLabel;
QPixmap pixmap(":/images/tux.png");
topLevelLabel.setPixmap(pixmap);
topLevelLabel.setMask(pixmap.mask());

该代码中显示的标签使用其包含的图像进行遮罩处理,从而呈现出仿佛将不规则形状的图像直接绘制在屏幕上的视觉效果。

经过蒙版处理的小部件仅在其可见部分接收鼠标事件。

另请参阅 mask()、clearMask() 和windowOpacity()。

void QWidget::setMask(const QRegion &region)

仅使小部件中与region 重叠的部分可见。如果该区域包含小部件rect()范围外的像素,则该区域内的窗口系统控件是否可见将取决于平台。

由于QRegion 允许创建任意复杂的区域,因此可以制作适合形状最不规则的窗口的控件遮罩,甚至允许显示带有孔洞的控件。请注意,如果区域特别复杂,此效果可能会导致性能下降。

控件遮罩用于向窗口系统提示:应用程序不希望处理遮罩区域外的鼠标事件。在大多数系统中,它们还会导致粗糙的视觉裁剪。若要获得平滑的窗口边缘,请改用半透明背景和抗锯齿绘制,如“半透明背景”示例中所示。

这是一个重载函数。

另请参阅 windowOpacity 。

void QWidget::setMaximumSize(int maxw, int maxh)

该函数对应于 setMaximumSize(QSize(maxw,maxh))。将最大宽度设置为maxw ,最大高度设置为maxh 。

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

这是一个重载函数。

另请参阅 maximumSize()。

void QWidget::setMinimumSize(int minw, int minh)

该函数对应于 setMinimumSize(QSize(minw, minh))。将最小宽度设置为minw ,将最小高度设置为minh 。

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

这是一个重载函数。

另请参阅 minimumSize()。

void QWidget::setParent(QWidget *parent)

将控件的父控件设置为parent ,并重置窗口标志。该控件将被移动到其新父控件中的位置 (0, 0)。

如果新的父控件位于另一个窗口中,则被重新设置父控件的控件及其子控件将按与之前相同的内部顺序,追加到新父控件的tab chain 的末尾。如果被移动的控件中有某个控件拥有键盘焦点,setParent()会为该控件调用clearFocus()。

如果新父控件与旧父控件位于同一窗口中,则设置父控件不会改变标签顺序或键盘焦点。

如果“新”父控件即为旧父控件,则此函数不执行任何操作。

注意: 作为更改父控件的一部分,该 控件会变得不可见,即使它之前是可见的。你必须调用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 为真,则启用具有给定id 的快捷键自动重复功能;否则,该功能被禁用。

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

void QWidget::setShortcutEnabled(int id, bool enable = true)

如果 `enable ` 为真,则启用具有给定 `id ` 的快捷键;否则,该快捷键将被禁用。

警告: 通常您 无需使用此函数,因为 Qt 的快捷键系统会随着小部件的隐藏/显示以及获得或失去焦点而自动启用或禁用快捷键。建议使用QAction 或QShortcut 来处理快捷键,因为它们比此低级函数更易于使用。

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

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

将 x 轴(宽度)的增量设置为w ,将 y 轴(高度)的增量设置为h 。

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

这是一个重载函数。

另请参阅 sizeIncrement()。

void QWidget::setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)

将控件的大小策略设置为horizontal 和vertical ,采用标准拉伸模式,且不使用“按宽度设定高度”功能。

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

这是一个重载函数。

另请参阅 sizePolicy() 和QSizePolicy::QSizePolicy()。

void QWidget::setStyle(QStyle *style)

将控件的 GUI 样式设置为style 。样式对象的所有权不会被转移。

如果未设置样式,小部件将改用应用程序的默认样式QApplication::style()。

设置控件的样式对现有或未来的子控件没有任何影响。

警告:此 函数特别适用于演示目的,即您希望展示 Qt 的样式设置功能时。实际应用程序应避免使用它,而应使用一种一致的 GUI 样式。

另请参阅 style()、QStyle 、QApplication::style() 和QApplication::setStyle()。

[static] void QWidget::setTabOrder(QWidget *first, QWidget *second)

将second 控件在焦点顺序中置于first 控件之后。

这实际上将second 控件从其焦点链中移除,并将其插入到first 控件之后。

请注意,由于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

如果first 或second 具有焦点代理,setTabOrder() 会正确地替换该代理。

注意:自 Qt 5.10起 :具有焦点代理子控件的控件将被视为复合控件。在设置一个或两个复合控件之间的标签顺序时,每个控件内部的本地标签顺序将得以保留。 这意味着,如果两个小部件都是复合小部件,则最终的 Tab 顺序将从 `first` 内的最后一个子项开始,到 `second` 内的第一个子项结束。

另请参阅 setFocusPolicy()、setFocusProxy() 以及“控件中的键盘焦点”。

[static, since 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

该调用不会形成封闭的Tab焦点循环。如果还有其他采用Qt::TabFocus 焦点策略的小部件,在d 上按Tab键将把焦点移至其中一个小部件,而不会返回a 。

这是一个重载函数。

该函数在 Qt 6.6 中引入。

另请参阅 setFocusPolicy()、setFocusProxy(),以及“控件中的键盘焦点”。

void QWidget::setWindowFlag(Qt::WindowType flag, bool on = true)

如果on 为真,则在此控件上设置窗口标志flag ;否则清除该标志。

注意:此 函数在更改窗口标志时会调用setParent(),这会导致该控件被隐藏。您必须调用show() 才能使该控件再次显示。

另请参阅 setWindowFlags()、windowFlags() 和windowType()。

void QWidget::setWindowRole(const QString &role)

将窗口的角色设置为role 。此设置仅对X11上的窗口有效。

另请参阅 windowRole()。

void QWidget::setWindowState(Qt::WindowStates windowState)

将窗口状态设置为windowState 。窗口状态是Qt::WindowState 、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 创建的用户界面描述派生的控件。

另请参阅 《在应用程序中使用Qt Widgets 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 参数传递的控件显示事件。

非自发显示事件会在控件显示之前立即发送给控件。窗口的自发显示事件则在显示之后才被传递。

注意:当小部件的映射状态被窗口系统更改时,它会接收自发显示和隐藏事件,例如,当用户将窗口最小化时会收到自发隐藏事件,当窗口被恢复时会收到自发显示事件。在收到自发隐藏事件后,从isVisible() 的角度来看,该小部件仍被视为可见。

另请参阅 visible 、event() 以及QShowEvent 。

[slot] void QWidget::showFullScreen()

以全屏模式显示该控件。

调用此函数仅影响windows 。

要退出全屏模式,请调用showNormal()或close()。

注意:全屏 模式在 Windows 下运行正常,但在 X 环境下存在某些问题。这些问题源于 ICCCM 协议的局限性,该协议规定了 X11 客户端与窗口管理器之间的通信。ICCCM 根本无法理解无边框全屏窗口的概念。 因此,您能采取的最佳方案是请求一个无边框窗口,并将其放置和调整大小以填满整个屏幕。根据窗口管理器的不同,此方法可能有效,也可能无效。无边框窗口是通过 MOTIF 提示请求的,几乎所有现代窗口管理器都至少部分支持这些提示。

另一种方法是完全绕过窗口管理器,使用Qt::X11BypassWindowManagerHint 标志创建窗口。但这种方法存在其他严重问题,例如键盘焦点失效,以及在桌面切换或用户调出其他窗口时会出现非常奇怪的效果。

遵循现代 ICCCM 规范之后的 X11 窗口管理器能够正确支持全屏模式。

在 macOS 上,将窗口设为全屏会使整个应用程序进入全屏模式,并为其提供一个专用的桌面。当应用程序处于全屏模式时,若显示另一个窗口,该窗口可能会自动也进入全屏模式。为防止这种情况,在显示另一个窗口之前,请通过调用全屏窗口的 `showNormal()` 或 `close()` 方法退出全屏模式。

另请参阅 showNormal()、showMaximized()、show()、isVisible() 以及close()。

[slot] void QWidget::showMaximized()

将控件显示为最大化状态。

调用此函数仅影响windows 。

在 X11 环境下,此函数在某些窗口管理器中可能无法正常工作。具体说明请参阅“窗口几何”文档。

另请参阅 setWindowState()、showNormal()、showMinimized()、show()、hide()以及isVisible()。

[slot] void QWidget::showMinimized()

将小部件最小化,显示为图标。

调用此函数仅影响windows 。

另请参阅 showNormal()、showMaximized()、show()、hide()、isVisible() 以及isMinimized()。

[slot] void QWidget::showNormal()

在控件被最大化或最小化后将其恢复原状。

调用此函数仅影响windows 。

另请参阅 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()。

[virtual protected] 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 。

[slot] void QWidget::update()

更新小部件,除非已禁用更新功能或该小部件处于隐藏状态。

此函数不会立即触发重绘;而是将绘制事件排入队列,待 Qt 返回主事件循环时进行处理。与调用 `repaint()` 相比,这种方式使 Qt 能够进行优化,从而提高速度并减少闪烁。

通常情况下,多次调用update()只会触发一次paintEvent()调用。

Qt 通常会在调用paintEvent() 之前清除控件的区域。如果设置了Qt::WA_OpaquePaintEvent 控件属性,则由控件负责将其所有像素绘制为不透明颜色。

注意:此 槽已被重载。要连接到此槽:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        widget, qOverload<>(&QWidget::update));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        widget, [receiver = widget]() { receiver->update(); });
有关更多示例和方法,请参阅“连接到重载的槽”。

另请参阅 repaint()、paintEvent()、setUpdatesEnabled() 以及Analog Clock。

void QWidget::update(const QRect &rect)

此版本更新了小部件内部的一个矩形(rect )。

这是一个重载函数。

void QWidget::update(const QRegion &rgn)

此版本会重新绘制小部件内部的区域rgn 。

这是一个重载函数。

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

此版本更新了小部件内部的一个矩形(x 、y 、w 、h )。

这是一个重载函数。

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 的Notifier 信号。

QString QWidget::windowRole() const

返回窗口的角色,或一个空字符串。

另请参见 setWindowRole(),windowIcon 以及windowTitle 。

Qt::WindowStates QWidget::windowState() const

返回当前窗口状态。窗口状态是以下状态的“或”运算组合:Qt::WindowState :Qt::WindowMinimized 、Qt::WindowMaximized 、Qt::WindowFullScreen 和Qt::WindowActive 。

另请参阅 Qt::WindowState 和setWindowState()。

[signal] void QWidget::windowTitleChanged(const QString &title)

当窗口标题发生变化时,会发出此信号,并将新的title 作为参数传入。

注意: 这是属性windowTitle 的Notifier 信号。

Qt::WindowType QWidget::windowType() const

返回此控件的窗口类型。这与windowFlags() 和Qt::WindowType_Mask 完全相同。

另请参阅 windowFlags 。

宏文档

QWIDGETSIZE_MAX

定义QWidget 对象的最大尺寸。

控件的最大允许尺寸为QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX),即QSize (16777215,16777215)。

另请参阅 QWidget::setMaximumSize()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.