QWidget 类

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

公有类型

enum RenderFlag { DrawWindowBackground, DrawChildren, IgnoreMask }
flags RenderFlags

属性

公有函数

QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
~QWidget()
bool acceptDrops() const
QString accessibleDescription() const
QString accessibleName() const
QList<QAction *> actions() const
void activateWindow()
void addAction(QAction *action)
void addActions(QList<QAction *> actions)
void adjustSize()
bool autoFillBackground() const
QPalette::ColorRole backgroundRole() const
QBackingStore *backingStore() const
QSize baseSize() const
QWidget *childAt(int x, int y) const
QWidget *childAt(const QPoint &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
void getContentsMargins(int *left, int *top, int *right, int *bottom) const
QPixmap grab(const QRect &rectangle = QRect( QPoint( 0, 0 ), QSize( -1, -1 ) ))
void grabGesture(Qt::GestureType gesture, Qt::GestureFlags flags = Qt::GestureFlags())
void grabKeyboard()
void grabMouse()
void grabMouse(const QCursor &cursor)
int grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut)
QGraphicsEffect *graphicsEffect() const
QGraphicsProxyWidget *graphicsProxyWidget() const
bool hasEditFocus() const
bool hasFocus() const
virtual bool hasHeightForWidth() const
bool hasMouseTracking() const
bool hasTabletTracking() const
int height() const
virtual int heightForWidth(int w) const
Qt::InputMethodHints inputMethodHints() const
virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const
void insertAction(QAction *before, QAction *action)
void insertActions(QAction *before, 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
QPoint mapFrom(const QWidget *parent, const QPoint &pos) const
QPoint mapFromGlobal(const QPoint &pos) const
QPoint mapFromParent(const QPoint &pos) const
QPoint mapTo(const QWidget *parent, const QPoint &pos) const
QPoint mapToGlobal(const QPoint &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(const QPoint &)
void move(int x, int y)
QWidget *nativeParentWidget() const
QWidget *nextInFocusChain() const
QRect normalGeometry() const
void overrideWindowFlags(Qt::WindowFlags flags)
const QPalette &palette() const
QWidget *parentWidget() const
QPoint pos() const
QWidget *previousInFocusChain() const
QRect rect() const
void releaseKeyboard()
void releaseMouse()
void releaseShortcut(int id)
void removeAction(QAction *action)
void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), RenderFlags renderFlags = RenderFlags( DrawWindowBackground | DrawChildren ))
void render(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), RenderFlags renderFlags = RenderFlags( DrawWindowBackground | DrawChildren ))
void repaint(int x, int y, int w, int h)
void repaint(const QRect &rect)
void repaint(const QRegion &rgn)
void resize(const QSize &)
void resize(int w, int h)
bool restoreGeometry(const QByteArray &geometry)
QByteArray saveGeometry() const
void scroll(int dx, int dy)
void scroll(int dx, int dy, const QRect &r)
void setAcceptDrops(bool on)
void setAccessibleDescription(const QString &description)
void setAccessibleName(const QString &name)
void setAttribute(Qt::WidgetAttribute attribute, bool on = true)
void setAutoFillBackground(bool enabled)
void setBackgroundRole(QPalette::ColorRole role)
void setBaseSize(const QSize &)
void setBaseSize(int basew, int baseh)
void setContentsMargins(int left, int top, int right, int bottom)
void setContentsMargins(const QMargins &margins)
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
void setCursor(const QCursor &)
void setEditFocus(bool enable)
void setFixedHeight(int h)
void setFixedSize(const QSize &s)
void setFixedSize(int w, int h)
void setFixedWidth(int w)
void setFocus(Qt::FocusReason reason)
void setFocusPolicy(Qt::FocusPolicy policy)
void setFocusProxy(QWidget *w)
void setFont(const QFont &)
void setForegroundRole(QPalette::ColorRole role)
void setGeometry(const QRect &)
void setGeometry(int x, int y, int w, int h)
void setGraphicsEffect(QGraphicsEffect *effect)
void setInputMethodHints(Qt::InputMethodHints hints)
void setLayout(QLayout *layout)
void setLayoutDirection(Qt::LayoutDirection direction)
void setLocale(const QLocale &locale)
void setMask(const QBitmap &bitmap)
void setMask(const QRegion &region)
void setMaximumHeight(int maxh)
void setMaximumSize(const QSize &)
void setMaximumSize(int maxw, int maxh)
void setMaximumWidth(int maxw)
void setMinimumHeight(int minh)
void setMinimumSize(const QSize &)
void setMinimumSize(int minw, int minh)
void setMinimumWidth(int minw)
void setMouseTracking(bool enable)
void setPalette(const QPalette &)
void setParent(QWidget *parent)
void setParent(QWidget *parent, Qt::WindowFlags f)
void setShortcutAutoRepeat(int id, bool enable = true)
void setShortcutEnabled(int id, bool enable = true)
void setSizeIncrement(const QSize &)
void setSizeIncrement(int w, int h)
void setSizePolicy(QSizePolicy)
void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
void setStatusTip(const QString &)
void setStyle(QStyle *style)
void setTabletTracking(bool enable)
void setToolTip(const QString &)
void setToolTipDuration(int msec)
void setUpdatesEnabled(bool enable)
void setWhatsThis(const QString &)
void setWindowFilePath(const QString &filePath)
void setWindowFlag(Qt::WindowType flag, bool on = true)
void setWindowFlags(Qt::WindowFlags type)
void setWindowIcon(const QIcon &icon)
void setWindowModality(Qt::WindowModality windowModality)
void setWindowOpacity(qreal level)
void setWindowRole(const QString &role)
void setWindowState(Qt::WindowStates windowState)
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 attribute) const
QString toolTip() const
int toolTipDuration() const
bool underMouse() const
void ungrabGesture(Qt::GestureType gesture)
void unsetCursor()
void unsetLayoutDirection()
void unsetLocale()
void update(int x, int y, int w, int h)
void update(const QRect &rect)
void update(const QRegion &rgn)
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

公有槽函数

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()
  • 1 个继承自 QObject的公有槽函数

信号

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

静态公有成员

QWidget *createWindowContainer(QWindow *window, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())
QWidget *find(WId id)
QWidget *keyboardGrabber()
QWidget *mouseGrabber()
void setTabOrder(QWidget *first, QWidget *second)
  • 10 个继承自 QObject的静态公有成员

受保护的函数

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(QEvent *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, long *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)
virtual void initPainter(QPainter *painter) const
virtual int metric(PaintDeviceMetric m) const

受保护的槽函数

其他继承的成员

详细描述

QWidget 类是所有用户界面对象的基类.

widget是用户界面的最小单元: 它接收来自窗口系统的鼠标, 键盘及其他事件, 并绘制到屏幕. 每个widget都是矩形, 并依照z轴顺序排序. 一个widget被它的父widget和前面的widget裁剪.

一个没有嵌入到父对象的widget被称为窗口. 通常, 窗口有边框和标题栏, 你也可以用适当的 window flags创建没有边框和标题栏的窗口. 在 Qt 中, QMainWindowQDialog的各种子类是最常见的窗口类型.

每个widget的构造函数接受1个或2个标准参数:

  1. QWidget *parent = 0 是新widget的父widget. 如果它是0(默认值), 那么新widget是一个窗口. 如果不是0, 那么新widget是 widget的子对象, 创建时会受 widget的位置及大小约束 (除非你使用 Qt::Window 作为窗口标志).
  2. Qt::WindowFlags f = 0 (可用的地方) 设置窗口标志; 默认值适用于大部分widget, 但是如果你需要一个没有边框的窗口, 你必须使用特定的窗口标志.

QWidget 有很多成员函数, 但是有些没有实现功能; 例如, QWidget 有一个字体属性, 但是QWidget本身没有调用. 许多子类提供真正的实现, 例如 QLabel, QPushButton, QListWidget, 和 QTabWidget.

顶级和子widget

一个没有父对象的widget是一个独立的窗口 (顶层widget). 对于这类widget, 调用setWindowTitle() 和 setWindowIcon() 设置窗口标题和图标.

非窗口的widget是子widget, 显示在父widget里. Qt中的大部分widget是子widget. 例如, 你可以将按钮作为顶级窗口显示, 但是多数人喜欢将按钮放在其他widget, 如 QDialog.

A parent widget containing various child widgets.

上图显示一个 QGroupBox widget通过 QGridLayout设置一个布局管理器, 容纳了许多子widget. QLabel 子widget标记外边框, 用以表明它的实际大小.

如果你想用一个 QWidget 容你许多子widget, 那么你通常需要给 QWidget设置一个布局管理器. 详见 Layout Management .

组合widget

当一个widget作为容器, 将一定数量的子widget分组时, 被称为组合widget. 你可以创建一个具有可视属性的widget( 例如 QFrame ), 并且设置一个布局, 然后添加子widget. 上图显示一个组合widget, 它是通过Qt Designer创建的.

组合widget也可以作为一个标准的子widget创建, 例如 QWidgetQFrame, 在子类构造函数中添加必要的布局和子widget. 许多 Qt提供的示例 采用这种方式, 在Qt的Tutorials也有介绍.

自定义widget和绘制

因为 QWidgetQPaintDevice的一个子类, 它的子类可以显示自定义内容, 这些内容由一系列 QPainter 类的实例对象绘制操作组合而成. 这种方式与 图形视图框架 使用的画布风格方式是不同的. 图形视图框架是由应用程序将元素添加到场景中,并由框架本身渲染.

每个widget在 paintEvent() 函数中执行绘制操作. 无论外部变化还是应用程序要求, widget都需要调用这个函数进行重绘.

Analog Clock example 示例展示一个简单的widget如何处理绘制事件.

大小提示和策略

当实现一个新widget时, 一个很有用的方案是: 重新实现 sizeHint() 为widget提供一个合理的默认大小并使用 setSizePolicy()设置正确的大小策略.

默认情况下, 如果不提供大小提示, 组合widget会根据子widget的空间需求来调整大小.

大小策略可以为布局管理器提供良好的默认行为, 而且其他的widget也能包含和管理你的widget. 默认的大小策略表明大小提示是widget的首选大小,这对许多widget而言已经足够好.

注: 顶级widget的大小限制为桌面宽高的2/3. 如果widget的边界不满足要求, 你可以使用 resize() 调整.

事件

widget响应通常是由用户操作引起的事件. Qt通过调用包含每个事件信息的QEvent 子类实例的特定事件处理函数, 将事件交付给widget.

如果你的widget仅包含子widget, 那么你可能不需要实现任何事件处理函数. 如果你想检测子widget的鼠标点击, 那么你可以在widget的mousePressEvent()函数中调用子widget的underMouse() 函数.

Scribble example 实例实现一个更多的事件处理, 如鼠标移动, 按钮按下和窗口大小调整.

这里有一个关于 QWidget事件的简要概述:

  • paintEvent(): 重绘widget. 每个需要显示自定义内容的widget都需要实现它. 使用 QPainter 绘制只能在 paintEvent() 函数或者由 paintEvent()函数调用的函数中.
  • resizeEvent(): 调整widget大小.
  • mousePressEvent(): 鼠标位于widget内部并按下或者widget调用 grabMouse()函数抓取鼠标. 调用 grabMouse()函数相当于持续按下鼠标(不释放).
  • mouseReleaseEvent(): 释放鼠标按键. 当一个widget接收到鼠标按下事件, 它也会接收到鼠标释放事件. 有一个例外: 如果在按下鼠标时出现一个弹出菜单, 那么这个弹出菜单会立即窃取鼠标事件.
  • mouseDoubleClickEvent(): 用户在widget中双击鼠标. 如果用户双击鼠标, 那么widget会收到一组鼠标事件(鼠标按下, 鼠标释放, 鼠标双击, 鼠标按下, 鼠标释放). (如果鼠标在此期间没有保持稳定, 还会收到一些鼠标移动事件.) 这是因为在第二次鼠标按下事件没有到达时, 不可能 区分鼠标单击和双击. (这就是为什么大多数GUI书籍建议将双击事件作为单击事件的扩展, 而不是触发不同的操作.)

接收键盘输入的widget需要重新实现一些事件处理函数:

  • keyPressEvent() : 键盘按下; 当键盘按下足够长的时间触发键盘重复按下. 如果没有开启焦点转移机制, TabShift+Tab 按键消息也会传递给widget. 如果强制widget处理这些键, 你必须重新实现 QWidget::event()函数.
  • focusInEvent() : widget获得键盘焦点 (假设你调用 setFocusPolicy()). 行为良好的widget以一种清晰而谨慎的方式表明它们拥有键盘焦点.
  • focusOutEvent() : widget失去键盘焦点.

你可能还需要重新实现一些不太常见的事件处理函数:

  • mouseMoveEvent() : 鼠标按下时移动. 这个事件在处理拖拽时很有用. 如果你调用 setMouseTracking(true), 那么即使鼠标没有按下, 只要鼠标发送移动, 你也会得到这个事件. (参见 Drag and Drop 说明.)
  • keyReleaseEvent() : 释放键盘. 如果按键自动重复(长时间按下键盘), 那么widget将重复接收一对键盘按下和释放事件. 如果没有开启焦点转移机制, TabShift+Tab 按键消息也会传递给widget. 如果强制widget处理这些键, 你必须重新实现 QWidget::event()函数.
  • wheelEvent() : 在widget具有焦点时, 用户转动鼠标滚轮.
  • enterEvent() : 鼠标进入widget.
  • leaveEvent() : 鼠标离开widget.
  • moveEvent() : widget相对父widget移动.
  • closeEvent() : 用户关闭widget (或者调用 close() 函数).

QEvent::Type 的文档中, 还有一些不太常用的事件. 要处理这些事件, 你需要直接重新实现 event() 函数.

event() 函数的默认实现处理 TabShift+Tab (移动键盘焦点), 并将大部分事件传给特定的事件处理函数.

事件和事件分发机制在 The Event System 介绍.

函数和属性

内容函数和属性
窗口函数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()

widget样式表

除了每个平台的标准widget样式外, widget还可以根据 样式表 中规则设置样式. 这个特性允许你自定义外观, 向用户提供形象生动的视觉效果. 例如, 一个按钮可以用特定的外观表明它会执行破坏性动作.

关于widget样式的更多详细描述参见 Qt Style Sheets .

透明和双重缓存

从Qt 4.0开始, QWidget 绘制时自动双缓冲, 因此, 你不需要为了避免闪烁而自己在 paintEvent() 函数实现双缓冲代码.

从Qt4.1开始, Qt::WA_ContentsPropagated 属性已经废弃. 只要没有设置 Qt::WA_PaintOnScreen , 默认情况下父widget的内容就会传递给它们的每个子widget. 自定义widget时可以利用这个特性, 如更新不规则区域(创建非矩形子widget)或者使用透明程度不同的颜色绘制. 下图展示如何微调自定义widget的属性实现不同的效果.

上图, 在一个父widget上添加一个带有裁剪区域的半透明子widget (如一个显示图片的 QLabel ). 然后, 设置不同的属性实现不同的效果:

  • 左侧widget使用默认设置. 这种默认状态适合大多数自定义透明程度不同的widget, 如不规则形状或使用透明笔刷绘制整个区域.
  • 中间widget设置 autoFillBackground 属性, 这个属性在自定义widget时依赖widget的背景色并可以使用透明笔刷绘制整个区域.
  • 右侧widget设置 Qt::WA_OpaquePaintEvent 属性, 这个属性表明widget将用不透明的颜色绘制整个区域. widget的区域是没有初始化的, 上图使用红色的对角线网格表示这个区域. WA_OpaquePaintArea属性对于需要快速绘制自己的专用内容且不需要默认填充背景的widget很有用

为了快速更新一个带有简单背景(实时绘制或背景图)的widget, 最好的方式是设置 autoFillBackground 属性, 定义一个适合的背景色 (调用setBackgroundRole() 函数, 参数是QPalette::Window ), 然后在 paintEvent()函数中实现必要的绘制功能.

为了快速更新一个使用不透明内容(如视频流)绘制整个区域的自定义widget, 最好的方式是设置 Qt::WA_OpaquePaintEvent属性, 这样可以避免背景重绘带来的不必要开销.

如果一个widget同时设置 Qt::WA_OpaquePaintEvent 属性 autoFillBackground 属性, Qt::WA_OpaquePaintEvent 属性优先. 你应该根据你的需求选择其中的一个.

从Qt4.1开始, 父widget的内容也会传递给标准的widget. 如果父widget使用非标准方式设置, 可能带来一些无法预料的结果.

对于自定义widget而言, 在标准的Qtwidget上自定义绘制行为比子类化能力稍弱. 通常, 通过设置widget的 autoFillBackground 属性实现标准widget的外观定义.

创建半透明窗口

从Qt4.5开始, 在支持合成的窗口系统中, Qt可以创建半透明窗口.

为了在顶层widget利用这一特性, 你可以调用 setAttribute() 设置 Qt::WA_TranslucentBackground 属性, 这样可以保证在透明区域采用透明颜色绘制.

平台提醒:

  • X11: 这个特性依赖X服务器支持ARGB可视化和窗口合成管理器.
  • Windows: widget设置 Qt::FramelessWindowHint 属性标志, 启动半透明化工作.

本地vs外来widget

从Qt4.4开始, 外来widget是窗口系统不知道的widget. 它不具备本地窗口的句柄. 这个widget的引入是为了加快widget绘制, 调整大小和消除闪烁.

如果你需要本地窗口, 你可以选择以下选项:

  1. 设置环境变量 QT_USE_NATIVE_WINDOWS=1 .
  2. 设置应用程序属性 Qt::AA_NativeWindows .
  3. 设置widget属性 Qt::WA_NativeWindow 本身及它的所有祖先变成本地窗口 (除非设置 Qt::WA_DontCreateNativeAncestors ).
  4. 调用 QWidget::winId 强制变成本地窗口 (等同于 3).
  5. 设置窗口属性 Qt::WA_PaintOnScreen 强制变成本地窗口 (等同于 3).

参见 QEvent, QPainter, QGridLayout, and QBoxLayout.

成员类型

enum QWidget::RenderFlag
flags QWidget::RenderFlags

这个枚举类型描述调用QWidget::render()时, 如何绘制widget.

ConstantValueDescription
QWidget::DrawWindowBackground0x1默认启用. 即使autoFillBackground 没有设置, widget的背景也会绘制到目标.
QWidget::DrawChildren0x2默认启用. widget的子对象递归地绘制到目标.
QWidget::IgnoreMask0x4默认禁用. widget绘制到目标时, 忽略 QWidget::mask().

This enum was introduced or modified in Qt 4.3.

The RenderFlags type is a typedef for QFlags<RenderFlag>. It stores an OR combination of RenderFlag values.

属性

acceptDrops : bool

widget是否接收drop事件

这个属性设为true, 表明widget可以接收drop事件.

如果widget是桌面 (windowType() == Qt::Desktop), 如果另一个程序正在使用桌面, 设置可能出错. 你可以调用acceptDrops()检测这种情况是否发生.

警告: 禁止在拖拽事件处理程序中修改这个属性.

这个属性默认是 false.

访问函数:

bool acceptDrops() const
void setAcceptDrops(bool on)

参见 Drag and Drop.

accessibleDescription : QString

widget的描述信息

这个属性应该表达widget是做什么的. accessibleName 是一个简介 (如. Save), accessibleDescription应该给更多的内容, 如Saves the current document.

这个属性必须 国际化.

这个属性默认是空字符串, Qt的工具提示会使用这个属性.

访问函数:

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

参见 QWidget::accessibleName and QAccessibleInterface::text().

accessibleName : QString

widget的名称

widget的名称 QPushButton, 使用按钮的文本.

widget不提供任何文本时, 设置这个属性非常重要. 例如, 一个仅包含图标的按钮设置这个属性后, 才能在屏幕阅读器正常工作. 名称应该简短, 且与widget传递的视觉信息等效.

这个属性必须 国际化.

这个属性默认是空字符串.

访问函数:

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

参见 QWidget::accessibleDescription and QAccessibleInterface::text().

autoFillBackground : bool

widget的背景是否自动填充

若这个属性是true, Qt在调用绘制事件前, 自动填充widget的背景. 颜色是在widget的palette中, 通过 QPalette::Window 定义.

此外, 除非设置WA_OpaquePaintEvent或WA_NoSystemBackground属性, 窗口始终用 QPalette::Window填充.

如果widget的父对象背景有静态渐变, 则无法关闭这个个属性 (即., 设为 false).

警告: 配合 Qt Style Sheets使用时应谨慎. widget的样式表具有有效背景或边框图像时, 这个属性自动禁用.

这个属性默认是 false.

This property was introduced in Qt 4.1.

访问函数:

bool autoFillBackground() const
void setAutoFillBackground(bool enabled)

参见 Qt::WA_OpaquePaintEvent, Qt::WA_NoSystemBackground, and Transparency and Double Buffering.

baseSize : QSize

widget的基础大小

若widget定义 sizeIncrement(), 则基础大小用于计算widget的确切大小.

这个属性默认是QSize(0, 0).

访问函数:

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

参见 setSizeIncrement().

childrenRect : const QRect

widget的子对象边框, 不包括隐藏的子对象

对于没有子对象的widget, 这个属性默认是QRect(0,0,0,0).

访问函数:

QRect childrenRect() const

参见 childrenRegion() and geometry().

childrenRegion : const QRegion

widget的子对象占据的组合区域, 不包括隐藏的子对象

对于没有子对象的widget, 这个属性默认是空的QRegion.

访问函数:

QRegion childrenRegion() const

参见 childrenRect(), geometry(), mask().

contextMenuPolicy : Qt::ContextMenuPolicy

widget如何显示上下文菜单

这个属性的默认值是 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(), and actions().

cursor : QCursor

widget的光标形状

鼠标在widget上时, 显示的鼠标形状. 参见 list of predefined cursor objects.

编辑类型的widget可能使用I-beam型光标:

  setCursor(Qt::IBeamCursor);

如果没有设置光标, 或调用unsetCurosr(), 将使用父对象的光标.

这个属性的默认光标形状是 Qt::ArrowCursor.

鼠标离开widget后, 即便鼠标处于抓取状态, 一些下层窗口也会重置光标. 如果你想为所有widget设置一个光标, 即使在窗口之外, 可以考虑 QApplication::setOverrideCursor().

访问函数:

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

参见 QApplication::setOverrideCursor().

enabled : bool

widget是否接收键盘和鼠标事件

通常情况下, enabled是true时, widget接收键盘和鼠标事件; enabled是false时, widget无法接收. QAbstractButton是例外.

若enabled是false时, 一些widget显示不同的界面效果. 例如, 按钮可能将文本显示灰色. 如果你需要知道widget的enabled状态, 你可以重载 changeEvent(), 过滤 QEvent::EnabledChange事件.

禁用时, widget会隐式禁用所有的子对象. 启用时, widget会启用所有的子对象, 除非它们被明确禁用. 父widget保持禁用状态时, 若子widget不是一个窗口, 不能启用子widget.

这个属性默认是 true.

访问函数:

bool isEnabled() const
void setEnabled(bool)

参见 isEnabledTo(), QKeyEvent, QMouseEvent, and changeEvent().

focus : const bool

widget是否有键盘输入焦点

这个属性默认是 false.

注意: 获取widget的focus值, 实际相当于检查 QApplication::focusWidget() 是否等于这个widget.

访问函数:

bool hasFocus() const

参见 setFocus(), clearFocus(), setFocusPolicy(), and QApplication::focusWidget().

focusPolicy : Qt::FocusPolicy

widget是否接收键盘焦点

Qt::TabFocus widget通过Tab接收键盘焦点, Qt::ClickFocus widget通过点击接收键盘焦点, Qt::StrongFocus widget通过Tab和点击接收键盘焦点, Qt::NoFocus (默认) widget不接受键盘焦点.

若widget处理键盘事件, 你必须启用键盘焦点. 焦点策略的设置通常在widget的构造函数. 例如, 在 QLineEdit 的构造函数调用 setFocusPolicy(Qt::StrongFocus).

若widget有焦点策略, 焦点策略将传递.

访问函数:

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

参见 focusInEvent(), focusOutEvent(), keyPressEvent(), keyReleaseEvent(), and enabled.

font : QFont

widget的字体

这个属性描述widget要求的字体. 渲染标准组件时, widget的样式使用这个字体, 这是确保自定义widget和系统平台外观保持一致的一种有效手段. 应用程序为不同的平台或不同的风格定义不同的字体很常见.

当你为widget设置新字体时, 字体会与widget的默认字体组合, 形成widget的最终字体. 你可以调用 fontInfo() 获取最终字体. 最终字体也用于初始化 QPainter的字体.

默认字体取决于系统环境. QApplication 维护一个系统/主题字体, 作为所有widget的默认字体. 对于某些类型的widget, 可能有特殊的字体默认值. 你也可以调用 QApplication::setFont(), 参数是字体和widget的名称, 为widget定义默认字体. 最后, 这个字体与Qt的字体数据库匹配, 查找最佳匹配字体.

QWidget 将字体属性从父级传递给子级. 如果你更改字体的属性, 并设置成widget的字体, 则这个属性传递给widget的所有子级, 从而覆盖任何系统默认值.注意: 除非启用Qt::WA_WindowPropagation属性, 否则, 默认情况下, 字体不会传播到窗口 (参见 isWindow()).

QWidget的字体传播与调色板传播类似.

当前样式用于渲染所有标准Qt widget的内容, 可以自由选择字体, 或者某些情况下忽略它(部分或完全). 特别是, 某些样式(如GTK样式, Mac样式和Windows Vista样式)会对widget字体做特殊修改, 以便匹配系统的原生外观. 因此, 修改widget的字体属性, 并不能保证更改widget外观. 相反, 你可以选择styleSheet.

注意: Qt Style Sheets 与QWidget::setFont()同时使用, 且二者冲突, 优先使用style sheets.

访问函数:

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

参见 fontInfo() and fontMetrics().

frameGeometry : const QRect

widget相对父级的几何结构, 包含窗口边框

窗口的几何结构概述参见 Window Geometry.

这个属性默认值由系统平台和屏幕几何尺寸决定.

访问函数:

QRect frameGeometry() const

参见 geometry(), x(), y(), and pos().

frameSize : const QSize

widget的宽高, 包含边框

这个属性默认值由系统平台和屏幕几何尺寸决定.

访问函数:

QSize frameSize() const

fullScreen : const bool

widget是否处于全屏显示模式

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

这个属性默认是 false.

访问函数:

bool isFullScreen() const

参见 windowState(), minimized, and maximized.

geometry : QRect

widget相对父级的几何尺寸, 不包括边框

这个属性更改时, 若widget可见, 则它会立即收到移动事件 (moveEvent()) 和/或调整大小事件 (resizeEvent()). 若widget不可见, 则Qt保证在widget显示前, 接收到适当的事件.

若设置的宽高位于 minimumSize() 和 maximumSize()范围外, 则自动调整大小.

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

窗口的几何结构概述参见 Window Geometry.

这个属性默认值由系统平台和屏幕几何尺寸决定.

访问函数:

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(), and maximumSize().

height : const int

widget的高, 不包含边框

窗口的几何结构概述参见 Window Geometry.

注意: 多个显示屏上, 不要直接调用QDesktopWidget::height. 详见 Screen Geometry.

这个属性默认值由系统平台和屏幕几何尺寸决定.

访问函数:

int height() const

参见 geometry, width, and size.

inputMethodHints : Qt::InputMethodHints

widget具有哪些特殊的输入法提示.

这个属性仅与输入widget有关. 输入法使用它判断如何操作. 例如, 若设置 Qt::ImhFormattedNumbersOnly 标志, 则输入法可能改变显示样式, 以便只能输入数字.

警告: 某些widget只有设置特定标志, 才能正常工作. 设置标志的方式是 w->setInputMethodHints(w->inputMethodHints()|f), 而不是 w->setInputMethodHints(f).

注意: 这些标志只是提示, 所以输入法可以忽略它们. 如果你想确保只输入特定字符, 你还应该在widget上设置一个 QValidator.

这个属性的默认值是 Qt::ImhNone.

这个属性从Qt4.6开始引入.

访问函数:

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

参见 inputMethodQuery().

isActiveWindow : const bool

这个widget窗口是否是激活窗口

激活窗口是具有键盘焦点的widget窗口(如果窗口没有widget或widget不接受键盘焦点, 则窗口仍可能具有焦点).

弹出式窗口可见时, 这个属性对于激活窗口和弹出窗口都是 true.

这个属性默认是 false.

访问函数:

bool isActiveWindow() const

参见 activateWindow() and QApplication::activeWindow().

layoutDirection : Qt::LayoutDirection

widget的布局方向

这个属性默认是 Qt::LeftToRight.

设置widget的布局方向时, 它会传播给子widget, 但是不会传递给窗口类型的子widget及明确调用setLayoutDirection()的子widget. 此外, 调用setLayoutDirection()之后, 添加的子widget不会继承父对象的布局方向.

从Qt 4.7开始, 这个属性不会影响文本的布局方向.

访问函数:

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

参见 QApplication::layoutDirection.

locale : QLocale

widget的区域设置

如果没有设置特定区域, 这个属性的值可能是父对象的区域设置, 也可能是默认区域设置(widget是顶级widget).

如果widget显示日期或数字, 则应该使用区域设置对其格式化.

这个属性从Qt 4.3开始引入.

访问函数:

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

参见 QLocale and QLocale::setDefault().

maximized : const bool

widget是否最大化

这个属性与窗口相关.

注意: 由于窗口系统的限制, 这个属性可能返回的不是预期结果 (例如., 在X11上, 如果用户通过窗口管理器最大化窗口, Qt无法获取这个结果). 但是, 随着窗口管理协议的发展, 这一点有望改善.

这个属性默认值是 false.

访问函数:

bool isMaximized() const

参见 windowState(), showMaximized(), visible, show(), hide(), showNormal(), and minimized.

maximumHeight : int

widget最大的像素高度

这个属性是 maximumSize 中的高度.

这个属性默认值是 16777215.

注意: QWIDGETSIZE_MAX 宏限制widget的最大值.

访问函数:

int maximumHeight() const
void setMaximumHeight(int maxh)

参见 maximumSize and maximumWidth.

maximumSize : QSize

widget最大的像素尺寸

widget调整大小不能超过这个属性值.

这个属性的默认值是QSize(16777215, 16777215).

注意: QWIDGETSIZE_MAX 宏限制widget的最大值.

访问函数:

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

参见 maximumWidth, maximumHeight, minimumSize, and sizeIncrement.

maximumWidth : int

widget最大的像素宽度

这个属性是 maximumSize 中的宽度.

这个属性默认值是 16777215.

注意: QWIDGETSIZE_MAX 宏限制widget的最大值.

访问函数:

int maximumWidth() const
void setMaximumWidth(int maxw)

参见 maximumSize and maximumHeight.

minimized : const bool

widget是否最小化(图标化)

这个属性与窗口相关.

这个属性默认值是 false.

访问函数:

bool isMinimized() const

参见 showMinimized(), visible, show(), hide(), showNormal(), and maximized.

minimumHeight : int

widget最小的像素高度

这个属性是 minimumSize 中的高度.

这个属性默认值是 0.

访问函数:

int minimumHeight() const
void setMinimumHeight(int minh)

参见 minimumSize and minimumWidth.

minimumSize : QSize

widget最小像素尺寸

widget调整大小不能小于这个属性值. 如果当前设置的大小小于这个值, widget的大小强制设置为最小值.

调用setMinimumSize()函数会覆盖 QLayout定义的最小值. 使用 QSize(0, 0)重置最小值.

这个属性默认值是QSize(0,0).

访问函数:

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

参见 minimumWidth, minimumHeight, maximumSize, and sizeIncrement.

minimumSizeHint : const QSize

widget的建议最小尺寸

如果这个属性值是无效的, 则没有建议值.

如果widget没有布局, 则minimumSizeHint()的默认实现返回无效值. 否则, 返回布局的最小尺寸. Qt的多数内置widget重新实现minimumSizeHint().

除非设置minimumSize()或大小策略设置为QSizePolicy::Ignore, QLayout 不会将widget调整到比 minimumSize() 更小的值. 如果设置minimumSize(), Qt会忽略这个属性.

访问函数:

virtual QSize minimumSizeHint() const

参见 QSize::isValid(), resize(), setMinimumSize(), and sizePolicy().

minimumWidth : int

widget最小的像素宽度

这个属性是 minimumSize 中的宽度.

这个属性默认值是0.

访问函数:

int minimumWidth() const
void setMinimumWidth(int minw)

参见 minimumSize and minimumHeight.

widget是否是模态widget

这个属性只对窗口有效. 模态窗口可以阻止其他窗口获得任何输入.

这个属性默认值是 false.

访问函数:

bool isModal() const

参见 isWindow(), windowModality, and QDialog.

mouseTracking : bool

widget是否开启鼠标追踪

如果禁用鼠标追踪(默认值), 仅在鼠标按下, 并移动时, widget才会收到移动事件.

如果启用鼠标追踪, 即便没有鼠标按下, widget也会收到移动事件.

访问函数:

bool hasMouseTracking() const
void setMouseTracking(bool enable)

参见 mouseMoveEvent().

normalGeometry : const QRect

widget作为顶层窗口正常显示(非最大化或全屏)的尺寸

对于子widget, 这个属性值是空的QRect.

这个属性默认值是空的QRect.

访问函数:

QRect normalGeometry() const

参见 QWidget::windowState() and QWidget::geometry.

palette : QPalette

widget的调色板

渲染标准组件时, 这个属性由widget的样式使用, 这是确保自定义widget和系统平台外观保持一致的一种有效手段. 不同的平台, 不同的风格经常有不同的调色板.

为widget设置新的调色板时, 这个调色板的颜色将于widget的默认调色板组合, 形成最终的调色板. 调色板的背景条目填充widget的背景 (参见 QWidget::autoFillBackground), 前景条目初始化QPainter的笔.

默认值取决于系统环境. QApplication 维护一个系统/主题调色板, 作为所有widget的默认调色板. 某些类型的widget也可能有特殊的调色板默认值(例如., 在Windows Vista上, 从QMenuBar派生的所有类都有一个特殊的默认调色板). 你还可以通过将自定义调色板和widget的名称传递给QApplication::setPalette()为小部件定义默认调色板. 最后, 样式总是可以选择在指定时抛光调色板(参见QStyle::polish()).

QWidget将调色板从父级传播到子级. 如果将画笔或颜色分配给调色板上的特定角色, 并将这个调色板分配给widget, 则该角色将传播到widget的所有子级, 从而覆盖这个角色的任何系统默认值. 注意, 除非启用Qt::WA_WindowPropagation属性, 否则默认情况下调色板不会传播到窗口(参见isWindow()).

QWidget的调色板传播与字体传播类似.

当前样式用于渲染所有标准Qt widget的内容, 可以从调色板中自由选择颜色和画笔, 或者在某些情况下, 可以忽略调色板(部分或完全). 特别是, 某些样式(如GTK样式, Mac样式和Windows Vista样式)依赖于第三方API来呈现widget的内容, 而这些样式通常不遵循调色板. 因此, 向widget的调色板分配角色并不能保证更改widget的外观. 相反, 你可以选择应用样式表. 详见 Knowledge Base article .

警告: 不要将调色板与 Qt样式表结合使用. 使用样式表时, widget的调色板可以使用 "color", "background-color", "selection-color", "selection-background-color" 和 "alternate-background-color"定义.

访问函数:

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

参见 QApplication::palette() and QWidget::font().

pos : QPoint

widget在父级的位置

如果widget是窗口, 这个属性值是在桌面上的位置, 包括它的边框.

若widget可见, 修改位置时, widget立即收到移动事件 (moveEvent()). 如果widget当前不可见, Qt会确保widget显示前收到移动事件.

这个属性的默认值是原点.

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

有关窗口几何尺寸参见 Window Geometry.

访问函数:

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

参见 frameGeometry, size, x(), and y().

rect : const QRect

widget的几何尺寸, 不包括边框

这个属性值等于 QRect(0, 0, width(), height()).

有关窗口几何尺寸参见 Window Geometry.

这个属性默认值取决于用户的平台和屏幕几何图形.

访问函数:

QRect rect() const

参见 size.

size : QSize

widget的大小, 不包括边框

若widget可见, 调整大小时, widget立即收到调整大小事件 (resizeEvent()). 如果widget当前不可见, Qt会确保widget显示前收到调整大小事件.

如果大小超出 minimumSize() 和 maximumSize()定义的范围, 则Qt会对其进行调整.

这个属性默认值取决于用户的平台和屏幕几何图形.

警告: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().

sizeHint : const QSize

widget的建议大小

若这个属性值无效, 则无建议大小.

如果widget没有布局, sizeHint()的默认实现返回一个无效值, 否则返回适合布局的大小.

访问函数:

virtual QSize sizeHint() const

参见 QSize::isValid(), minimumSizeHint(), sizePolicy(), setMinimumSize(), updateGeometry().

sizeIncrement : QSize

widget的增量大小

用户调整窗口大小时, 大小以baseSize()为基础, 水平移动sizeIncrement.width()像素, 垂直移动sizeIncrement.height()像素. 适合的widget大小是非负整数ij:

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

注意: 你可以设置所有widget的增量大小, 但是, 它仅影响窗口.

这个属性默认值是QSize(0, 0).

警告: 这个属性值在Windows下无效, 在X11上, 窗口管理器可能忽略它.

访问函数:

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

参见 size, minimumSize, maximumSize.

sizePolicy : QSizePolicy

widget的默认布局行为

如果使用 QLayout 管理widget的子级, 则这个属性指定布局的大小策略. If there is no such QLayout, the result of this function is used.

默认策略是Preferred/Preferred, 表明widget自由调整大小, 但是更可能使用sizeHint()返回的大小. 与按钮类似的widget设置大小策略, 指定水平拉伸, 垂直固定. 这同样适用行编辑控件(如QLineEdit, QSpinBoxQComboBox)和其他水平方向的widget(如QProgressBar). QToolButton通常是方形的, 因此允许双向拉伸. 支持不同方向的小工具(如QSlider, QScrollBar或QHeader)会指定各自方向的拉伸. 提供滚动条的widget(通常是QScrollArea的子类)倾向于指定它们可以使用额外空间, 且它们可以使用小于sizeHint()的空间.

访问函数:

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

参见 sizeHint(), QLayout, QSizePolicy, and updateGeometry().

statusTip : QString

widget的状态提示

这个属性默认值是空字符串.

访问函数:

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

参见 toolTip and whatsThis.

styleSheet : QString

widget的样式

这个属性包含widget的自定义样式描述文本. 详见 Qt Style Sheets.

从Qt4.5开始, Qt样式表支持 macOS.

警告: 自定义 QStyle 子类不支持Qt的样式表, 后续版本可能解决这个问题.

从Qt4.2, Qt开始支持这个属性.

访问函数:

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

参见 setStyle(), QApplication::styleSheet, Qt Style Sheets.

tabletTracking : bool

widget启用平板电脑追踪

如果禁用平板电脑跟踪(默认设置), 则只有当触控笔与平板电脑接触时, 或者在移动触控笔时按下至少一个触控笔按钮时, widget才会接收平板电脑移动事件.

如果启用平板电脑跟踪, 即使在附近悬停时, widget也会接收平板电脑移动事件. 这对于监控位置以及辅助属性(如旋转和倾斜)以及在UI中提供反馈非常有用.

这个属性值从5.9开始引入.

访问函数:

bool hasTabletTracking() const
void setTabletTracking(bool enable)

参见 tabletEvent().

toolTip : QString

widget的工具提示

注意: 默认情况下, 只有激活窗口的子widget才会显示工具提示. 你可以在window上(不是widget上)设置 Qt::WA_AlwaysShowToolTips属性, 修改默认行为.

如果想要控制工具提示的行为, 你可以在 event() 函数中捕获 QEvent::ToolTip 事件 (如., 自定义工具提示的显示区域).

这个属性的默认值是空字符串.

访问函数:

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

参见 QToolTip, statusTip, and whatsThis.

toolTipDuration : int

widget的工具提示间隔

工具提示多久显示, 单位是ms. 如果这个属性值是-1(默认), 间隔时间依据工具提示的文本长度计算.

这个属性从Qt 5.2开始引入.

访问函数:

int toolTipDuration() const
void setToolTipDuration(int msec)

参见 toolTip.

updatesEnabled : bool

更新是否开启

一个开启更新的widget接收绘制事件, 有一个系统背景; 禁用后, 则没有. 这也意味着, 禁用更新后, 调用 update() 和 repaint() 函数不生效.

这个属性的默认值是 true.

调用setUpdatesEnabled()通常用于短时间禁用更新, 如避免大的更新期间屏幕闪烁. 在Qt中, widget通常不会产生屏幕闪烁, 但是, 在X11上, widget隐藏前被其他widget替换, 窗口服务可能擦除屏幕上的区域. 禁用更新解决这个问题.

Example:

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

禁用widget会隐式禁用所有子对象. 启用widget, 自动启用除顶级widget或明确禁用的widget的所有子widget. 重新启用会隐式调用 update().

访问函数:

bool updatesEnabled() const
void setUpdatesEnabled(bool enable)

参见 paintEvent().

visible : bool

widget是否可见

如果父窗口可见, 则调用 setVisible(true) 或 show() 将widget设为可见状态. 如果祖先widget不可见, 则widget不会变为可见. 如果widget的大小或位置发生改变, Qt保证widget显示前调用moveEvent()和resizeEvent(). 如果widget未调整大小, Qt将调用 adjustSize()将widget调整为默认大小.

调用 setVisible(false) or hide() 隐藏widget. 一个明确隐藏的widget永远不会变为可见的, 即使它的所有祖先都变为可见, 除非你调用显示函数.

widget在可见性状态更改时, 接收显示和隐藏事件. 在隐藏和显示事件之间, 不需要浪费CPU周期准备或向用户显示信息. 例如, 视频应用程序可能会简单地停止生成新帧.

碰巧被屏幕上的其他窗口遮挡的widget被认为是可见的. 这同样适用于图标化的窗口和存在于另一个虚拟桌面上的窗口(在支持这一概念的平台上). 当窗口系统改变其映射状态时, widget接收自发的显示和隐藏事件, 例如. 当用户最小化窗口时的自发隐藏事件, 以及当窗口再次恢复时的自发显示事件.

你几乎不需要重新实现setVisible()函数. 如果在显示widget之前需要更改一些设置, 使用 showEvent(). 如果需要延迟初始化, 请使用传递给 event() 函数的Polish事件.

访问函数:

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

参见 show(), hide(), isHidden(), isVisibleTo(), isMinimized(), showEvent(), and hideEvent().

whatsThis : QString

widget的帮助文本.

这个属性默认值是空字符串.

访问函数:

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

参见 QWhatsThis, QWidget::toolTip, and QWidget::statusTip.

width : const int

widget的宽, 不包括边框

有关窗口的几何尺寸参见 Window Geometry.

注意: Do not use this function to find the width of a screen on a multiple screen desktop. Read this note for details.

By default, this property contains a value that depends on the user's platform and screen geometry.

访问函数:

int width() const

参见 geometry, height, and size.

windowFilePath : QString

widget关联的文件路径

这个属性仅对窗口有意义. 它将文件路径与窗口关联. 如果你设置文件路径, 但是窗口没有标题, Qt会将窗口标题设置为指定路径的文件名, 这个文件名调用 QFileInfo::fileName()获取.

如果设置窗口标题, 则窗口标题优先显示, 而不会显示文件路径中的文件名.

此外, 在 macOS上, 还有一个额外的好处, 即文件路径存在时, 它可以设置窗口的 代理图标.

若没有设置文件路径, 这个属性值是空字符串.

这个属性默认值是空字符串.

This property was introduced in Qt 4.4.

访问函数:

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

参见 windowTitle and windowIcon.

windowFlags : Qt::WindowFlags

窗口标志是一个类型 (如. Qt::Dialog) 和0个或多个窗口系统标志 (如. Qt::FramelessWindowHint)组合.

如果widget的类型是 Qt::WidgetQt::SubWindow , 并变成一个窗口 (Qt::Window, Qt::Dialog, 等.), 则它在桌面的位置是 (0, 0). 如果widget是一个窗口, 变成 Qt::WidgetQt::SubWindow, 则它在父对象的位置是 (0, 0).

注意: 改变窗口标志时, 函数内部调用 setParent() , 它会导致widget隐藏. 你必须调用 show() 使widget再次显示..

访问函数:

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

参见 windowType(), setWindowFlag(), Window Flags Example.

windowIcon : QIcon

widget的图标

这个属性仅对窗口有意义. 如果没有设置图标, windowIcon()返回应用程序图标 (QApplication::windowIcon()).

注意: 在mac系统上, 窗口图标代表激活的文档, 除非调用setWindowFilePath()设置文件路径, 图标不会显示.

访问函数:

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

Notifier signal:

void windowIconChanged(const QIcon &icon)

参见 windowTitle.

windowModality : Qt::WindowModality

窗口的模态类型

这个属性仅对窗口有意义. 模态窗口可以阻止其他窗口获得任何输入. 这个属性值控制widget可见时, 阻止哪些窗口. 窗口可见时, 更改这个属性没有任何效果: 必须先调用hide()隐藏widget, 再调用show()显示widget.

这个属性的默认值是 Qt::NonModal.

This property was introduced in Qt 4.1.

访问函数:

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

参见 isWindow(), QWidget::modal, and QDialog.

windowModified : bool

窗口中显示的文档是否被修改(未保存).

已修改的窗口是指内容已修改, 但是未保存到磁盘的窗口. 这个标志根据平台不同, 产生不同的效果. 在 macOS 系统上, 关闭按钮具有已修改的样式; 其他平台上, 窗口标题带有 '*' (星号).

窗口标题必须包含一个 "[*]" 占位符, 这个占位符指明 '*' 应该显示在哪里. 通常, 它应该出现在文件名之后(如., "document1.txt[*] - Text Editor"). If the window isn't modified, the placeholder is simply removed.

注意: 如果widget设置为已修改, 那么它的所有祖先也被设置为已修改. 但是, 如果你调用 setWindowModified(false), 不会传播到父级, 因为父级的其他子级可能已被修改.

访问函数:

bool isWindowModified() const
void setWindowModified(bool)

参见 windowTitle, Application Example, SDI Example, and MDI Example.

windowOpacity : double

窗口不透明度.

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

这个属性的默认值是 1.0.

这个特性在嵌入式 Linux, macOS, Windows, X11 上可用, 这些平台支持复合扩展.

注意: 在X11上, 你需要一个运行的复合管理器, 且你使用的窗口管理器支持_NET_WM_WINDOW_OPACITY.

警告: 这个属性从不透明改为透明可能生成绘制事件, 在窗口正确显示之前, 你需要处理这个事件. 这个主要影响QScreen::grabWindow()的使用. 还要注意, 半透明窗口的更新和大小调整明显慢于不透明窗口.

访问函数:

qreal windowOpacity() const
void setWindowOpacity(qreal level)

参见 setMask().

windowTitle : QString

窗口标题

这个属性仅对顶层widget(如窗口和对话框)有意义. 如果这个属性没有设置, 则标题基于 windowFilePath. 如果两者都未设置, 则标题为空字符串.

如果使用 windowModified 机制, 则窗口标题必须包含一个 "[*]" 占位符, 这个占位符指示 '*' 应该出现在哪里. 通常,它应该出现在文件名之后 (如., "document1.txt[*] - Text Editor"). 如果 windowModified 属性为 false (默认值), 则会简单地删除占位符.

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

访问函数:

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

Notifier signal:

void windowTitleChanged(const QString &title)

参见 windowIcon, windowModified, and windowFilePath.

x : const int

widget相对于父对象的x坐标, 包括边框

See the Window Geometry documentation for an overview of geometry issues with windows.

这个属性的默认值是0.

访问函数:

int x() const

参见 frameGeometry, y, and pos.

y : const int

widget相对于父对象的y坐标, 包括边框

See the Window Geometry documentation for an overview of geometry issues with windows.

这个属性的默认值是0.

访问函数:

int y() const

参见 frameGeometry, x, and pos.

成员函数

QWidget::QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())

构造函数, parent 父对象指针, f widget标志.

如果 parent 是nullptr, 新创建的widget变成窗口. 如果 parent 是另一个widget, 新创建的widget变成 parent的子窗口. parent 删除时, 新创建的widget也会删除.

参数f默认是0, 但是它可以设置自定义的窗口标志 (即. parent 必须是nullptr). 若自定义参数f, 使用任意的窗口标志, 使用或组合 .

如果你在已经可见的widget上添加子widget, 你必须明确显示子widget.

注意: 在X11上, Qt可能无法提供所有标志的组合. 这是因为在X11上, Qt只能询问窗口管理器, 而窗口管理器可以覆盖应用程序的设置. 在Windows上, Qt可以设置任何你想设置的标志.

参见 windowFlags.

QWidget::~QWidget()

析构函数.

首先删除widget的所有子对象. 若widget是主窗口, 则应用程序退出.

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

widget的action发生改变, 调用这个函数.

参见 addAction(), insertAction(), removeAction(), actions(), QActionEvent.

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

返回widget的action列表, 可能为空.

参见 contextMenuPolicy, insertAction(), removeAction().

void QWidget::activateWindow()

将包含这个widget的顶级widget设置为活动窗口.

活动窗口是具有键盘输入焦点的可见顶层窗口.

这个函数的执行结果与在顶级窗口的标题栏上单击鼠标一样. 在X11上, 函数执行结果取决于窗口管理器. 如果你想确保窗口显示在上面, 你也应该调用 raise(). 注意: 窗口必须可见, 否则activateWindow()无效.

在Windows上, 如果你在应用程序当前不是活动窗口时调用此函数, 则它不会使其成为活动窗口. 它将更改任务栏条目的颜色, 以指示窗口以某种方式发生了更改. 这是因为Microsoft不允许应用程序中断用户当前在另一个应用程序中执行的操作.

参见 isActiveWindow(), window(), show(), QWindowsWindowFunctions::setWindowActivationBehavior().

void QWidget::addAction(QAction *action)

在widget的 action 列表增加action.

每个QWidget都具有 QAction列表, 它们可能是不同方式表示的图标. QAction 列表 ( actions()返回值) 的默认用途是创建上下文 QMenu.

QWidget 应该仅有一个相同的action, 添加相同的action不会导致widget执行两次action操作.

action 的所有权不会转移给 QWidget.

参见 removeAction(), insertAction(), actions(), QMenu.

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

actions追加到widget的action列表.

参见 removeAction(), QMenu, addAction().

void QWidget::adjustSize()

根据widget的内容调整大小.

sizeHint() 可用(即., 宽高 >= 0) 则这个函数使用sizeHint(). 否则, 它使用子级对象的区域 (覆盖所有子级对象, 子级对象的组合区域).

对于窗口, 也会考虑屏幕大小. 若 sizeHint() 小于(200, 100), 并且大小策略是 expanding, 则窗口最小是(200, 100). 窗口的最大值是屏幕宽高的2/3.

参见 sizeHint() 和 childrenRect().

QPalette::ColorRole QWidget::backgroundRole() const

返回widget的背景角色.

背景角色定义绘制widget背景的 调色板.

如果没有设置明确的背景角色, 则widget继承父widget的背景角色.

参见 setBackgroundRole() 和 foregroundRole().

QBackingStore *QWidget::backingStore() const

返回widget将要绘制的 QBackingStore.

This function was introduced in Qt 5.0.

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

处理widget状态改变事件.

The state being changed in this event can be retrieved through the event supplied.

改变事件包含: 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

返回widget坐标系中, 坐标点(x, y) 的可见子widget. 如果指定位置没有可见子widget, 则返回nullptr.

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

重载函数.

返回widget坐标系中, p 位置的可见子widget.

void QWidget::clearFocus()

移除widget键盘输入焦点.

若widget有激活焦点, focus out event 发送给widget, 告诉它已经失去焦点.

widget必须启用焦点设置, 才能获取键盘输入焦点, 即. 它必须调用 setFocusPolicy().

参见 hasFocus(), setFocus(), focusInEvent(), focusOutEvent(), setFocusPolicy(), QApplication::focusWidget().

void QWidget::clearMask()

清除 setMask()设置的掩码.

参见 setMask().

[slot] bool QWidget::close()

关闭widget. 若widget已经关闭, 返回 true; 否则返回 false.

首先, 它发给这个widget一个 QCloseEvent. 如果widget接受这个关闭事件, 这个widget 被隐藏. 如果 忽略 这个事件, 不会发生任何事情. QWidget::closeEvent() 默认实现接受关闭事件.

如果widget有 Qt::WA_DeleteOnClose 标识, 这个widget也会被删除. 不管widget是否可见, 关闭事件都会发到这个widget.

最后一个带有Qt::WA_QuitOnClose标识的可见的主窗口(即.窗口没有父对象)关闭时, 会发出 QApplication::lastWindowClosed() 信号. 默认情况下, 除临时窗口(如启动窗口, 工具窗口, 弹出菜单)外, 所有widget都具有Qt::WA_QuitOnClose属性.

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

Qt接收到来自窗口系统的顶级widget的窗口关闭请求时, 调用这个处理函数.

默认情况下, 事件被接受, widget被关闭. 你可以重新实现这个函数, 更改widget响应窗口关闭请求的方式. 例如, 可以通过对所有事件调用ignore()阻止窗口关闭.

主窗口应用程序通常重新实现这个函数, 在关闭前, 检查用户的工作是否已保存. 例如, Application Example 示例使用辅助函数确定是否关闭窗口:

  void MainWindow::closeEvent(QCloseEvent *event)
  {
      if (maybeSave()) {
          writeSettings();
          event->accept();
      } else {
          event->ignore();
      }
  }

参见 event(), hide(), close(), QCloseEvent, Application Example.

QMargins QWidget::contentsMargins() const

widget内容外边距.

This function was introduced in Qt 4.6.

参见 getContentsMargins(), setContentsMargins(), contentsRect().

QRect QWidget::contentsRect() const

widget的内容区域.

参见 setContentsMargins() 和 getContentsMargins().

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

虚函数, 重新实现接收widget的内容菜单事件.

当widget的 contextMenuPolicyQt::DefaultContextMenu时, 调用这个函数.

默认实现是忽略内容事件, 详见 QContextMenuEvent.

参见 event(), QContextMenuEvent, customContextMenuRequested().

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

创建一个新widget窗口.

Qt 5忽略参数 window, initializeWindow, destroyOldWindow. 调用 QWindow::fromWinId() 创建一个包装外部窗口的 QWindow , 并作为参数传递给 QWidget::createWindowContainer().

Initializes the window (sets the geometry etc.) if initializeWindow is true. If initializeWindow is false, no initialization is performed. This parameter only makes sense if window is a valid window.

Destroys the old window if destroyOldWindow is true. If destroyOldWindow is false, you are responsible for destroying the window yourself (using platform native code).

The QWidget constructor calls create(0,true,true) to create a window for this widget.

参见 createWindowContainer() and QWindow::fromWinId().

[static] QWidget *QWidget::createWindowContainer(QWindow *window, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())

创建一个 QWidget, 将 window 窗口嵌入基于 QWidget的应用程序中.

窗口容器作为 parent 的子对象创建, 并带有窗口标志 flags.

一旦窗口嵌入到容器中, 容器将控制窗口的几何尺寸和可见性. 不建议对嵌入式窗口直接调用 QWindow::setGeometry(), QWindow::show() 或 QWindow::hide().

容器接管 window的所有权. 调用 QWindow::setParent()从窗口容器删除窗口.

窗口容器作为本地子窗口附加到它所属的顶层窗口. 窗口容器作为QAbstractScrollAreaQMdiArea的子窗口时, 它将为父对象的每个widget创建一个原生窗口, 以便对窗口适当的堆叠和裁剪. 为窗口容器创建一个本地窗口也可以进行适当的堆叠和剪裁. 但是, 这必须在显示窗口容器之前完成. 具有许多本机子窗口的应用程序可能会出现性能问题.

窗口容器有许多已知的限制:

  • 堆叠顺序: 嵌入的窗口将作为不透明的框堆叠在widget层次结构的顶部. 多个重叠窗口容器实例的堆叠顺序未定义.
  • 渲染集成: 窗口容器不能与 QGraphicsProxyWidget, QWidget::render() 或类似功能进行互操作.
  • 焦点处理: 可以让窗口容器实例具有任何焦点策略, 调用 QWindow::requestActivate()将焦点委派给窗口. 然而, 从 QWindow 实例返回到正常的焦点链将取决于 QWindow 实例实现本身. 例如, 当进入具有选项卡焦点的基于Qt Quick的窗口时, 很可能进一步的选项卡按压只会在QML应用程序内循环. 此外, QWindow::requestActivate() 是否真的提供了窗口焦点, 取决于平台.
  • 在基于 QWidget的应用程序中使用许多窗口容器实例会极大地损害应用程序的整体性能.

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

This signal is emitted when the widget's contextMenuPolicy is Qt::CustomContextMenu, and the user has requested a context menu on the widget. The position pos is the position of the context menu event that the widget receives. Normally this is in widget coordinates. The exception to this rule is QAbstractScrollArea and its subclasses that map the context menu event to coordinates of the viewport().

参见 mapToGlobal(), QMenu, and contextMenuPolicy.

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

释放窗口系统资源. destroyWindow 是true时, 销毁widget窗口.

destroySubWindows是true时, 递归调用子widget的 destroy(). 这个函数通常在QWidget的析构函数调用.

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

正在进行拖拽, 且鼠标widget时, 会调用这个函数.

若忽略这个事件, widget不接受任何 拖拽移动事件.

如何提供拖拽功能, 参见 Drag-and-drop documentation.

参见 QDrag and QDragEnterEvent.

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

This event handler is called when a drag is in progress and the mouse leaves this widget. The event is passed in the event parameter.

See the Drag-and-drop documentation for an overview of how to provide drag-and-drop in your application.

参见 QDrag and QDragLeaveEvent.

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

正在进行拖动, 且出现以下任何情况时, 会调用这个函数: 光标进入widget, 光标在widget内移动, 或者widget具有焦点时, 按下键盘上的修改键.

如何提供拖拽功能, 参见 Drag-and-drop.

参见 QDrag and QDragMoveEvent.

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

拖拽离开widget时, 调用这个函数.

如何提供拖拽功能, 参见 Drag-and-drop.

参见 QDrag and QDropEvent.

WId QWidget::effectiveWinId() const

返回widget的有效窗口系统标识符, 即. 本地父窗口系统标识符.

如果widget是本地窗口, 则函数返回本地窗口ID. 否则, 返回第一个本地父窗口ID, 即., 包含widget的顶级窗口.

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

This function was introduced in Qt 4.4.

参见 nativeParentWidget().

void QWidget::ensurePolished() const

确保widget和它的子对象已经被 QStyle 修饰(即., 具有合适的字体和调色板).

QWidget 在完全构造后, 显示前调用这个函数. 如果你想确保执行操作前, 对widget修饰, 则调用此函数, 例如, 在 sizeHint() 中可能需要正确的字体大小. 注意: 这个函数在 sizeHint()的默认实现中调用.

在调用所有的构造函数(基类和子类)后, 再最终初始化, Polishing是非常有用.

widget已经polished后, 需要做一些设置, 重新实现 event() , 并处理 QEvent::Polish 事件类型.

注意: 这个函数被声明为const, 因此可以在其他const函数中调用它 (如., sizeHint()).

参见 event().

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

虚函数, 接收widget进入事件.

鼠标光标进入widget时, 调用这个函数.

参见 leaveEvent(), mouseMoveEvent(), event().

[virtual protected] bool QWidget::event(QEvent *event)

重新实现 QObject::event().

主要的事件处理函数. 你可以在子类中重新实现这个函数, 但是, 建议使用专门的事件处理程序.

键盘的按下和弹起不同于其他事件. event()检测Tab和Shift+Tab, 并尝试适当地移动焦点. 如果没有widget可以转移焦点(或者按键不是Tab或Shift+Tab), 则event()调用 keyPressEvent().

鼠标和平板电脑事件处理也有点特殊: 只有widget 启用时, 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的widget指针.

窗口标识符类型取决于底层窗口系统, 参考 qwindowdefs.h 了解实际定义. 如果没有具有此标识符的widget, 则返回nullptr.

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

虚函数, 处理键盘焦点事件

widget必须调用 setFocusPolicy() , 并设置 Qt::NoFocus 以外的值, 才能接收焦点事件(注意: 应用程序开发人员可以在任意widget上调用 setFocus() , 即便widget不接受焦点.)

默认事件更新widget(不设置 focusPolicy()的窗口除外).

参见 focusOutEvent(), setFocusPolicy(), keyPressEvent(), keyReleaseEvent(), event(), QFocusEvent.

[protected] bool QWidget::focusNextChild()

查找一个新widget, 以便转移焦点. 如Tab按键. 如果找到一个新widget, 返回true. 否则, 返回false.

参见 focusPreviousChild().

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

查找一个新widget, 以便转移焦点, 适用于Tab和Shift+Tab. 如果找到一个新widget, 返回true. 否则, 返回false.

如果next为true, 则向前搜索, 如果next是false, 则向后搜索.

有时, 你希望重新实现这个函数. 例如, web浏览器可能会重新实现向前或向后移动其"当前活动链接", 并仅在到达"页面"上的最后一个或第一个链接时调用focusNextPrevicChild().

子widget在其父widget上调用focusNextPrevidChild(), 但只有包含子widget的窗口决定将焦点重定向到哪里. 通过为对象重新实现这个函数, 你可以控制所有子widget的焦点遍历.

参见 focusNextChild() 和 focusPreviousChild().

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

丢失键盘焦点事件.

widget必须调用 setFocusPolicy() , 并设置 Qt::NoFocus 以外的值, 才能接收焦点事件(注意: 应用程序开发人员可以在任意widget上调用 setFocus() 即便widget不接受焦点.)

默认事件更新widget(不设置 focusPolicy()的窗口除外).

参见 focusInEvent(), setFocusPolicy(), keyPressEvent(), keyReleaseEvent(), event(), QFocusEvent.

[protected] bool QWidget::focusPreviousChild()

查找一个新widget, 以便转移焦点. 如Shift+Tab按键. 如果找到一个新widget, 返回true. 否则, 返回false.

参见 focusNextChild().

QWidget *QWidget::focusProxy() const

返回焦点代理widget, 若没有, 则返回nullptr.

参见 setFocusProxy().

QWidget *QWidget::focusWidget() const

返回最后一个调用 setFocus 的子widget. 对于顶级widget, 返回具有焦点的widget.

不同于 QApplication::focusWidget(), QApplication::focusWidget()返回活动窗口中, 具有焦点的widget.

QFontInfo QWidget::fontInfo() const

widget的字体信息. 等价于 QFontInfo(widget->font()).

参见 font(), fontMetrics(), and setFont().

QFontMetrics QWidget::fontMetrics() const

widget的字体规格. 等价于 QFontMetrics(widget->font()).

参见 font(), fontInfo(), setFont().

QPalette::ColorRole QWidget::foregroundRole() const

返回前景角色.

定义widget的 palette 中绘制前景的颜色.

如果未设置前景角色, 则函数返回与背景角色相对的角色.

参见 setForegroundRole() 和 backgroundRole().

void QWidget::getContentsMargins(int *left, int *top, int *right, int *bottom) const

Returns the widget's contents margins for left, top, right, and bottom.

参见 setContentsMargins() and contentsRect().

QPixmap QWidget::grab(const QRect &rectangle = QRect( QPoint( 0, 0 ), QSize( -1, -1 ) ))

把widget的 rectangle范围内的内容保存成QPixmap.

若rectangle是无效值(默认值), 则绘制整个widget.

注意: 这个函数可以通过元对象系统和QML调用. 参见Q_INVOKABLE

This function was introduced in Qt 5.0.

参见 render() and QPixmap.

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

Subscribes the widget to a given gesture with specific flags.

This function was introduced in Qt 4.6.

参见 ungrabGesture() and QGestureEvent.

void QWidget::grabKeyboard()

抓取键盘输入.

这个widget接收所有键盘事件, 直到调用 releaseKeyboard() 为止; 其他widget不会接收到键盘事件. 鼠标事件不受影响. 如果你想抓住鼠标事件, 可以调用 grabMouse().

焦点widget不受影响, 只是它不能接收到任何键盘事件. setFocus() 像往常一样移动焦点, 但新的焦点widget只有在调用 releaseKeyboard() 之后才会接收到键盘事件.

如果另一个widget当前正在获取键盘输入, 则会首先释放这个widget的抓取.

参见 releaseKeyboard(), grabMouse(), releaseMouse(), focusWidget().

void QWidget::grabMouse()

抓取鼠标输入.

这个widget接收所有鼠标事件, 直到调用 releaseMouse() 为止; 其他widget不会接收到鼠标事件. 键盘事件不受影响. 如果你想抓住键盘事件, 可以调用 grabKeyboard().

警告: 鼠标抓取应用程序中的错误经常会锁定终端. 使用这个函数时要格外小心, 并考虑在调试时使用 -nograb 命令行选项.

在使用Qt时, 几乎从来没有必要抓住鼠标, 因为Qt会明智地抓住并释放鼠标. 特别是, 当按下鼠标按钮时, Qt会抓住鼠标, 并一直保持到最后一个按钮释放.

注意: 只有可见的widget才能获取鼠标输入. 如果某个widget的 isVisible() 返回 false , 则这个widget无法调用grabMouse().

注意: 在Windows上, grabMouse()仅在鼠标位于进程拥有的窗口内时才起作用. 在 macOS上, grabMouse()只有当鼠标位于widget边框内时才起作用.

参见 releaseMouse(), grabKeyboard(), releaseKeyboard().

void QWidget::grabMouse(const QCursor &cursor)

grabMouse()重载函数.

抓取鼠标输入, 并更改鼠标形状.

鼠标光标改成cursor形状(只要鼠标焦点被抓住), 并且widget将是唯一一个接收鼠标事件的widget, 直到调用 releaseMouse() 为止.

警告: 抓取鼠标可能锁住终端.

Note: See the note in QWidget::grabMouse().

参见 releaseMouse(), grabKeyboard(), releaseKeyboard(), setCursor().

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

在Qt的快捷键系统中添加一个快捷键. 如果contextQt::ApplicationShortcut, 则快捷键应用于整个应用程序; 如果contextQt::WidgetShortcut, 则快捷键属于widget; 如果contextQt::WidgetShortcut, 则快捷键属于窗口. 若key被多个widget抓取, 则key快捷键发生时, QEvent::Shortcut事件以无序方式发送给所有的widget, 但是"ambiguous"标志设置为true.

警告: 你不应该使用这个功能; 相反, 你应该在创建QAction时, 指定快捷键(如果你也需要等效的菜单和工具栏按钮), 或者你仅创建QShortcut. QActionQShortcut都可以处理事件过滤, 并提供快捷键触发信号, 因此, 这比低级函数更容易使用.

参见 releaseShortcut() 和 setShortcutEnabled().

QGraphicsEffect *QWidget::graphicsEffect() const

返回QGraphicsEffect指针.

若没有, 返回nullptr.

This function was introduced in Qt 4.6.

参见 setGraphicsEffect().

QGraphicsProxyWidget *QWidget::graphicsProxyWidget() const

返回QGraphicsProxyWidget指针. 若没有, 返回nullptr.

This function was introduced in Qt 4.5.

参见 QGraphicsProxyWidget::createProxyForChildWidget() and QGraphicsScene::addWidget().

bool QWidget::hasEditFocus() const

widget是否有编辑焦点.

这个函数仅在嵌入式Linux系统有效.

参见 setEditFocus() 和 QApplication::keypadNavigationEnabled().

[virtual] bool QWidget::hasHeightForWidth() const

若widget的首选高度取决于高度, 返回true; 否则返回false.

This function was introduced in Qt 5.0.

[virtual] int QWidget::heightForWidth(int w) const

返回宽度w的适合高度.

若widget有布局, 默认实现是返回布局的适合高度. 若无布局, 默认实现返回-1, 表明适宜高度不由宽度决定.

[slot] void QWidget::hide()

隐藏widget. 这个函数等价于 setVisible(false).

注意: 如果你使用 QDialog 或QDialog的子类, 你调用完hide(), 再调用 show()时, 对话框显示在原始位置.

参见 hideEvent(), isHidden(), show(), setVisible(), isVisible(), and close().

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

widget隐藏事件.

widget隐藏后, 立即将隐藏事件发送给widget.

注意: widget被窗口系统改变映射状态时, 接收自发的显示和隐藏事件, 例如. 用户最小化窗口时, 生成一个自发的隐藏事件; 窗口还原时, 生成一个自发的显示事件. 接收到自发的隐藏事件后, widget仍然视为可见的, isVisible())返回true.

参见 visible, event(), QHideEvent.

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

初始化widget的 painter(笔, 背景和字体). 这个函数在QWidget打开painter时, 自动调用.

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

处理输入方法. 这个函数在输入方法状态改变时调用.

注意: 创建自定义文本编辑widget时, 窗口必须设置Qt::WA_InputMethodEnabled属性(调用setAttribute()), 以便接收输入方法事件.

默认实现调用event->ignore(), 忽略输入方法事件. 详见 QInputMethodEvent.

参见 event() and QInputMethodEvent.

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

这个函数与输入widget相关. 这个函数的作用是在具有复杂输入方法的widget(支持环形文字和重置)中查询query属性.

参见 inputMethodEvent(), QInputMethodEvent, QInputMethodQueryEvent, inputMethodHints.

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

在widget的action列表的before前插入action. 若before为空或无效, action追加到列表.

一个QWidget应该仅有一个相同的action.

参见 removeAction(), addAction(), QMenu, contextMenuPolicy, actions().

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

在widget的action列表的before前插入actions. 若before为空或无效, actions追加到列表.

一个QWidget应该仅有一个相同的action.

参见 removeAction(), QMenu, insertAction(), and contextMenuPolicy.

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

判断widget是否是child的父对象(或祖先对象), 这两个widget处于相同的window, 返回true; 否则返回false.

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

若启用ancestor, 且widget变为启用状态, 则返回true; 否则返回false.

ancestor外, widget及其每个父对象都没有显示禁用, 会出现这种情况.

若widget及其祖先对象被显示禁用, 则isEnabledTo(0)返回false.

ncestor指同一窗口中的父widget.

因此, isEnabledTo(0)局限在widget的窗口中, isEnabled()不同, 它会考虑父窗口.

参见 setEnabled() 和 enabled.

bool QWidget::isHidden() const

widget隐藏, 返回true, 否则返回false.

调用show()后, 隐藏的widget变为可见. 父对象显示时, 这个widget不会自动显示.

使用!isVisible(注意感叹号)判断可见性.

isHiddent() 等价于!isVisible(), 但是, 一个widget不能同时显示和隐藏. 父widget隐藏, 表明所有的子widget也是不可见的.

下列情况, widget是隐藏的:

  • 作为独立窗口创建,
  • 作为可见widget的子对象,
  • 调用hide() or setVisible(false).

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

ancestor可见, 且widget变为可见状态, 则返回true; 否则返回false.

ancestor外, widget及其每个父对象都不隐藏, isVisibleTo返回true.

如果widget被屏幕上的其他窗口遮挡, 这个函数仍返回true, 如果它或它们被移动, 则可能在物理上可见.

isVisibleTo(0)等价于isVisible().

参见 show(), hide(), isVisible().

bool QWidget::isWindow() const

如果widget是独立窗口, 则返回true, 否则返回false.

窗口通常有边框和窗口标题.

窗口可以有父widget. 它被父对象管理, 父对象删除时, 也会被删除; 父对象最小化时, 也会被最小化; 等等. 若窗口管理器支持, 它也可公用父对象的公共任务栏.

QDialogQMainWindow默认是窗口, 即便父对象是widget. 这个行为由Qt::Window指定.

参见 window(), isModal(), parentWidget().

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

处理键盘按下事件.

widget必须调用setFocusPolicy()接收焦点, 具有焦点才能接收键盘按键事件.

如果你重新实现这个函数, 你必须对不处理的按键事件调用基类实现.

用户按下QKeySequence::Cancel(标准键是Escape键)时, 默认实现是关闭弹出widget. 否则忽略事件, 以便父对象处理.

注意: 由于QKeyEvent处理时, 就表明isAccepted() == true, 因此你不需要调用QKeyEvent::accept()-只需要处理完按键事件后, 不调用基类实现.

参见 keyReleaseEvent(), setFocusPolicy(), focusInEvent(), focusOutEvent(), event(), QKeyEvent, Tetrix Example.

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

处理键盘释放事件.

widget必须初始状态时, 可接收焦点, 具有焦点才能接收键盘按键事件.

如果你重新实现这个函数, 你必须对不处理的按键事件调用基类实现.

默认实现忽略这个事件, 以便父widget处理.

注意: 由于QKeyEvent处理时, 就表明isAccepted() == true, 因此你不需要调用QKeyEvent::accept()-只需要处理完按键事件后, 不调用基类实现.

参见 keyPressEvent(), QEvent::ignore(), setFocusPolicy(), focusInEvent(), focusOutEvent(), event(), QKeyEvent.

[static] QWidget *QWidget::keyboardGrabber()

返回当前抓取键盘输入的widget.

若应用程序中没有widget抓取键盘输入, 返回nullptr.

参见 grabMouse() and mouseGrabber().

QLayout *QWidget::layout() const

返回widget的布局管理器, 若没有, 返回nullptr.

布局管理器设置加入布局的所有子widget的几何尺寸.

参见 setLayout(), sizePolicy(), Layout Management.

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

处理widget的离开事件.

鼠标光标离开widget时, 产生离开事件.

参见 enterEvent(), mouseMoveEvent(), event().

[slot] void QWidget::lower()

将widget排到父widget队列底部.

调用完这个函数后, 这个widget将显示在所有同级widget的后面.

参见 raise() 和 stackUnder().

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

parent坐标系中的坐标点pos转到widget坐标系. parent必须不为nullptr, 必须是调用widget的父对象.

参见 mapTo(), mapFromParent(), mapFromGlobal(), underMouse().

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

屏幕坐标系的坐标点pos转到widget坐标系.

参见 mapToGlobal(), mapFrom(), mapFromParent().

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

将父widget坐标系中的坐标点pos转到widget坐标系.

若widget没有父对象, 相当于mapFromGlobal().

参见 mapToParent(), mapFrom(), mapFromGlobal(), underMouse().

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

将widget坐标系的坐标点pos转到parent坐标系. parent必须不为nullptr, 必须是调用widget的父对象.

参见 mapFrom(), mapToParent(), mapToGlobal(), anda href="qwidget.html#underMouse">underMouse().

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

将widget坐标系的坐标点pos转到屏幕坐标系.

例如, mapToGlobal(QPoint(0,0)) 返回widget左上角在全局坐标系的坐标点.

参见 mapFromGlobal(), mapTo(), mapToParent().

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

将widget坐标系的坐标点pos转到父widget的坐标系.

若widget没有父对象, 相当于mapToGlobal().

参见 mapFromParent(), mapTo(), mapToGlobal(), underMouse().

QRegion QWidget::mask() const

返回widget当前的掩码设置. 若未设置掩码, 返回空QRegion.

参见 setMask(), clearMask(), QRegion::isEmpty(), Shaped Clock Example.

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

重新实现 QPaintDevice::metric().

内部实现调用QPaintDevice::metric().

m is the metric to get.

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

处理widget的鼠标双击事件.

默认实现调用mousePressEvent().

注意: 除双击事件外, widget还接收鼠标按下和鼠标释放事件. 若与widget重叠的另一个widget在响应鼠标按下或释放事件时, 消失, 这个widget将仅接收双击事件. 开发人员应确保应用程序正确处理这些事件.

参见 mousePressEvent(), mouseReleaseEvent(), mouseMoveEvent(), event(), QMouseEvent.

[static] QWidget *QWidget::mouseGrabber()

返回当前抓取鼠标事件的widget.

若应用程序中没有widget抓取鼠标事件, 则返回nullptr.

参见 grabMouse(), keyboardGrabber().

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

处理鼠标移动事件.

如果关闭鼠标追踪, 则只有在按下鼠标移动时, 才会产生鼠标移动事件. 如果开启鼠标追踪, 即使没有按下鼠标, 也会产生鼠标移动事件.

QMouseEvent::pos()返回相对于widget的鼠标位置. 对于鼠标按下和释放事件, 位置通常与上一次鼠标移动事件的位置相同, 但是, 如果用户的手抖动, 位置可能会有不同. 这是底层窗口系统的一个特性, 而不是Qt.

如果你想在鼠标移动时, 立即显示工具提示(如, 调用QMouseEvent::pos()获取鼠标坐标, 再显示工具提示), 则必须启用鼠标追踪. 然后, 为确保工具提示立即更新, 必须在mouseMoveEvent()的实现中调用QToolTip::showText(), 而不是setToolTip().

参见 setMouseTracking(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), event(), QMouseEvent, Scribble Example.

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

处理鼠标按下事件.

如果你在mousePressEvent()或mouseReleaseEvent()中创建新widget, widget可能无法出现在你期望的位置, 这取决于底层窗口系统(或X11窗口管理器), widget的区域或其他因素.

你点击窗口以外的区域时, 默认实现关闭弹出式窗口. 其他类型widget不会做任何事情.

参见 mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), event(), QMouseEvent, Scribble Example.

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

处理鼠标释放事件.

参见 mousePressEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), event(), QMouseEvent, Scribble Example.

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

重载函数.

等价于move(QPoint(x, y)).

Note: Setter function for property pos.

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

处理widget移动事件. widget接收到这个事件时, 已经移动到新位置.

调用QMoveEvent::oldPos()获取以前的位置.

参见 resizeEvent(), event(), move(), QMoveEvent.

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

处理原生系统平台事件.

重新实现这个函数, 如果你想停止事件传递给Qt处理, 返回true, 并设置result. result参数仅在Windows平台有用. 如果你返回false, 本地事件会传递给Qt, 这个事件会转成Qt事件, 并发送给widget.

注意: 只有widget是本地窗口, 才能接收到这个事件.

注意: 这个函数取代Qt4的x11Event(), winEvent()和macEvent().

PlatformEvent Type IdentifierMessage TypeResult Type
Windows"windows_generic_MSG"MSG *LRESULT

QWidget *QWidget::nativeParentWidget() const

返回widget的本地父窗口, 即. widget的下一个具有系统窗口id的祖先, 若widget没有任何本地父窗口, 返回nullptr.

This function was introduced in Qt 4.4.

参见 effectiveWinId().

QWidget *QWidget::nextInFocusChain() const

返回widget焦点链的下一个widget.

参见 previousInFocusChain().

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

设置窗口标志, 会告诉窗口系统.

警告: 除非你确切知道你在做什么, 否则不要调用这个函数.

参见 setWindowFlags().

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

重新实现 QPaintDevice::paintEngine().

返回widget的绘图引擎.

注意: 用户不应该显式调用这个函数, 因为这个函数仅用于重新实现. 它由Qt内部调用, 默认实现并不会总返回有效指针.

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

处理widget的绘制事件.

绘制事件要求重绘widget部分或全部. 它由以下因素产生:

  • 调用repaint() 或 update(),
  • widget之前被遮挡, 现在重新显示,
  • 其他原因.

重绘widget时, 许多widget可以简单地重绘整个界面, 但是一些速度较慢的widget优化后, 仅绘制请求区域: QPaintEvent::region(). 这种速度优化不会改变结果, 因为在事件处理过程中, 绘制会被裁剪到这个区域. 例如, QListViewQTableView.

Qt还试图将多个绘制事件合并为一个来加快绘制速度. 多次调用update()或窗口系统发送多个绘制事件时, Qt会将这些事件合并为一个具有较大区域的事件(参见QRegion::united()). repaint()函数不允许优化, 因此我们建议尽可能使用update().

绘制事件发生时, 更新区域通常已被擦除, 因此你正在widget的背景上绘制.

调用setBackgroundRole()和setPalette()设置背景().

从Qt 4.0开始, QWidget自动使用双缓冲绘制, 因此不需要在paintEvent()中编写双缓冲代码来避免闪烁.

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

警告: 如果使用没有Qt后台存储的自定义绘制引擎, 则必须设置Qt::WA_PaintOnScreen. 否则, 将永远不会调用QWidget::paintEngine; 使用后台存储替代.

参见 event(), repaint(), update(), QPainter, QPixmap, QPaintEvent, Analog Clock Example.

QWidget *QWidget::parentWidget() const

返回父widget, 若没有父widget, 返回nullptr.

QWidget *QWidget::previousInFocusChain() const

widget焦点链中的前一个widget.

This function was introduced in Qt 4.6.

参见 nextInFocusChain().

[slot] void QWidget::raise()

将widget提升到父widget队列顶部.

调用完这个函数后, 这个widget将显示在所有同级widget的前面.

注意: 调用 activateWindow()后, 你可以调用这个函数, 确保窗口显示在顶部.

参见 lower() 和 stackUnder().

void QWidget::releaseKeyboard()

释放键盘捕获.

参见 grabKeyboard(), grabMouse(), releaseMouse().

void QWidget::releaseMouse()

释放鼠标捕获.

参见 grabMouse(), grabKeyboard(), releaseKeyboard().

void QWidget::releaseShortcut(int id)

从Qt的快捷键系统移除快捷键id. widget不再接收快捷键的QEvent::Shortcut事件(除非hi有其他快捷键).

警告: 你应该不需要使用这个函数, 因为Qt在父widget销毁时, 会自动移除快捷键. 你应该使用QActionQShortcut处理快捷键, 它们更易于使用. 而且底层函数代价更高.

参见 grabShortcut(), setShortcutEnabled().

void QWidget::removeAction(QAction *action)

从widget的action列表中移除action.

参见 insertAction(), actions(), insertAction().

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

按照renderFlags标志, 将sourceRegion区域的内容绘制到target上, targetOffset是目标区域的起始点. 如下所示:

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

sourceRegin是空的, 函数调用QWidget::rect作为区域, 即. widget的整个区域.

渲染前, 若有正在绘制的内容, 应调用QPainter::end(), 确保所有内容绘制到目标区域:

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

Note: 注意: 想要获取QOpenGLWidget的内容, 使用QOpenGLWidget::grabFrameBuffer().

注意: 想要获取QGLWidget(已废弃)的内容, 使用QGLWidget::grabFrameBuffer()或QGLWidget::renderPixmap()

This function was introduced in Qt 4.3.

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

重载函数.

将widget绘制到painterQPainter::device().

Transformations and settings applied to the painter will be used when rendering.

注意: painter必须激活, 在macOS上, widget被保存到QPixmap, 然后被painter绘制.

参见 QPainter::device().

[slot] void QWidget::repaint()

除非禁用更新或widget隐藏, 调用这个函数会立即调用 paintEvent(), 直接重绘widget.

如果你需要立即重绘, 例如动画期间, 我们建议仅使用repaint(). 在大部分情况下, update() 更好, 因为它允许Qt优化速度, 并最大限度地减少闪烁.

警告: 如果你在 paintEvent()内部调用repaint(), 你可能无限递归. The update() 函数没有此问题.

参见 update(), paintEvent(), setUpdatesEnabled().

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

重载函数.

重绘widget的区域 (x, y, w, h).

If w is negative, it is replaced with width() - x, and if h is negative, it is replaced width height() - y.

void QWidget::repaint(const QRect &rect)

重载函数.

重绘widget的区域 rect.

void QWidget::repaint(const QRegion &rgn)

重载函数.

重绘widget的区域 rgn.

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

重载函数.

相当于 resize(QSize(w, h)).

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

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

处理widget调整大小事件. 调用resizeEvent()前, widget已有新的尺寸. 调用QResizeEvent::oldSize()获取以前的大小.

大小调整事件后, 立即擦除widget, 并生成绘制事件. 不需要(或不应该)在函数中再次绘制.

参见 moveEvent(), event(), resize(), QResizeEvent, paintEvent(), Scribble Example.

bool QWidget::restoreGeometry(const QByteArray &geometry)

从参数geometry中还原顶级widget的几何尺寸和状态. 若成功, 返回true; 否则, 返回false.

If the restored geometry is off-screen, it will be modified to be inside the available screen geometry.

若存储在QSettings中, 你可以使用如下代码:

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

See the Window Geometry documentation for an overview of geometry issues with windows.

调用 QMainWindow::restoreState(), 还原工具条和停靠widget的几何尺寸和状态.

This function was introduced in Qt 4.2.

参见 saveGeometry(), QSettings, QMainWindow::saveState(), and QMainWindow::restoreState().

QByteArray QWidget::saveGeometry() const

保存顶级widget的当前几何尺寸和状态.

若在窗口关闭时, 保存几何尺寸, 你可以在closeEvent()实现如下代码:

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

See the Window Geometry documentation for an overview of geometry issues with windows.

调用 QMainWindow::saveState(), 保存工具条和停靠widget的几何尺寸和状态.

This function was introduced in Qt 4.2.

参见 restoreGeometry(), QMainWindow::saveState(), QMainWindow::restoreState().

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

滚动widget, 向右滚动dx像素, 向下滚动dy像素. dxdy可能为负值.

滚动后, widget将接收到绘制事件, 重绘需要绘制的区域. 若是不透明窗口, Qt仅更新新暴露的部分. 例如, 若一个不透明的widget向左滚动8个像素, 那么只有右边缘的8个像素宽的区域需要更新.

由于widget默认情况下传播父对象的内容, 因此你需要设置autoFillBackground属性, 或调用setAttribute(), 参数使用Qt::WA_OpaquePaintEvent, 设置widget为不透明.

对于使用内容传播的widget, 滚动将更新整个区域.

参见 Transparency and Double Buffering.

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

重载函数.

这个函数仅滚动r区域, 不移动子widget.

r是空的或无效的, 则结果未定义.

参见 QScrollArea.

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

ontrue, 设置attribute属性; 否则, 清除属性.

参见 testAttribute().

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

设置widget的背景角色role.

背景角色定义widget的调色板画刷palette, 用于渲染背景.

roleQPalette::NoRole, widget继承父对象的背景角色.

注意: 样式可以自由选择调色板的任意颜色. 如果调用setBackgroundRole()无法得到你想要的结果, 则你可以修改调色板或设置样式表.

参见 backgroundRole() and foregroundRole().

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

重载函数.

等价于 setBaseSize(QSize(basew, baseh)). 设置widget的 基本宽度basew 和基本高度 baseh.

注意: 这个函数是属性baseSize的设置函数.

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

设置widget内容的外边距. 外边距用于布局系统, 可能被子类用于在特定区域绘制 (如. 不包含边框).

改变外边距将触发 resizeEvent().

参见 contentsMargins(), contentsRect(), getContentsMargins().

void QWidget::setContentsMargins(const QMargins &margins)

重载函数.

设置widget内容的外边距. 外边距用于布局系统, 可能被子类用于在特定区域绘制 (如. 不包含边框).

改变外边距将触发 resizeEvent().

This function was introduced in Qt 4.6.

参见 contentsRect() and getContentsMargins().

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

disable 是true, 禁止widget输入事件; 否则, 启用输入事件.

详见 enabled.

参见 isEnabledTo(), QKeyEvent, QMouseEvent, and changeEvent().

void QWidget::setEditFocus(bool enable)

enabletrue, widget具有编辑焦点, Qt::Key_UpQt::Key_Down会分发到widget; 否则, Qt::Key_UpQt::Key_Down不会改变焦点.

这个特性仅在嵌入式Linux有效.

参见 hasEditFocus(), QApplication::keypadNavigationEnabled().

void QWidget::setFixedHeight(int h)

同时设置widget的最小高度, 最大高度, 且不改变宽度.

参见 sizeHint(), minimumSize(), maximumSize(), setFixedSize().

void QWidget::setFixedSize(const QSize &s)

同时设置widget的最小宽高, 最大宽高, 限制改变宽高.

这会覆盖QLayout的默认大小限制.

设置大小为QWIDGETSIZE_MAX会移除限制.

若你希望widget根据内容有固定的大小, 你可以调用QLayout::setSizeConstraint(QLayout::SetFixedSize);

参见 maximumSize, minimumSize.

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

重载函数.

设置widget的宽高.

void QWidget::setFixedWidth(int w)

同时设置widget的最小宽度, 最大宽度, 且不改变高度.

参见 sizeHint(), minimumSize(), maximumSize(), setFixedSize().

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

若widget或它的父对象之一是激活窗口, 则把键盘的输入焦点设给widget (或它的焦点代理). 参数 reason 表示接受何种焦点事件. 若窗口是未激活状态, 则窗口激活时, widget获取焦点.

首先, 焦点改变事件发送给当前焦点widget(如果有), 告诉它将要失去焦点. 然后, 更改焦点, 将焦点从上一个焦点widget移除, 移入到新的widget, 并告知它收到焦点. (如果焦点进入和移出widget相同, 则不会发生任何事情.)

注意: 在嵌入式平台, setFocus() 不会打开输入面板. 如果你希望调出输入面板, 则你必须向widget发送一个QEvent::RequestSoftwareInputPanel事件.

不管焦点策略是什么, setFocus()设置widget焦点, 但是不清除键盘抓取(参见grabKeyboard()).

注意: widget隐藏时, 无法接收焦点, 只有显示时才可以.

警告:focusOutEvent()或focusInEvent()中调用setFocus(), 可能无限递归.

参见 hasFocus(), clearFocus(), focusInEvent(), focusOutEvent(), setFocusPolicy(), focusWidget(), QApplication::focusWidget(), grabKeyboard(), grabMouse(), Keyboard Focus in Widgets, QEvent::RequestSoftwareInputPanel.

[slot] void QWidget::setFocus()

重载函数.

如果widget或父对象之一是激活窗口, 则键盘输入将提供给这个widget(或它的焦点代理).

void QWidget::setFocusProxy(QWidget *w)

设置widget的焦点代理w. 若w是nullptr, 函数重置widget为无代理.

某些widget可以"具有焦点", 但是需要创建一个实际处理焦点的子widget, 如QLineEdit. 这样, 这个widget可以设置QLineEdit作为焦点代理.

widget得到焦点时, 调用setFocusProxy()设置的widget真正得到焦点. 若设置焦点代理, setFocus()和hasFocus()作用于焦点代理. 若这个widget是焦点widget, 则调用setFocusProxy()会将焦点移动到新的焦点代理.

参见 focusProxy().

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

设置widget的前景角色 role.

前景角色定义widget的调色板palette画刷, 用于渲染前景.

roleQPalette::NoRole, widget继承父对象的前景角色.

注意: 样式可以自由选择调色板的任意颜色. 如果调用setForegroundRole()无法得到你想要的结果, 则你可以修改调色板或设置样式表.

参见 foregroundRole(), backgroundRole().

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

重载函数.

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

注意: 这个函数是geometry属性的设置函数.

void QWidget::setGraphicsEffect(QGraphicsEffect *effect)

设置widget的图形特效.

若widget已存在一个特效, QWidget在初始化新特效前, 删除已存在的特效.

若特效已经在其他widget上初始化, setGraphicsEffect()将从其他widget上移除, 然后初始化在这个widget上.

QWidget具有特效的所有权.

注意: 这个函数将在它和所有子级上应用特效.

注意: 基于OpenGL的widget不支持图形特效, 如QGLWidget, QOpenGLWidget, QQuickWidget.

This function was introduced in Qt 4.6.

参见 graphicsEffect().

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

widget显隐, 等价于 setVisible(!hidden).

参见 isHidden().

void QWidget::setLayout(QLayout *layout)

设置widget的布局管理器 layout.

若widget已初始化一个布局管理器, QWidget不能初始化另一个. 在调用setLayout()设置新布局管理器前, 你必须删除已存在的布局管理器(调用layout()).

layout是其他widget的布局管理器, 调用setLayout()将重置它的父对象, 使布局管理器管理当前widget.

例如:

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

你也可以在调用布局管理器时, 传入这个widget.

QWidget 具有布局管理器layout的所有权.

参见 layout(), Layout Management.

void QWidget::setMask(const QBitmap &bitmap)

bitmap为1的对应widget的像素可见. 若像素区域超出widget的rect(), 则窗口系统控制超出部分是否可见, 具体取决于平台.

注意: 若区域很复杂, 会影响性能.

如下代码显示如何使用带有alpha通道的图像为widget生成遮罩:

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

上述代码仅显示不规则的图像.

蒙层widget仅在可见区域接收鼠标事件.

参见 mask(), clearMask(), windowOpacity(), Shaped Clock Example.

void QWidget::setMask(const QRegion &region)

重载函数.

region区域的widget可见. 若region区域超出widget的rect(), 则窗口系统控制超出部分是否可见, 具体取决于平台.

注意: 若区域很复杂, 会影响性能.

参见 windowOpacity.

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

重载函数.

这个函数等价于setMaximumSize(QSize(maxw, maxh)).

注意: 这个函数是属性 maximumSize的设置函数.

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

重载函数.

这个函数等价于setMinimumSize(QSize(minw, minh)).

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

void QWidget::setParent(QWidget *parent)

设置widget的父对象, 并重置窗口标志. widget被移动到父对象的(0,0)位置.

若新的父widget在不同的窗口, 则重置父对象的widget和它的子对象按照之前的顺序添加到新的父widget的Tab链表末尾. If one of the moved widgets had keyboard focus, setParent() calls clearFocus() for that widget.

若新的父widget与旧的父widget属于同一个窗口, 重置父对象不会改变Tab顺序和键盘焦点.

若新的父widget与旧的父widget相同, 则这个函数不起任何作用.

注意: 更改父对象, widget将变为不可见, 即使之前可见. 你必须调用show()才能使widget再次可见.

警告: 你不太可能需要这个功能. 如果你需要动态改变widget, 则使用QStackedWidget更合适.

参见 setWindowFlags().

void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)

重载函数.

这个函数也会设置widget标识f.

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

enableture, 则自动重复快捷键; 否则禁用.

This function was introduced in Qt 4.2.

参见 grabShortcut() and releaseShortcut().

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

enabletrue, 则启用快捷键; 否则禁用.

警告: 你通常不需要调用这个函数, widget隐藏/显示或者失去/得到焦点时, Qt自动禁用/启用快捷键. 最好使用QActionQShortcut处理快捷方式, 这两个类比低级函数更容易使用.

参见 grabShortcut(), releaseShortcut().

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

重载函数.

设置宽高的增加量.

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

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

重载函数.

设置widget的水平和垂直拉伸策略.

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

参见 QSizePolicy::QSizePolicy().

void QWidget::setStyle(QStyle *style)

设置widget的GUI样式. 样式对象的所有权不会转移.

若没有设置样式, 则widget使用应用程序的样式, QApplication::style().

设置widget的样式不会影响已存在或以后的子widget.

警告: 这个函数在演示时特别有用, 你可以在演示中展示Qt的样式功能. 实际的应用程序应该避免它, 而是使用统一的GUI样式.

警告: Qt样式表不支持自定义QStyle子类, 我们计划在后续版本支持.

参见 style(), QStyle, QApplication::style(), QApplication::setStyle().

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

改变widget的焦点顺序, 将second放在first之后.

注意: 由于second的Tab顺序发生改变, 你应该以如下方式排序焦点链:

  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

firstsecond有焦点代理, setTabOrder()可以正确处理代理.

注意: 从Qt5.10开始, 一个具有焦点代理的widget视为一个复合widget. 在一个复合widget设置tab顺序时, 保留每个widget的内部tab顺序. 这意味着, 如果两个widget都是复合widget, 则生成的顺序是从第一个widget的最后一个子widget到第二个widget的第一个子widget

参见 setFocusPolicy(), setFocusProxy(), Keyboard Focus in Widgets.

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

ontrue, 设置窗口标志; 否则, 清除标志.

This function was introduced in Qt 5.9.

参见 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);

调用这个函数将隐藏widget. 你必须调用show()使widget重见.

Note: On some window systems Qt::WindowActive is not immediate, and may be ignored in certain cases.

窗口状态改变时, widget收到changeEvent(), 类型是QEvent::WindowStateChange.

参见 Qt::WindowState, windowState().

void QWidget::setupUi(QWidget *widget)

设置特定的用户界面.

注意: 这个函数用于使用派生自uic创建的用户界面的widget.

参见 Using a Designer UI File in Your Application.

[slot] void QWidget::show()

显示widget和它的子级.

这个函数等价于调用 showFullScreen(), showMaximized(), setVisible(true), 具体取决于平台对于窗口标志的默认行为.

参见 raise(), showEvent(), hide(), setVisible(), showMinimized(), showMaximized(), showNormal(), isVisible(), windowFlags().

[virtual protected] void QWidget::showEvent(QShowEvent *event)

widget的显示事件.

非自发的显示事件在显示前, 立即发送给widget. 自发的显示事件在显示后分发.

注意: 窗口系统改变映射状态时, 一个widget接收自发的显示和隐藏事件. 如. 用户最小化窗口时, 生成一个自发的隐藏事件, 还原窗口时, 生成一个自发的显示事件. 收到一个自发的隐藏事件时, 一个widget可能仍然时可见的, isVisible()返回true.

参见 visible, event(), QShowEvent.

[slot] void QWidget::showFullScreen()

全屏显示widget.

调用这个函数仅影响 窗口.

调用 showNormal()退出全屏模式.

全屏模式在windows上运行良好, 但是在X系统上存在一些问题. 这些问题由于X11客户端和窗口管理器之间通信的ICCCM协议限制. ICCCM无法理解无装饰的全屏窗口概念. 因此, 最好的方案是请求一个无边界的窗口, 并放置, 调整大小, 使其充棉全屏. 根据窗口管理器的不同, 这可能起作用, 也可能不起作用. 无边界窗口是使用MOTIF提示请求的, 所有现代窗口管理器都至少部分支持MOTIF提示.

另一种选择是完全绕过窗口管理器, 创建一个带有 Qt::X11BypassWindowManagerHint 标志的窗口. 不过, 这还有其他严重的问题, 比如键盘焦点完全断裂, 桌面更改或用户打开其他窗口时会产生非常奇怪的影响.

遵循现代post-ICCCM规范的X11窗口管理器正确地支持全屏模式.

参见 showNormal(), showMaximized(), show(), hide(), isVisible().

[slot] void QWidget::showMaximized()

最大化显示widget.

调用这个函数仅影响 窗口.

在X11上, 这个函数可能与某些窗口管理器正常工作. 参见 Window Geometry.

参见 setWindowState(), showNormal(), showMinimized(), show(), hide(), isVisible().

[slot] void QWidget::showMinimized()

最小化widget, 成为任务栏图标.

调用这个函数仅影响 窗口.

参见 showNormal(), showMaximized(), show(), hide(), isVisible(), isMinimized().

[slot] void QWidget::showNormal()

最大化或最小化后, 还原widget.

调用这个函数仅影响 窗口.

参见 setWindowState(), showMinimized(), showMaximized(), show(), hide(), isVisible().

void QWidget::stackUnder(QWidget *w)

在父widget的窗口堆栈中, 将widget放在w的后面.

widget必须与w属于兄弟对象.

参见 raise(), lower().

QStyle *QWidget::style() const

参见 QWidget::setStyle(), QApplication::setStyle(), QApplication::style().

[virtual protected] void QWidget::tabletEvent(QTabletEvent *event)

接收平板事件.

重新实现这个函数时, 若你不处理它, 最好调用ignore(), 让父widget处理.

默认实现忽略这个事件.

如果禁用平板电脑跟踪(默认设置), 则只有当触控笔与平板电脑接触时, 或者在移动触控笔时按下至少一个触控笔按钮时, widget才会接收平板电脑移动事件. 如果启用平板电脑跟踪, 即使在附近悬停时, widget也会接收平板电脑移动事件.

参见 QEvent::ignore(), QEvent::accept(), event(), setTabletTracking(), QTabletEvent.

bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const

若设置widget的attribute属性, 返回true; 否则返回false.

参见 setAttribute().

bool QWidget::underMouse() const

若widget在鼠标下方, 返回true; 否则返回false.

在拖拽时, 这个属性值不更新.

参见 enterEvent(), leaveEvent().

void QWidget::ungrabGesture(Qt::GestureType gesture)

取消抓取widget的手势类型gesture

This function was introduced in Qt 4.6.

参见 grabGesture(), QGestureEvent.

[slot] void QWidget::update()

除禁用更新或隐藏widget外, 更新widget.

这个函数不会立即重绘; Qt返回主事件循环时, 它调度绘制事件. 这种方式运行Qt优化性能, 获得比 repaint() 更高的速度和更少的闪烁.

多次调用update(), 仅调用一次 paintEvent().

调用 paintEvent() 之前, Qt通常会清除widget的区域. 如果 Qt::WA_OpaquePaintEvent 的属性设置Qt::WA_OpaquePaintEvent, widget采用不透明的颜色绘制所有像素.

参见 repaint(), paintEvent(), setUpdatesEnabled(), Analog Clock Example.

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

重载函数.

更新widget的区域(x, y, w, h).

void QWidget::update(const QRect &rect)

重载函数.

更新widget的区域rect.

void QWidget::update(const QRegion &rgn)

重载函数.

更新widget的区域rgn.

void QWidget::updateGeometry()

通知布局系统, widget已经改变, 可能需要更改几何尺寸.

sizeHint() 或 sizePolicy() 更改, 则调用这个函数.

对于隐藏widget, updateGeometry()无效; 布局系统在widget显示时通知.

[protected slot] void QWidget::updateMicroFocus()

更新widget的micro focus.

QRegion QWidget::visibleRegion() const

返回绘制事件发生时, 未绘制的区域.

对于可见widget, 这是其他widget未覆盖区域的近似值; 否则, 这是一个空白区域.

若必要, repaint()函数调用这个函数, 因此你通常不需要调用它.

[virtual protected] void QWidget::wheelEvent(QWheelEvent *event)

widget的滚轮事件.

如果你重新实现这个函数, 不处理事件时, 调用ignore(), 则父widget会处理这个事件.

默认实现忽略这个事件.

参见 QEvent::ignore(), QEvent::accept(), event(), QWheelEvent.

WId QWidget::winId() const

返回widget的原生窗口系统标识符.

原则上, 这个函数是可移植的, 但如果你使用它, 你可能会做一些不可移植的事情.

若widget是非本地(alien), 调用winId()后, 则这个widget将提供一个原生窗口句柄.

这个值可能在运行时改变. 在窗口系统标识符更改后, widget会收到QEvent::WinIdChange事件.

参见 find().

QWidget *QWidget::window() const

返回widget的窗口, 即. 有窗口系统边框的祖先widget.

若这个widget是窗口, 返回自身.

如下所示, 标准用法是修改窗口标题:

  aWidget->window()->setWindowTitle("New Window Title");

参见 isWindow().

QWindow *QWidget::windowHandle() const

若widget是本地窗口, 返回关联QWindow. 否则返回nullptr.

本地widget包括顶级widget, QGLWidget, 调用winId()的子widget.

This function was introduced in Qt 5.0.

参见 winId().

[signal] void QWidget::windowIconChanged(const QIcon &icon)

更改窗口图标时发出这个信号, 参数 icon 是新图标.

This function was introduced in Qt 5.2.

注意: 这个函数是属性 windowIcon的通知信号.

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 是新标题.

This function was introduced in Qt 5.2.

注意: 这个函数属性 windowTitle的通知信号.

Qt::WindowType QWidget::windowType() const

返回窗口类型. 等价于windowFlags() & Qt::WindowType_Mask.

参见 windowFlags.

QWIDGETSIZE_MAX

定义QWidget的最大尺寸.

widget的最大尺寸是 QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX), 即. QSize (16777215,16777215).

参见 QWidget::setMaximumSize().