QWidget Class
QWidget 类是所有用户界面对象的基类。更多
头文件: | #include <QWidget> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
继承: | QObject 和QPaintDevice |
继承于 | 39 类型QAbstractButton QTabWidget QToolBar,QAbstractSlider,QAbstractSpinBox,QCalendarWidget,QComboBox,QDesignerActionEditorInterface,QDesignerFormWindowInterface,QDesignerObjectInspectorInterface,QDesignerPropertyEditorInterface,QDesignerWidgetBoxInterface,QDialog,QDialogButtonBox,QDockWidget,QFocusFrame,QFrame,QGroupBox,QHelpFilterSettingsWidget,QHelpSearchQueryWidget,QHelpSearchResultWidget,QKeySequenceEdit,QLineEdit,QMainWindow,QMdiSubWindow,QMenu,QMenuBar,QOpenGLWidget,QProgressBar,QQuickWidget,QRhiWidget,QRubberBand,QSizeGrip,QSplashScreen,QSplitterHandle,QStatusBar,QSvgWidget,QTabBar, xml-ph-QWizardPage |
公共类型
enum | RenderFlag { DrawWindowBackground, DrawChildren, IgnoreMask } |
flags | RenderFlags |
属性
|
|
公共函数
QWidget(QWidget*parent= nullptr, Qt::WindowFlagsf= Qt::WindowFlags()) | |
虚拟 | ~QWidget() |
bool | acceptDrops()常量 |
QString | accessibleDescription() const |
QString | accessibleIdentifier() const |
QString | accessibleName()常量 |
QList<QAction *> | actions()常数 |
void | activateWindow() |
void | addAction(QAction*action) |
(since 6.3) QAction * 动作 | addAction(const QString&text) |
(since 6.3) QAction * (const QIcon &icon, const QString &text) | addAction(const QIcon&icon, const QString&text) |
(since 6.3) 动作 | addAction(const QString&text, const QKeySequence&shortcut) |
(since 6.3) 动作 | addAction(const QIcon&icon, const QString&text, const QKeySequence&shortcut) |
(since 6.3) 动作 | addAction(const QString&text, Args &&...args) |
(since 6.3) QAction * (const QString &text, Args &&... args) | addAction(const QIcon&icon, const QString&text, Args &&...args) |
(since 6.3) 动作 | addAction(const QString&text, const QKeySequence&shortcut, Args &&...args) |
(since 6.3) 动作 | addAction(const QIcon&icon, const QString&text, const QKeySequence&shortcut, Args &&...args) |
(since 6.3) QAction * (const QIcon &icon) | addAction(const QString&text, const QObject*receiver, const char*member, Qt::ConnectionTypetype= Qt::AutoConnection) |
(since 6.3) QAction * (const QIcon &icon) | 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()常量 |
QBackingStore * | backingStore()常量 |
QSize | baseSize()常量 |
QWidget * (int x, int y) | childAt(intx, inty) const |
QWidget * (const QPoint &p) | childAt(const QPoint&p) const |
(since 6.8) QWidget * (const QPointF &p) | childAt(const QPointF&p) const |
QRect | childrenRect() const |
QRegion | childrenRegion() const |
void | clearFocus() |
void | clearMask() |
QMargins | contentsMargins() const |
QRect | contentsRect()常量 |
Qt::ContextMenuPolicy | contextMenuPolicy()常量 |
QCursor | cursor()常量 |
WId | effectiveWinId()常量 |
void | ensurePolished()常量 |
Qt::FocusPolicy | focusPolicy()常量 |
QWidget * | focusProxy()常量 |
QWidget * ( | focusWidget()常量 |
const QFont & | font() const |
QFontInfo | fontInfo()常量 |
QFontMetrics | fontMetrics()常量 |
QPalette::ColorRole | foregroundRole() 常量 |
QRect | frameGeometry()常量 |
QSize | frameSize()常量 |
const QRect & | geometry() const |
QPixmap | grab(const QRect&rectangle= QRect(QPoint(0, 0), QSize(-1, -1))) |
void | grabGesture(Qt::GestureTypegesture, Qt::GestureFlagsflags= Qt::GestureFlags()) |
void | grabKeyboard() |
void | grabMouse() |
void | grabMouse(const QCursor&cursor) |
鍵 | grabShortcut(const QKeySequence&key, Qt::ShortcutContextcontext= Qt::WindowShortcut) |
QGraphicsEffect * | graphicsEffect()常量 |
QGraphicsProxyWidget * () | graphicsProxyWidget()常量 |
bool | hasEditFocus()常量 |
bool | hasFocus()常量 |
虚拟 bool | hasHeightForWidth() const |
bool | hasMouseTracking() const |
bool | hasTabletTracking() const |
int | height() const |
虚拟 int | heightForWidth(intw) const |
Qt::InputMethodHints | inputMethodHints()常量 |
虚拟 QVariant | inputMethodQuery(Qt::InputMethodQuery query) const |
void | insertAction(QAction*before, QAction*action) |
常量(Qt::InputMethodQuery query | insertActions(QAction*before, const QList<QAction *>&actions) |
bool | isActiveWindow()常量 |
bool | isAncestorOf(const QWidget*child) const |
bool | isEnabled() const |
bool | isEnabledTo(const QWidget*ancestor) const |
bool | isFullScreen() const |
bool | isHidden()常量 |
bool | isMaximized() const |
bool | isMinimized() const |
bool | isModal() const |
bool | isVisible() const |
bool | isVisibleTo(const QWidget*ancestor) const |
bool | isWindow() const |
bool | isWindowModified()常量 |
QLayout * | layout() const |
Qt::LayoutDirection | layoutDirection()常量 |
QLocale | locale()常量 |
(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()常量 |
虚拟 QSize | minimumSizeHint() const |
int | minimumWidth()常量 |
void | move(const QPoint &) |
void | move(intx, inty) |
QWidget * | nativeParentWidget()常量 |
QWidget * | nextInFocusChain()常量 |
QRect | normalGeometry()常量 |
void | overrideWindowFlags(Qt::WindowFlagsflags) |
const QPalette & | palette() const |
QWidget * | parentWidget()常量 |
QPoint | pos常数 |
QWidget * ( | previousInFocusChain() const |
QRect | rect()常数 |
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(const QSize &) |
void | resize(intw, inth) |
bool | restoreGeometry(const QByteArray&geometry) |
QByteArray | saveGeometry()常数 |
QScreen * | screen()常数 |
void | scroll(intdx, intdy) |
void | scroll(intdx, intdy, const QRect&r) |
void | setAcceptDrops(boolon) |
void | setAccessibleDescription(const QString&description) |
void | setAccessibleIdentifier(const QString&identifier) |
void | setAccessibleName(const QString&name) |
void | setAttribute(Qt::WidgetAttributeattribute, boolon= true) |
void | setAutoFillBackground(boolenabled) |
void | setBackgroundRole(QPalette::ColorRolerole) |
void | setBaseSize(const QSize &) |
void | setBaseSize(intbasew, intbaseh) |
void | setContentsMargins(int左,int上,int右,int下) |
void | setContentsMargins(const QMargins&margins) |
void | setContextMenuPolicy(Qt::ContextMenuPolicypolicy) |
void | setCursor(const QCursor &) |
void | setEditFocus(boolenable) |
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::ColorRolerole) |
void | setGeometry(const QRect &) |
void | setGeometry(intx, inty, intw, inth) |
void | setGraphicsEffect(QGraphicsEffect*effect) |
void | setInputMethodHints(Qt::InputMethodHints hints) |
void | setLayout(QLayout*layout) |
void (Qt::InputMethodHints) | setLayoutDirection(Qt::LayoutDirectiondirection) |
void | setLocale(const QLocale&locale) |
void | setMask(const QBitmap&bitmap) |
void | setMask(const QRegion®ion) |
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::水平策略、QSizePolicy::垂直策略) |
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::WindowTypeflag, boolon= true) |
void | setWindowFlags(Qt::WindowFlagstype) |
void | setWindowIcon(const QIcon&icon) |
void | setWindowModality(Qt::WindowModality窗口模式) |
void | setWindowOpacity(qreallevel) |
void | setWindowRole(const QString&role) |
void | setWindowState(Qt::WindowStateswindowState) |
void | setupUi(QWidget*widget) |
QSize | size()常量 |
虚拟 QSize | sizeHint()常量 |
虚拟 QSize | sizeIncrement()常量 |
QSizePolicy | sizePolicy()常量 |
void | stackUnder(QWidget*w) |
QString | statusTip()常量 |
QStyle * | style()常量 |
QString | styleSheet() const |
bool | testAttribute(Qt::WidgetAttribute属性) 常量 |
QString | toolTip()常量 |
int | toolTipDuration()常量 |
bool | underMouse()常量 |
void | ungrabGesture(Qt::GestureTypegesture) |
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()常量 |
QWidget * | window() const |
QString | windowFilePath()常量 |
Qt::WindowFlags | windowFlags()常量 |
QWindow * 窗口 | windowHandle()常量 |
QIcon | windowIcon()常量 |
Qt::WindowModality | windowModality()常量 |
qreal | windowOpacity()常量 |
QString | windowRole()常數 |
Qt::WindowStates | windowState()常量 |
QString | windowTitle()常量 |
Qt::WindowType | windowType()常量 |
int | x() const |
int | y()常量 |
重新实现的公共函数
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) |
重新实现的受保护函数
虚拟 bool | event(QEvent*event) 覆盖 |
虚拟 void | initPainter(QPainter*painter) const override |
虚拟 int | metric(QPaintDevice::PaintDeviceMetricm) 常覆盖 |
受保护的插槽
void | updateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll) |
宏
详细说明
窗口小部件是用户界面的原子:它接收来自窗口系统的鼠标、键盘和其他事件,并在屏幕上绘制自己的图像。每个窗口小部件都是矩形的,并按 Z 排序。一个窗口小部件会被它的父窗口小部件和前面的窗口小部件剪切。
未嵌入父 Widget 的 Widget 称为窗口。窗口通常有一个框架和一个标题栏,不过也可以使用合适的window flags 创建没有这些装饰的窗口。在 Qt 中,QMainWindow 和QDialog 的各种子类是最常见的窗口类型。
每个窗口部件的构造函数都接受一个或两个标准参数:
QWidget *parent = nullptr
是新部件的父类。如果是 (默认值),新部件将是一个窗口。如果不是,它将是nullptr
父窗口的子窗口,并受父窗口几何形状的限制(除非指定 作为窗口标志)。Qt::WindowQt::WindowFlags f = { }
(如果可用)设置窗口标志;默认值适用于大多数窗口部件,但要获得一个没有窗口系统框架的窗口,则必须使用特殊标志。
QWidget 有许多成员函数,但其中有些函数的直接功能很少;例如,QWidget 有一个字体属性,但它本身从不使用该属性。有许多子类提供了真正的功能,如QLabel,QPushButton,QListWidget, 和QTabWidget 。
顶层部件和子部件
没有父窗口部件的窗口部件始终是一个独立窗口(顶层窗口部件)。对于这些部件,setWindowTitle() 和setWindowIcon() 分别设置标题栏和图标。
非窗口 widget 是子 widget,显示在父 widget 中。Qt 中的大多数 widget 主要作为子 widget 使用。例如,可以将按钮作为顶级窗口显示,但大多数人更喜欢将按钮放在其他 widget(如QDialog )中。
上图显示了一个QGroupBox widget 用于在QGridLayout 提供的布局中容纳各种子 widget。QLabel 子 Widget 已被勾勒出来,以显示其完整尺寸。
如果要使用 QWidget 来放置子 widget,通常需要在父 QWidget 中添加布局。更多信息,请参阅布局管理。
复合 widget
当一个 widget 被用作一个容器来组合多个子 widget 时,它就被称为复合 widget。可以通过构建一个具有所需可视化属性的 widget(例如QFrame ),然后向其中添加子 widget(通常由布局管理)来创建复合 widget。
复合部件也可以通过子类化标准部件(如 QWidget 或QFrame )来创建,并在子类的构造函数中添加必要的布局和子部件。Qt 提供的许多示例都使用了这种方法,《QtWidgets 教程》中也有涉及。
自定义部件和绘制
由于 QWidget 是QPaintDevice 的子类,因此子类可用于显示自定义内容,这些内容是通过对QPainter 类的实例进行一系列绘制操作而组成的。这种方法与图形视图框架(Graphics View Framework)使用的画布式方法截然不同,后者是由应用程序将项目添加到场景中,并由框架本身进行渲染。
每个部件都在其paintEvent() 函数中执行所有绘制操作。每当部件需要重新绘制时,无论是由于外部变化还是应用程序的请求,都会调用该函数。
模拟时钟示例展示了一个简单的 widget 如何处理绘制事件。
尺寸提示和尺寸策略
在实现新的 widget 时,重新实现sizeHint() 为 widget 提供合理的默认大小并使用setSizePolicy() 设置正确的大小策略几乎总是有用的。
默认情况下,未提供尺寸提示的复合部件将根据其子部件的空间需求确定尺寸。
通过尺寸策略,您可以为布局管理系统提供良好的默认行为,以便其他部件可以轻松包含和管理您的部件。默认尺寸策略表示尺寸提示代表部件的首选尺寸,这对许多部件来说通常已经足够了。
注意: 顶层 widget 的大小限制为桌面高度和宽度的 2/3。如果这些限制不够,可以手动resize() widget。
事件
窗口小部件会对通常由用户操作引起的事件做出响应。Qt 通过调用QEvent 子类实例(包含每个事件的相关信息)的特定事件处理函数,将事件传递给 widget。
如果您的 widget 只包含子 widget,您可能不需要实现任何事件处理程序。如果要检测子 widget 中的鼠标点击,可在 widget 的mousePressEvent() 中调用子 widget 的underMouse() 函数。
Scribble 示例实现了更广泛的事件集,用于处理鼠标移动、按钮按下和窗口大小调整。
您需要为自己的 widget 提供相应的行为和内容,但以下是 QWidget 相关事件的简要概述,从最常见的事件开始:
- paintEvent每当 widget 需要重新绘制时,就会调用 () 事件。每个显示自定义内容的 widget 都必须执行该事件。使用QPainter 进行绘制只能在paintEvent() 或由paintEvent() 调用的函数中进行。
- resizeEvent(当调整部件大小时,会调用()。
- mousePressEvent当鼠标光标在 widget 内时按下鼠标按钮,或使用grabMouse() 抓取鼠标时,会调用 () 函数。按下鼠标而不松开实际上与调用grabMouse() 相同。
- mouseReleaseEvent释放鼠标按钮时,会调用 () 。当一个部件接收到相应的鼠标按下事件时,它就会接收到鼠标释放事件。这意味着,如果用户在你的widget 中按下鼠标,然后在释放鼠标键之前将鼠标拖到其他地方,你的widget 就会收到释放事件。但有一个例外:如果在按住鼠标键时出现了弹出菜单,该弹出菜单会立即窃取鼠标事件。
- mouseDoubleClickEvent当用户双击部件时,会调用 () 。如果用户双击,窗口小部件会收到一个鼠标按下事件、一个鼠标释放事件、(一个鼠标点击事件、)第二个鼠标按下事件、这个事件,最后是第二个鼠标释放事件。(如果鼠标在操作过程中没有保持稳定,还可能接收到一些鼠标移动事件)。在第二次单击到来之前,无法区分单击和双击。(这也是大多数 GUI 书籍建议双击是单击的扩展而不是触发不同操作的原因之一)。
接受键盘输入的小工具还需要重新实现一些事件处理程序:
- keyPressEvent(每当按键被按下时,()就会被调用,而当按键被按下足够长的时间后,()又会被调用,从而自动重复按键。Tab 和Shift+Tab 键只有在不被焦点变化机制使用时才会传递给 widget。要强制由 widget 处理这些按键,必须重新实现QWidget::event()。
- focusInEvent() 会在部件获得键盘焦点时被调用(假设您调用了setFocusPolicy() )。行为良好的部件会以明确而谨慎的方式表明它们拥有键盘焦点。
- focusOutEvent() 会在控件失去键盘焦点时被调用。
您可能还需要重新实现一些不太常见的事件处理程序:
- mouseMoveEvent(在按住鼠标键的同时,只要鼠标移动,就会调用()。这在拖放操作中非常有用。如果调用setMouseTracking(true),即使没有按住按钮,也能获得鼠标移动事件。(另请参阅拖放指南)。
- keyReleaseEvent(每当按键被释放或按住时(如果按键是自动重复的),都会调用 () 。在这种情况下,每次重复按键时,小部件都会收到一对按键释放和按下事件。Tab 和Shift+Tab 键只有在不被焦点变化机制使用时才会传递给 widget。要强制由 widget 处理这些按键,必须重新实现QWidget::event()。
- wheelEvent() 在用户转动鼠标滚轮时被调用。
- enterEvent(当鼠标进入 widget 的屏幕空间时,()将被调用。(这不包括部件的任何子部件所拥有的屏幕空间)。
- leaveEvent(当鼠标离开 widget 的屏幕空间时,()将被调用。如果鼠标进入了一个子 widget,则不会导致leaveEvent().
- moveEvent(当部件相对于其父部件移动时,会调用()。
- closeEvent(当用户关闭 widget 时(或调用close() 时),会调用 () 。
QEvent::Type 的文档中还描述了一些相当隐晦的事件。要处理这些事件,您需要直接重新实现event()。
event() 的默认实现会处理Tab 和Shift+Tab (移动键盘焦点),并将大多数其他事件传递给上述更专业的处理程序。
函数和属性组
部件样式表
除了每个平台的标准 widget 样式外,还可以根据样式表中指定的规则设计 widget 样式。通过这一功能,您可以自定义特定 widget 的外观,为用户提供有关其用途的视觉提示。例如,可以对按钮进行特定的样式设计,以表明它执行的是破坏性操作。
Qt 样式表》(Qt Style Sheets)文档中对 widget 样式表的使用有更详细的介绍。
透明度和双缓冲
QWidget 会自动对绘画进行双重缓冲,因此无需在paintEvent() 中编写双重缓冲代码来避免闪烁。
只要不设置Qt::WA_PaintOnScreen ,父窗口小部件的内容默认会传播给每个子窗口小部件。可以通过更新不规则区域(创建非矩形子窗口小部件)或使用小于全 Alpha 分量的颜色来编写自定义窗口小部件,以利用这一功能。下图显示了如何对自定义 widget 的属性进行微调,以实现不同的效果。
在上图中,我们创建了一个去掉区域的半透明矩形子部件,并将其添加到父部件(显示像素图的QLabel )上。然后,设置不同的属性和 widget 属性以实现不同的效果:
- 左边的 widget 没有设置额外的属性或 widget 属性。这种默认状态适合大多数具有透明度、形状不规则或不使用不透明笔刷涂满整个区域的自定义 widget。
- 中心部件已设置autoFillBackground 属性。该属性适用于依赖窗口小部件提供默认背景且不使用不透明笔刷涂满整个区域的自定义窗口小部件。
- 右边的 widget 设置了Qt::WA_OpaquePaintEvent widget 属性。这表示该部件将用不透明颜色涂满整个区域。该部件的区域最初将是未初始化的,在图中用红色对角线网格图案表示,该网格图案将照亮涂过颜色的区域。
要快速更新具有简单背景颜色的自定义部件(如实时绘图或图形部件),最好定义一个合适的背景颜色(使用setBackgroundRole() 和QPalette::Window 角色),设置autoFillBackground 属性,并只在部件的paintEvent() 中实现必要的绘制功能。
要快速更新不断用不透明内容涂满整个区域的自定义 widget(例如视频流 widget),最好设置 widget 的Qt::WA_OpaquePaintEvent ,以避免与重新绘制 widget 背景相关的不必要开销。
如果一个 widget 同时设置了Qt::WA_OpaquePaintEvent widget 属性和 autoFillBackground 属性,则Qt::WA_OpaquePaintEvent 属性优先。根据您的需求,应选择其中之一。
父 widget 的内容也会传播到标准 Qt widget。如果父窗口小部件是以非标准方式装饰的,这可能会导致一些意想不到的结果,如下图所示。
在不使用子类的情况下,自定义标准 Qt Widget 的绘制行为的范围比自定义 Widget 稍小。通常情况下,可以通过设置autoFillBackground 属性来实现标准窗口小部件所需的外观。
创建半透明窗口
在支持合成的窗口系统中,您可以创建带有半透明区域的窗口。
要在顶层窗口部件中启用此功能,请使用setAttribute() 设置其Qt::WA_TranslucentBackground 属性,并确保在希望部分透明的区域中使用非不透明颜色绘制其背景。
平台说明:
- X11:此功能需要使用支持 ARGB 视觉效果的 X 服务器和合成窗口管理器。
- 视窗:窗口小部件需要设置Qt::FramelessWindowHint 窗口标志,才能实现半透明效果。
- macOS:小工具需要设置Qt::FramelessWindowHint 窗口标志,才能实现半透明效果。
本地小部件与外来小部件
外来部件是窗口系统未知的部件。它们没有与之关联的本地窗口句柄。该功能可大大加快部件绘制、调整大小和消除闪烁的速度。
如果您需要使用本地窗口的旧行为,请选择以下选项之一:
- 在环境中使用
QT_USE_NATIVE_WINDOWS=1
。 - 在应用程序中设置Qt::AA_NativeWindows 属性。所有窗口小部件都将是本机窗口小部件。
- 在部件上设置Qt::WA_NativeWindow 属性:部件本身及其所有祖先都将成为本地部件(除非设置了Qt::WA_DontCreateNativeAncestors )。
- 调用QWidget::winId 强制执行本地窗口(这意味着 3)。
- 设置Qt::WA_PaintOnScreen 属性以执行本地窗口(这意味着 3)。
另请参阅 QEvent,QPainter,QGridLayout, 和QBoxLayout 。
成员类型文档
枚举 QWidget::RenderFlag
flags QWidget::RenderFlags
该枚举描述了调用QWidget::render() 时如何渲染 widget。
常量 | 值 | 说明 |
---|---|---|
QWidget::DrawWindowBackground | 0x1 | 如果启用此选项,即使未设置autoFillBackground ,也会将 widget 的背景渲染到目标中。默认情况下启用此选项。 |
QWidget::DrawChildren | 0x2 | 如果启用该选项,部件的子部件会递归地呈现到目标中。默认情况下,该选项已启用。 |
QWidget::IgnoreMask | 0x4 | 如果启用此选项,在渲染到目标时,将忽略 widget 的QWidget::mask()。默认情况下,该选项被禁用。 |
RenderFlags 类型是QFlags<RenderFlag> 的类型定义。它存储 RenderFlag 值的 OR 组合。
属性文档
acceptDrops : bool
此属性表示此 widget 是否启用了下拉事件
将此属性设置为 true 会向系统宣布此 widget可以接受下拉事件。
如果该 widget 是桌面(windowType() ==Qt::Desktop ),如果其他应用程序正在使用桌面,则此操作可能会失败;您可以调用 acceptDrops() 来测试是否会发生这种情况。
警告: 请勿在拖放事件处理程序中修改此属性。
默认情况下,此属性为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
该属性包含辅助技术看到的部件标识符
如果设置了该属性,辅助技术就可以使用 widget 的可访问标识符来识别特定的 widget,例如在自动测试中。
该属性在 Qt 6.9 中引入。
访问功能:
QString | accessibleIdentifier() const |
void | setAccessibleIdentifier(const QString &identifier) |
accessibleName : QString
此属性包含辅助技术所看到的 widget 名称
这是屏幕阅读器等辅助技术公布该部件的主要名称。对于大多数 widget,不需要设置此属性。例如,对于QPushButton ,将使用按钮的文本。
如果 Widget 不提供任何文本,则必须设置此属性。例如,一个只包含图标的按钮就需要设置此属性,以便与屏幕阅读器配合使用。名称应简短并与 widget 传达的视觉信息相当。
该属性必须本地化。
默认情况下,该属性包含一个空字符串。
访问功能:
QString | accessibleName() const |
void | setAccessibleName(const QString &name) |
另请参阅 QWidget::accessibleDescription 和QAccessibleInterface::text()。
autoFillBackground : bool
该属性用于判断窗口小部件的背景是否被自动填充。
如果启用,该属性将使 Qt Widgets 在调用 paint 事件之前填充 widget 的背景。所使用的颜色由窗口部件palette 中的QPalette::Window 颜色角色定义。
此外,除非设置了 WA_OpaquePaintEvent 或 WA_NoSystemBackground 属性,否则 Windows 将始终填充QPalette::Window 。
如果窗口部件的父窗口部件具有静态渐变背景,则无法关闭此属性(即设置为 false)。
警告: 在使用Qt 样式表时,请谨慎使用此属性。当 widget 的样式表具有有效的背景或边框图像时,该属性会自动禁用。
默认情况下,此属性为false
。
访问功能:
bool | autoFillBackground() const |
void | setAutoFillBackground(bool enabled) |
另请参阅 Qt::WA_OpaquePaintEvent,Qt::WA_NoSystemBackground, 和Transparency and Double Buffering 。
baseSize : QSize
此属性保存 widget 的基本尺寸
如果 widget 定义了sizeIncrement() ,基本尺寸将用于计算合适的 widget 大小。
默认情况下,对于新创建的 widget,该属性包含一个宽度和高度均为零的尺寸。
访问函数:
QSize | baseSize() const |
void | setBaseSize(const QSize &) |
void | setBaseSize(int basew, int baseh) |
另请参见 setSizeIncrement()。
[read-only]
childrenRect : const QRect
此属性保存 widget 子控件的边界矩形。
不包括隐藏的子控件。
默认情况下,对于没有子代的 widget,该属性包含一个位于原点、宽度和高度均为零的矩形。
访问函数:
QRect | childrenRect() const |
另请参阅 childrenRegion() 和geometry()。
[read-only]
childrenRegion : const QRegion
该属性包含 widget 的子代所占的组合区域。
隐藏的子代不包括在内。
默认情况下,对于没有子代的 widget,该属性包含一个空区域。
访问函数:
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
此属性用于保存此 widget 的光标形状
当鼠标在该 widget 上移动时,光标将呈现这种形状。有关一系列有用的形状,请参阅list of predefined cursor objects 。
编辑器 widget 可能使用工字形光标:
setCursor(Qt::IBeamCursor);
如果未设置光标,或调用 unsetCursor() 后,则使用父级光标。
默认情况下,该属性包含一个形状为Qt::ArrowCursor 的光标。
某些底层窗口实现会在光标离开窗口部件时重置光标,即使鼠标被抓住也是如此。如果希望为所有窗口部件设置光标,即使在窗口外也是如此,可以考虑使用QGuiApplication::setOverrideCursor() 。
访问函数:
QCursor | cursor() const |
void | setCursor(const QCursor &) |
void | unsetCursor() |
另请参见 QGuiApplication::setOverrideCursor()。
enabled : bool
此属性表示该部件是否已启用
一般来说,启用的 widget 会处理键盘和鼠标事件;禁用的 widget 则不会。QAbstractButton 是一个例外。
某些部件在禁用时会以不同方式显示。例如,按钮的标签可能会显示为灰色。如果您的部件需要知道何时启用或禁用,可以使用changeEvent() 类型的QEvent::EnabledChange 。
禁用一个部件会隐式禁用其所有子部件。启用则会分别启用所有子部件,除非它们已被显式禁用。如果父窗口部件仍处于禁用状态,则无法显式启用非窗口的子窗口部件。
默认情况下,该属性为true
。
访问函数:
bool | isEnabled() const |
void | setEnabled(bool) |
另请参阅 isEnabledTo(),QKeyEvent,QMouseEvent, 和changeEvent().
[read-only]
focus : const bool
此属性表示此窗口部件(或其焦点代理)是否拥有键盘输入焦点。
默认情况下,此属性为false
。
注: 获取一个 widget 的此属性值实际上等同于检查QApplication::focusWidget() 是否指向该 widget。
访问功能:
bool | hasFocus() const |
另请参阅 setFocus()、clearFocus()、setFocusPolicy() 和QApplication::focusWidget()。
focusPolicy : Qt::FocusPolicy
该属性表示窗口部件接受键盘焦点的方式
如果窗口部件通过制表接受键盘焦点,则策略为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
此属性保存当前为 widget 设置的字体
该属性描述了 widget 请求的字体。该字体由 widget 的样式在渲染标准组件时使用,可确保自定义 widget 与本地平台的外观和感觉保持一致。不同平台或不同样式为应用程序定义不同字体的情况很常见。
为部件分配新字体时,该字体的属性会与部件的默认字体相结合,形成部件的最终字体。您可以调用fontInfo() 来获取 widget 最终字体的副本。最终字体也用于初始化QPainter 的字体。
默认字体取决于系统环境。QApplication 维护一个系统/主题字体,作为所有 widget 的默认字体。某些类型的 widget 还可能有特殊的默认字体。您也可以通过向QApplication::setFont() 传递自定义字体和 widget 名称,自己为 widget 定义默认字体。最后,该字体将与 Qt 的字体数据库进行匹配,以找到最佳匹配。
QWidget 将显式字体属性从父代传播给子代。如果更改了字体的特定属性并将其分配给 widget,该属性将传播给 widget 的所有子控件,并覆盖该属性的任何系统默认值。请注意,除非启用了 属性,否则字体默认不会传播到窗口(请参阅 () )。Qt::WA_WindowPropagation isWindow
QWidget字体传播与调色板传播类似。
当前样式用于渲染所有标准 Qt Widget 的内容,它可以自由选择使用 Widget 字体,或在某些情况下忽略它(部分或完全)。特别是某些样式,如 GTK 风格、Mac 风格和 Windows Vista 风格,会对 widget 字体进行特殊修改,以匹配该平台的本地外观和感觉。因此,为部件的字体分配属性并不能保证改变部件的外观。相反,您可以选择应用样式表。
注意: 如果Qt 样式表与 setFont() 用在同一个 widget 上,如果设置冲突,样式表将优先。
访问函数:
const QFont & | font() const |
void | setFont(const QFont &) |
另请参阅 fontInfo() 和fontMetrics()。
[read-only]
frameGeometry : const QRect
部件相对于其父节点(包括任何窗口框架)的几何形状
有关窗口几何问题的概述,请参阅窗口几何文档。
默认情况下,该属性包含一个取决于用户平台和屏幕几何形状的值。
访问功能:
QRect | frameGeometry() const |
另请参见 geometry()、x()、y() 和pos()。
[read-only]
frameSize : const QSize
该属性表示窗口部件(包括任何窗口框架)的大小。
默认情况下,该属性包含一个取决于用户平台和屏幕几何形状的值。
访问功能:
QSize | frameSize() const |
[read-only]
fullScreen : const bool
该属性表示窗口部件是否以全屏模式显示
全屏模式下的 widget 占据整个屏幕区域,不显示标题栏等窗口装饰。
默认情况下,该属性为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 : const int
此属性保留窗口部件的高度,不包括任何窗口框架。
有关窗口几何问题的概述,请参阅窗口几何文档。
默认情况下,该属性包含一个取决于用户平台和screen geometry 的值。
访问功能:
int | height() const |
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 : const bool
此属性表示此窗口部件的窗口是否为活动窗口
活动窗口是指包含有键盘焦点的窗口(如果窗口没有窗口部件,或窗口部件都不接受键盘焦点,则窗口仍有焦点)。
当弹出窗口可见时,该属性对于活动窗口和弹出窗口都是true
。
默认情况下,该属性为false
。
访问功能:
bool | isActiveWindow() const |
另请参阅 activateWindow() 和QApplication::activeWindow()。
layoutDirection : Qt::LayoutDirection
此属性保存此 widget 的布局方向。
注: 自 Qt 4.7 起,此方法不再影响文本布局方向。
默认情况下,此属性设置为Qt::LeftToRight 。
在 widget 上设置布局方向后,布局方向将传播到 widget 的子 widget,但不会传播到作为窗口的子 widget,也不会传播到显式调用了 setLayoutDirection() 的子 widget。此外,在父节点调用 setLayoutDirection()后添加的子节点不会继承父节点的布局方向。
访问函数:
Qt::LayoutDirection | layoutDirection() const |
void | setLayoutDirection(Qt::LayoutDirection direction) |
void | unsetLayoutDirection() |
另请参阅 QApplication::layoutDirection 。
locale : QLocale
该属性用于保存 widget 的 locale
只要没有设置特殊的 locale,该属性就是父代的 locale 或(如果该 widget 是顶级 widget)默认的 locale。
如果 widget 显示日期或数字,则应使用 widget 的 locale 格式化这些内容。
访问功能:
QLocale | locale() const |
void | setLocale(const QLocale &locale) |
void | unsetLocale() |
另请参阅 QLocale 和QLocale::setDefault()。
[read-only]
maximized : const bool
此属性表示此 widget 是否最大化
此属性仅与窗口相关。
注意: 由于某些窗口系统的限制,该属性并不总能报告预期结果(例如,如果 X11 用户通过窗口管理器将窗口最大化,Qt 无法将其与任何其他调整大小的操作区分开来)。随着窗口管理器协议的发展,这一问题有望得到改善。
默认情况下,该属性为false
。
访问函数:
bool | isMaximized() const |
另请参见 windowState(),showMaximized(),visible,show(),hide(),showNormal(), 和minimized 。
maximumHeight : int
该属性是 widget 的最大高度(以像素为单位
该属性与maximumSize 属性的高度相对应。
默认情况下,该属性的值为 16777215。
注意: QWIDGETSIZE_MAX
宏的定义限制了 widget 的最大尺寸。
访问功能:
int | maximumHeight() const |
void | setMaximumHeight(int maxh) |
另请参阅 maximumSize 和maximumWidth 。
maximumSize : QSize
此属性以像素为单位保存 widget 的最大尺寸。
不能将 widget 调整到大于最大 widget 大小的尺寸。
默认情况下,该属性包含一个宽度和高度值均为 16777215 的尺寸。
注意: QWIDGETSIZE_MAX
宏的定义限制了 widget 的最大尺寸。
访问功能:
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 : const bool
此属性表示此 widget 是否最小化(图标化)
该属性只与窗口相关。
默认情况下,该属性为false
。
访问函数:
bool | isMinimized() const |
另请参阅 showMinimized(),visible,show(),hide(),showNormal() 和maximized 。
minimumHeight : int
该属性是 widget 的最小高度(单位:像素
该属性对应于minimumSize 属性的高度。
默认情况下,此属性的值为 0。
访问函数:
int | minimumHeight() const |
void | setMinimumHeight(int minh) |
另请参阅 minimumSize 和minimumWidth 。
minimumSize : QSize
此属性用于保存 widget 的最小尺寸
不能将 widget 调整到小于最小 widget 大小的尺寸。如果当前尺寸较小,则会将 widget 的尺寸强制调整为最小尺寸。
该函数设置的最小尺寸将覆盖QLayout 定义的最小尺寸。要取消设置最小尺寸,请使用QSize(0, 0)
。
默认情况下,此属性包含一个宽度和高度均为零的大小。
访问函数:
QSize | minimumSize() const |
void | setMinimumSize(const QSize &) |
void | setMinimumSize(int minw, int minh) |
另请参阅 minimumWidth,minimumHeight,maximumSize, 和sizeIncrement 。
[read-only]
minimumSizeHint : const QSize
此属性保存部件的推荐最小尺寸
如果该属性的值为无效尺寸,则不推荐最小尺寸。
如果该 widget 没有布局,minimumSizeHint() 的默认实现会返回无效尺寸,否则会返回布局的最小尺寸。大多数内置 widget 都会重新实现 minimumSizeHint()。
QLayout 除非设置了 () 或将大小策略设置为 QSizePolicy::Ignore,否则 QSizeHint() 不会将 widget 的大小调整为小于最小尺寸提示的大小。如果设置了 () ,最小尺寸提示将被忽略。minimumSize minimumSize
访问函数:
virtual QSize | minimumSizeHint() const |
另请参见 QSize::isValid()、resize()、setMinimumSize() 和sizePolicy()。
minimumWidth : int
该属性保存窗口小部件的最小宽度(以像素为单位
该属性与minimumSize 属性的宽度相对应。
默认情况下,该属性的值为 0。
访问函数:
int | minimumWidth() const |
void | setMinimumWidth(int minw) |
另请参阅 minimumSize 和minimumHeight 。
[read-only]
modal : const bool
此属性表示 widget 是否为模态 widget
该属性只对窗口有意义。模式 widget 会阻止所有其他窗口中的 widget 获得任何输入。
默认情况下,此属性为false
。
访问函数:
bool | isModal() const |
另请参阅 isWindow(),windowModality, 和QDialog 。
mouseTracking : bool
该属性显示 widget 是否启用了鼠标跟踪功能。
如果禁用了鼠标跟踪(默认),则只有在移动鼠标时按下至少一个鼠标按钮,部件才会接收鼠标移动事件。
如果启用了鼠标跟踪,即使没有按下按钮,部件也会接收鼠标移动事件。
访问功能:
bool | hasMouseTracking() const |
void | setMouseTracking(bool enable) |
另请参阅 mouseMoveEvent().
[read-only]
normalGeometry : const QRect
该属性保留了窗口小部件作为普通(非最大化或全屏)顶层窗口小部件显示时的几何形状。
如果窗口小部件已经处于这种状态,则正常几何图形将反映窗口小部件当前的geometry().
对于子窗口小部件,该属性始终包含一个空矩形。
默认情况下,该属性包含一个空矩形。
访问函数:
QRect | normalGeometry() const |
另请参阅 QWidget::windowState() 和QWidget::geometry 。
palette : QPalette
该属性包含 widget 的调色板
该属性描述了 widget 的调色板。调色板由 widget 的样式在渲染标准组件时使用,可确保自定义 widget 与本地平台的外观和感觉保持一致。不同的平台或不同的样式有不同的调色板,这种情况很常见。
为部件分配新调色板时,该调色板的颜色角色会与部件的默认调色板相结合,形成部件的最终调色板。窗口部件背景角色的调色板条目用于填充窗口部件的背景(请参阅QWidget::autoFillBackground ),前景角色用于初始化QPainter 的钢笔。
默认值取决于系统环境。QApplication 维护一个系统/主题调色板,作为所有 widget 的默认值。某些类型的部件还可能有特殊的默认调色板(例如,在 Windows Vista 上,所有派生自QMenuBar 的类都有特殊的默认调色板)。您也可以通过向QApplication::setPalette() 传递自定义调色板和部件名称,自己为部件定义默认调色板。最后,在分配调色板时,样式始终可以选择对其进行抛光(参见QStyle::polish()).
QWidget 在父代和子代之间传播明确的调色板角色。如果你为调色板上的特定角色分配了笔刷或颜色,并将该调色板分配给 widget,那么该角色将传播给 widget 的所有子部件,并覆盖该角色的任何系统默认值。请注意,除非启用 属性,否则调色板默认不会传播到窗口(参见 () )。Qt::WA_WindowPropagation isWindow
QWidget调色板的传播类似于字体的传播。
当前样式用于渲染所有标准 Qt Widget 的内容,它可以自由地从 Widget 调色板中选择颜色和笔刷,或者在某些情况下忽略调色板(部分或完全)。尤其是某些样式,如 GTK 风格、Mac 风格和 Windows Vista 风格,需要依赖第三方 API 来呈现窗口小部件的内容,而这些样式通常不遵循调色板。因此,为部件的调色板分配角色并不能保证改变部件的外观。相反,您可以选择应用样式表。
警告 请勿将此函数与Qt 样式表结合使用。使用样式表时,可使用 "color"、"background-color"、"selection-color"、"selection-background-color "和 "alternate-background-color "自定义 widget 的调色板。
访问功能:
const QPalette & | palette() const |
void | setPalette(const QPalette &) |
另请参阅 QGuiApplication::palette(),QWidget::font() 和Qt XML 样式表。
pos : QPoint
该属性用于保存 widget 在其父 widget 中的位置。
如果该窗口小部件是一个窗口,那么位置就是该窗口小部件在桌面上的位置,包括其框架。
改变位置时,如果窗口小部件可见,则会立即收到移动事件(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 : const QRect
该属性保存窗口部件的内部几何图形,不包括任何窗口框架。
矩形属性等于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 : const QSize
此属性用于保存部件的推荐尺寸
如果该属性的值为无效尺寸,则不推荐任何尺寸。
如果该 widget 没有布局,则 sizeHint() 的默认实现会返回无效尺寸,否则会返回布局的首选尺寸。
访问函数:
virtual QSize | sizeHint() const |
另请参阅 QSize::isValid(),minimumSizeHint(),sizePolicy(),setMinimumSize() 和updateGeometry().
sizeIncrement : QSize
该属性用于保存窗口小部件的尺寸增量。
width() 像素水平移动,以baseSize() 为基准,以 sizeIncrement.height() 像素垂直移动。首选的 widget 大小为非负整数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
此属性保存 widget 的默认布局行为
如果有QLayout 管理此 widget 的子控件,则使用该布局指定的尺寸策略。如果没有这样的QLayout ,则使用此函数的结果。
默认策略是首选/优先,这意味着 widget 可以自由调整大小,但优先使用sizeHint() 返回的大小。按钮类 widget 设置大小策略时,会指定它们可以水平拉伸,但垂直方向是固定的。这同样适用于 lineedit 控件(如QLineEdit,QSpinBox 或可编辑的QComboBox )和其他水平方向的 widget(如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
该属性用于保存 widget 的状态提示
默认情况下,该属性包含一个空字符串。
访问功能:
QString | statusTip() const |
void | setStatusTip(const QString &) |
styleSheet : QString
该属性包含 widget 的样式表
样式表包含对 widget 样式的自定义文本描述,详见Qt 样式表文档。
自 Qt 4.5 起,Qt 样式表完全支持 macOS。
警告: Qt 样式表目前不支持自定义QStyle 子类。我们计划在未来的版本中解决这一问题。
访问函数:
QString | styleSheet() const |
void | setStyleSheet(const QString &styleSheet) |
另请参阅 setStyle(),QApplication::styleSheet, 以及Qt 样式表。
tabletTracking : bool
该属性用于保存 widget 是否启用了手写板跟踪功能。
如果禁用了平板电脑跟踪(默认),则只有当触控笔与平板电脑接触,或按下至少一个触控笔按钮,同时触控笔正在移动时,该 widget 才会接收平板电脑移动事件。
如果启用了平板电脑跟踪功能,即使在附近悬停,widget 也会接收平板电脑移动事件。这对于监控位置、旋转和倾斜等辅助属性以及在用户界面中提供反馈非常有用。
访问功能:
bool | hasTabletTracking() const |
void | setTabletTracking(bool enable) |
另请参见 tabletEvent()。
toolTip : QString
该属性用于保存窗口部件的工具提示
请注意,默认情况下,只有作为活动窗口子窗口的部件才会显示工具提示。您可以通过在窗口而非带有工具提示的 widget 上设置属性Qt::WA_AlwaysShowToolTips 来改变这种行为。
如果您想控制工具提示的行为,可以拦截event() 函数并捕捉QEvent::ToolTip 事件(例如,如果您想自定义显示工具提示的区域)。
默认情况下,该属性包含一个空字符串。
访问函数:
QString | toolTip() const |
void | setToolTip(const QString &) |
另请参阅 QToolTip,statusTip, 和whatsThis 。
toolTipDuration : int
该属性用于保存 widget 的工具提示持续时间
指定工具提示的显示时间(毫秒)。如果值为-1(默认值),持续时间将根据工具提示的长度计算。
访问功能:
int | toolTipDuration() const |
void | setToolTipDuration(int msec) |
另请参阅 toolTip 。
updatesEnabled : bool
此属性表示是否启用更新
启用更新的部件会接收绘制事件,并具有系统背景;禁用的部件则不会。这也意味着,如果更新被禁用,调用update() 和repaint() 将不起作用。
默认情况下,该属性为true
。
setUpdatesEnabled() 通常用于在短时间内禁用更新,例如在大的变化时避免屏幕闪烁。在 Qt 中,窗口小部件通常不会产生屏幕闪烁,但在 X11 中,当窗口小部件在被其他窗口小部件替换之前被隐藏时,服务器可能会擦除屏幕上的区域。禁用更新可以解决这个问题。
举例说明
setUpdatesEnabled(false); bigVisualChanges(); setUpdatesEnabled(true);
禁用一个部件会隐式禁用其所有子部件。启用部件会启用所有子部件,但顶层部件或已明确禁用的部件除外。重新启用更新会隐式调用该 widget 上的update() 函数。
访问功能:
bool | updatesEnabled() const |
void | setUpdatesEnabled(bool enable) |
另请参阅 paintEvent()。
visible : bool
此属性表示窗口部件是否可见
调用 setVisible(true) 或show() 会将窗口小部件设置为可见状态,前提是该窗口的所有父窗口小部件都是可见的。如果某个父窗口部件不可见,则在所有父窗口部件都显示出来之前,该窗口部件不会变为可见。如果其大小或位置发生了变化,Qt Positioning 会保证 widget 在显示之前获得移动和调整大小事件。如果 widget 尚未调整大小,Qt XML 会使用adjustSize() 将 widget 的大小调整为有用的默认值。
调用 setVisible(false) 或hide() 可以显式隐藏部件。显式隐藏的 widget 永远不会变为可见,即使它的所有祖先都变为可见,除非您显示它。
当部件的可见性状态发生变化时,它会接收显示和隐藏事件。在隐藏和显示事件之间,无需浪费 CPU 周期来准备或向用户显示信息。例如,一个视频应用程序可能只是停止生成新的帧。
被屏幕上其他窗口遮挡的窗口小部件将被视为可见。这同样适用于图标化窗口和存在于另一个虚拟桌面上的窗口(在支持这一概念的平台上)。当窗口系统改变窗口部件的映射状态时,该部件会自发接收显示和隐藏事件,例如,当用户最小化窗口时,会自发接收隐藏事件,而当窗口再次恢复时,又会自发接收显示事件。
您很少需要重新实现 setVisible() 函数。如果需要在显示部件之前更改某些设置,可以使用showEvent() 代替。如果需要延迟初始化,请使用传递给event() 函数的 Polish 事件。
访问函数:
bool | isVisible() const |
virtual void | setVisible(bool visible) |
另请参阅 show(),hide(),isHidden(),isVisibleTo(),isMinimized(),showEvent() 和hideEvent().
whatsThis : QString
此属性用于保存 widget 的 "这是什么 "帮助文本。
默认情况下,该属性包含一个空字符串。
访问功能:
QString | whatsThis() const |
void | setWhatsThis(const QString &) |
另请参阅 QWhatsThis,QWidget::toolTip, 和QWidget::statusTip 。
[read-only]
width : const int
该属性保留窗口部件的宽度,不包括任何窗口边框。
有关窗口几何问题的概述,请参阅窗口几何文档。
注意: 请勿使用此函数查找多屏桌面的屏幕宽度。详情请参阅QScreen 。
默认情况下,此属性包含一个取决于用户平台和屏幕几何形状的值。
访问函数:
int | width() const |
windowFilePath : QString
此属性保存与 widget 相关联的文件路径
该属性只对窗口有效。它将文件路径与窗口关联起来。如果您设置了文件路径,但没有设置窗口标题,Qt XML 会将窗口标题设置为指定路径的文件名,该文件名使用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)。
访问函数:
Qt::WindowFlags | windowFlags() const |
void | setWindowFlags(Qt::WindowFlags type) |
另请参阅 windowType(),setWindowFlag() 和窗口标志示例。
windowIcon : QIcon
该属性包含 widget 的图标
该属性只对窗口有意义。如果没有设置图标,windowIcon() 将返回应用程序图标 (QApplication::windowIcon()) 。
注意: 在 macOS 上,窗口图标代表活动文档,除非使用setWindowFilePath 设置了文件路径,否则不会显示。
访问功能:
QIcon | windowIcon() const |
void | setWindowIcon(const QIcon &icon) |
Notifier 信号:
void | windowIconChanged(const QIcon &icon) |
另请参阅 windowTitle 和setWindowFilePath 。
windowModality : Qt::WindowModality
该属性表示哪些窗口会被模态 widget 挡住。
该属性只对窗口有效。模式窗口部件会阻止其他窗口中的窗口部件获得输入。此属性的值可控制当窗口部件可见时哪些窗口被阻止。在窗口可见时更改该属性没有任何效果;您必须先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 : const int
该属性保存窗口部件相对于其父节点(包括任何窗口框架)的 x 坐标。
有关窗口几何问题的概述,请参阅窗口几何文档。
默认情况下,此属性的值为 0。
访问函数:
int | x() const |
另请参阅 frameGeometry,y, 和pos 。
[read-only]
y : const int
该属性保存窗口部件相对于其父节点(包括任何窗口框架)的 y 坐标。
有关窗口几何问题的概述,请参阅窗口几何文档。
默认情况下,此属性的值为 0。
访问函数:
int | y() const |
另请参阅 frameGeometry,x, 和pos 。
成员函数文档
[since 6.3]
QAction *QWidget::addAction(const QIcon &icon, const QString &text)
[since 6.3]
QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut)
[since 6.3]
QAction *QWidget::addAction(const QString &text)
[since 6.3]
QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut)
这些便捷函数会创建一个新的操作,其中包含文本text 、图标icon 和快捷方式shortcut (如果有)。
这些函数将新创建的操作添加到 widget 的操作列表中,并将其返回。
该函数在 Qt 6.3 中引入。
[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)
[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 QString &text, const QObject *receiver, const char *member, Qt::ConnectionType type = Qt::AutoConnection)
这是一个重载函数。
该便捷函数创建一个新的操作,其中包含文本text 、图标icon 和快捷方式shortcut (如果有)。
该操作的triggered() 信号连接到receiver 的member 插槽。函数将新创建的操作添加到 widget 的操作列表中并返回。
该函数在 Qt 6.3 中引入。
[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 QIcon &icon, 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 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)
这是一个重载函数。
这些便捷函数创建了一个新的操作,其中包含文本text 、图标icon 和快捷方式shortcut (如果有)。
该操作的triggered() 信号通过调用QObject::connect (操作,&QAction::triggered ,参数......)连接,完美转发args ,包括可能的Qt::ConnectionType 。
函数将新创建的操作添加到 widget 的操作列表中并返回。
该函数在 Qt 6.3 中引入。
[explicit]
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
构造一个 widget,它是parent 的子 widget,widget 标志设置为f 。
如果parent 是nullptr
,新 widget 将成为一个窗口。如果parent 是另一个 widget,则该 widget 将成为parent 内的一个子窗口。当parent 被删除时,新部件也会被删除。
窗口部件标志参数f 通常为 0,但可以设置为自定义窗口框架(即parent 必须是nullptr
)。要自定义框架,可使用由window flags 中任意一个的 bitwise OR 组成的值。
如果要为已经可见的窗口部件添加子窗口部件,则必须显式显示子窗口部件,使其可见。
请注意,X11 版本的 Qt 可能无法在所有系统上提供所有的样式标志组合。这是因为在 X11 上,Qt 只能询问窗口管理器,而窗口管理器可以覆盖应用程序的设置。而在 Windows 上,Qt 可以设置您想要的任何标志。
另请参见 windowFlags 。
[virtual noexcept]
QWidget::~QWidget()
销毁 widget。
首先删除该 widget 的所有子 widget。如果该 widget 是主 widget,应用程序将退出。
[virtual protected]
void QWidget::actionEvent(QActionEvent *event)
每当小部件的操作发生变化时,该事件处理程序就会以给定的event 调用。
另请参阅 addAction(),insertAction(),removeAction(),actions() 和QActionEvent 。
QList<QAction *> QWidget::actions() const
返回此 widget 的操作列表(可能为空)。
另请参阅 contextMenuPolicy,insertAction() 和removeAction()。
void QWidget::activateWindow()
将包含此 widget 的顶层 widget 设置为活动窗口。
活动窗口是指具有键盘输入焦点的可见顶层窗口。
此函数执行的操作与在顶层窗口标题栏上单击鼠标相同。在 X11 上,结果取决于窗口管理器。如果要确保窗口也堆叠在顶部,则还应调用raise()。请注意,窗口必须是可见的,否则 activateWindow() 将不起作用。
在 Windows 系统中,如果应用程序当前不是活动窗口,则调用此函数不会使其成为活动窗口。它将改变任务栏条目的颜色,以表明窗口已发生某种变化。这是因为微软不允许应用程序中断用户当前正在另一个应用程序中进行的操作。
另请参阅 isActiveWindow()、window() 和show()。
void QWidget::addAction(QAction *action)
将操作action 添加到该 widget 的操作列表中。
所有 QWidget 都有一个QActions 的列表。不过,它们可以用许多不同的方式以图形表示。QAction 列表(由actions() 返回)的默认用途是创建上下文QMenu 。
QWidget 的每个操作只能有一个,添加已拥有的操作不会导致同一操作在 widget 中出现两次。
action 的所有权不会转移到该QWidget 。
另请参阅 removeAction(),insertAction(),actions() 和QMenu 。
void QWidget::addActions(const QList<QAction *> &actions)
将操作actions 添加到此 widget 的操作列表中。
另请参阅 removeAction()、QMenu 和addAction()。
void QWidget::adjustSize()
调整 widget 的大小以适应其内容。
如果sizeHint() 有效,即尺寸提示的宽度和高度大于等于 0,则使用该函数。否则,该函数会将尺寸设置为覆盖所有子窗口部件的子矩形(所有子窗口部件矩形的集合)。
对于窗口,屏幕尺寸也会考虑在内。如果sizeHint() 小于 (200, 100),且大小策略为expanding ,则窗口的大小至少为 (200, 100)。窗口的最大尺寸是屏幕宽度和高度的 2/3。
另请参阅 sizeHint() 和childrenRect()。
QPalette::ColorRole QWidget::backgroundRole() const
返回 widget 的背景角色。
背景角色定义了 widgetpalette 中用于渲染背景的笔刷。
如果没有设置明确的背景角色,该 widget 将继承其父 widget 的背景角色。
另请参阅 setBackgroundRole() 和foregroundRole()。
QBackingStore *QWidget::backingStore() const
返回该 widget 将绘制到的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
返回位于 widget 坐标系中 (x,y) 位置的可见子 widget。如果在指定位置没有可见的子 widget,函数将返回nullptr
。
QWidget *QWidget::childAt(const QPoint &p) const
这是一个重载函数。
返回 Widget 坐标系中p 点的可见子 Widget。
[since 6.8]
QWidget *QWidget::childAt(const QPointF &p) const
这是一个重载函数。
返回 Widget 自身坐标系中p 点的可见子 Widget。
此函数在 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()
关闭此 widget。如果 widget 已关闭,则返回true
;否则返回false
。
首先,它会向 Widget 发送QCloseEvent 。如果 Widgetaccepts 关闭事件,则hidden 。如果ignores 事件,则不会发生任何事情。QWidget::closeEvent() 的默认实现接受关闭事件。
如果 widget 带有Qt::WA_DeleteOnClose 标志,该 widget 也会被删除。无论窗口部件是否可见,都会向窗口部件发送关闭事件。
当设置了Qt::WA_QuitOnClose 属性的最后一个可见主窗口(即没有父窗口的窗口)关闭时,就会发出QGuiApplication::lastWindowClosed() 信号。默认情况下,除了瞬时窗口(如闪屏、工具窗口和弹出菜单)外,所有窗口部件都设置了该属性。
[virtual protected]
void QWidget::closeEvent(QCloseEvent *event)
当 Qt Widgets 从窗口系统接收到顶层 widget 的窗口关闭请求时,该事件处理程序将被调用,给定值为event 。
默认情况下,该事件被接受,窗口部件被关闭。您可以重新实现该函数,以改变窗口部件响应窗口关闭请求的方式。例如,可以通过在所有事件中调用ignore() 来阻止窗口关闭。
主窗口应用程序通常使用该函数的重新实现来检查用户的工作是否已保存,并在关闭前征求用户许可。
另请参阅 event()、hide()、close() 和QCloseEvent 。
QMargins QWidget::contentsMargins() const
contentsMargins 函数返回 widget 的内容页边距。
另请参阅 setContentsMargins() 和contentsRect()。
QRect QWidget::contentsRect() const
返回 widget 边距内的区域。
另请参阅 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)
创建新的 widget 窗口。
在 Qt XML 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() 是否会真正给予窗口焦点也与平台有关。
自 6.8 版起,如果嵌入基于Qt Quick 的窗口,按下制表符会进出嵌入的 QML 窗口,允许焦点移动到窗口容器链中的下一个或上一个可聚焦对象。
- 在基于QWidget 的应用程序中使用多个窗口容器实例会大大降低应用程序的整体性能。
- 自 6.7 起,如果window 属于一个窗口部件(即window 是通过调用windowHandle() 收到的),则不会创建容器。取而代之的是,该函数将在重新泛型到parent 之后返回部件本身。由于不会创建容器,flags 将被忽略。换句话说,如果window 属于一个部件,可以考虑将该部件重新转到parent ,而不是使用此函数。
[signal]
void QWidget::customContextMenuRequested(const QPoint &pos)
当窗口小部件的contextMenuPolicy 是Qt::CustomContextMenu ,且用户请求在窗口小部件上使用上下文菜单时,就会发出该信号。位置pos 是 widget 接收到的上下文菜单事件的位置。通常这是以部件坐标为单位的。但QAbstractScrollArea 及其子类除外,它们将上下文菜单事件映射到viewport() 的坐标上。
另请参阅 mapToGlobal(),QMenu, 和contextMenuPolicy 。
[protected]
void QWidget::destroy(bool destroyWindow = true, bool destroySubWindows = true)
释放窗口系统资源。如果destroyWindow 为 true,则销毁窗口小部件。
destroy()会递归调用所有子窗口小部件,并为destroyWindow 参数传递destroySubWindows 。要对子窗口小部件的销毁有更多控制,可先有选择地销毁子窗口小部件。
该函数通常从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)
如果正在进行拖动,并且出现以下任何一种情况:光标进入此 widget、光标在此 widget 内移动,或者在此 widget 拥有焦点时按下键盘上的修改键,则会调用此事件处理程序。事件将通过event 参数传递。
有关如何在应用程序中提供拖放功能的概述,请参阅拖放文档。
另请参阅 QDrag 和QDragMoveEvent 。
[virtual protected]
void QWidget::dropEvent(QDropEvent *event)
拖放到该部件上时,该事件处理程序将被调用。该事件通过event 参数传递。
有关如何在应用程序中提供拖放功能的概述,请参阅拖放文档。
另请参阅 QDrag 和QDropEvent 。
WId QWidget::effectiveWinId() const
返回 widget 的有效窗口系统标识符,即本地父窗口系统标识符。
如果 widget 是本地 widget,该函数将返回本地 widget ID。否则,将返回第一个本地父 widget(即包含该 widget 的顶级 widget)的窗口 ID。
注意: 我们建议您不要存储此值,因为它很可能在运行时发生变化。
另请参见 nativeParentWidget()。
void QWidget::ensurePolished() const
确保 Widget 及其子控件已通过QStyle 进行了润色(即具有合适的字体和调色板)。
QWidget 在完全构建后但首次显示前调用此函数。如果您想在执行操作前确保 widget 已抛光,例如,在重新实现 widget 的 () 时可能需要正确的字体大小,则可以调用此函数。请注意,该函数是从 () 的默认实现中调用sizeHint sizeHint的。
抛光功能适用于在调用所有构造函数(基类和子类的构造函数)后必须进行的最终初始化。
如果需要在部件抛光时更改某些设置,可重新实现event() 并处理QEvent::Polish 事件类型。
注:该函数声明为常量,因此可以从其他常量函数(如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 的 widget 指针。
窗口标识符类型取决于底层窗口系统,实际定义请参见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 为真,则向前搜索,如果next 为假,则向后搜索。
有时,您需要重新实现这个函数。例如,网络浏览器可能会重新执行该函数,以向前或向后移动 "当前活动链接",并仅在到达 "页面 "上的最后或第一个链接时才调用 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
返回 widget 当前字体的字体信息。等同于QFontInfo(widget->font())
。
另请参阅 font()、fontMetrics() 和setFont()。
QFontMetrics QWidget::fontMetrics() const
返回 widget 当前字体的度量值。等同于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)))
将 widget 渲染成受给定rectangle 限制的像素图。如果 widget 有任何子控件,也会在适当的位置绘制。
如果指定的矩形大小无效(默认),则会绘制整个 widget。
注: 可通过元对象系统和 QML 调用此函数。请参见Q_INVOKABLE 。
void QWidget::grabGesture(Qt::GestureType gesture, Qt::GestureFlags flags = Qt::GestureFlags())
通过特定flags 将 widget 订阅到指定的gesture 。
另请参阅 ungrabGesture() 和QGestureEvent 。
void QWidget::grabKeyboard()
抓取键盘输入。
在调用releaseKeyboard() 之前,该部件会接收所有键盘事件;其他部件则不会接收任何键盘事件。鼠标事件不受影响。如果要抓取鼠标事件,请使用grabMouse() 。
除了不会接收任何键盘事件外,焦点部件不受影响。setFocus() 会像往常一样移动焦点,但新的焦点部件只有在调用releaseKeyboard() 后才会接收键盘事件。
如果当前有其他部件正在抓取键盘输入,则会先释放该部件的抓取。
另请参阅 releaseKeyboard()、grabMouse()、releaseMouse() 和focusWidget()。
void QWidget::grabMouse()
抓取鼠标输入。
在调用releaseMouse() 之前,该 widget 会接收所有鼠标事件;其他 widget 则不会接收任何鼠标事件。键盘事件不受影响。如果要抓取键盘事件,请使用grabKeyboard() 。
警告: 鼠标抓取应用程序中的错误经常会锁定终端。请谨慎使用此功能,并考虑在调试时使用-nograb
命令行选项。
使用 Qt 时很少需要抓取鼠标,因为 Qt 抓取和释放鼠标都很合理。特别是,当鼠标按钮被按下时,Qt 会抓取鼠标,并一直保持到最后一个按钮被释放。
注意: 只有可见部件才能抓取鼠标输入。如果某个部件的isVisible() 返回false
,则该部件不能调用 grabMouse()。
注意: 在 Windows 上,只有当鼠标位于进程所拥有的窗口内时,grabMouse() 才会起作用。在 macOS 上,只有当鼠标位于该 widget 的框架内时,grabMouse() 才会起作用。
另请参阅 releaseMouse()、grabKeyboard() 和releaseKeyboard()。
void QWidget::grabMouse(const QCursor &cursor)
此函数重载 grabMouse()。
抓取鼠标输入并改变光标形状。
光标将呈现cursor 的形状(只要鼠标焦点被抓取),在调用releaseMouse()() 之前,该窗口小部件将是唯一一个接收鼠标事件的窗口小部件。
警告: 抓取鼠标可能会锁定终端。
注: 请参阅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 事件,但 "明确 "标志将设为 true。
警告: 通常情况下,您不需要使用该函数;相反,您可以使用所需的快捷键序列创建QActions(如果您还需要等效的菜单选项和工具栏按钮),或者创建QShortcuts(如果您只需要快捷键序列)。QAction 和QShortcut 都会为您处理所有事件过滤,并在用户触发按键序列时提供触发信号,因此比这个低级函数更容易使用。
另请参见 releaseShortcut() 和setShortcutEnabled()。
QGraphicsEffect *QWidget::graphicsEffect() const
graphicsEffect 函数返回指向 widget 图形效果的指针。
如果 widget 没有图形效果,则返回nullptr
。
另请参阅 setGraphicsEffect().
QGraphicsProxyWidget *QWidget::graphicsProxyWidget() const
返回图形视图中相应嵌入部件的代理部件;否则返回nullptr
。
另请参阅 QGraphicsProxyWidget::createProxyForChildWidget() 和QGraphicsScene::addWidget()。
bool QWidget::hasEditFocus() const
如果此 widget 当前具有编辑焦点,则返回true
;否则返回 false。
此功能仅在 Qt for Embedded Linux 中可用。
另请参阅 setEditFocus() 和QApplication::navigationMode()。
[virtual]
bool QWidget::hasHeightForWidth() const
如果 widget 的首选高度取决于其宽度,则返回true
;否则返回false
。
[virtual]
int QWidget::heightForWidth(int w) const
在给定宽度w 的情况下,返回此 widget 的首选高度。
如果此 widget 有布局,默认实现将返回布局的首选高度。如果没有布局,默认实现将返回 -1 表示首选高度与宽度无关。
[slot]
void QWidget::hide()
隐藏 widget。该函数等同于setVisible(false)。
另请参阅 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 钢笔、背景和字体,使其与给定 widget 的相同。当绘画器在QWidget 上打开时,该函数将被自动调用。
[virtual protected]
void QWidget::inputMethodEvent(QInputMethodEvent *event)
该事件处理程序用于事件event ,可在子类中重新实现,以接收输入法组成事件。当输入法的状态发生变化时,该处理程序将被调用。
请注意,在创建自定义文本编辑部件时,必须明确设置Qt::WA_InputMethodEnabled window 属性(使用setAttribute() 函数),才能接收输入法事件。
默认实现调用 event->ignore(),它会拒绝输入法事件。详情请参见QInputMethodEvent 文档。
另请参阅 event() 和QInputMethodEvent 。
[virtual]
QVariant QWidget::inputMethodQuery(Qt::InputMethodQuery query) const
该方法仅适用于输入部件。输入法使用它来查询 widget 的一组属性,以便支持复杂的输入法操作,如支持周围文本和重新转换。
query 指定要查询的属性。
另请参阅 inputMethodEvent(),QInputMethodEvent,QInputMethodQueryEvent, 和inputMethodHints 。
void QWidget::insertAction(QAction *before, QAction *action)
将操作action 插入该 widget 的操作列表,位于操作before 之前。如果before 是nullptr
或before 不是该 widget 的有效操作,则会追加该操作。
QWidget 的每个操作只能有一个。
另请参阅 removeAction(),addAction(),QMenu,contextMenuPolicy, 和actions() 。
void QWidget::insertActions(QAction *before, const QList<QAction *> &actions)
将操作actions 插入此 widget 的操作列表,位于操作before 之前。如果before 是nullptr
或before 不是该 widget 的有效操作,则会追加该操作。
一个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() 时,隐藏的 widget 才会变为可见。当父部件显示时,它不会自动显示。
要检查可见性,请使用 !isVisible() 代替(注意感叹号)。
isHidden() 意味着 !isVisible(),但一个部件可以同时不可见和不隐藏。作为不可见部件的子部件的部件就属于这种情况。
在以下情况下,部件是隐藏的
- 它们是作为独立窗口创建的、
- 作为可见部件的子部件创建、
- hide() 或setVisible(false) 被调用。
bool QWidget::isVisibleTo(const QWidget *ancestor) const
如果在ancestor 显示时该窗口小部件将变为可见,则返回true
;否则返回false
。
如果窗口部件本身或任何父窗口(不包括ancestor )都没有被明确隐藏,则返回 true。
如果窗口小部件被屏幕上的其他窗口遮挡,但如果它或它们被移动,该函数仍会返回 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
返回已安装在此 widget 上的布局管理器,如果未安装布局管理器,则返回nullptr
。
布局管理器会设置已添加到布局中的 widget 子控件的几何图形。
另请参阅 setLayout(),sizePolicy() 和布局管理。
[virtual protected]
void QWidget::leaveEvent(QEvent *event)
该事件处理程序可在子类中重新实现,以接收通过event 参数传递的部件离开事件。
当鼠标光标离开部件时,离开事件就会发送到部件。
另请参阅 enterEvent()、mouseMoveEvent() 和event()。
[slot]
void QWidget::lower()
将 widget 降到父 widget 堆栈的底部。
调用后,该 widget 将被任何重叠的同级 widget 遮挡。
另请参阅 raise() 和stackUnder()。
[since 6.0]
QPointF QWidget::mapFrom(const QWidget *parent, const QPointF &pos) const
将 Widget 坐标pos 从parent 的坐标系转换为该 Widget 的坐标系。parent 必须不是nullptr
,而且必须是调用 widget 的父级。
此函数在 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 转换为部件坐标。
如果 widget 没有父级,则与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
将 widget 坐标pos 转换为parent 的坐标系。parent 必须不是nullptr
,并且必须是调用 widget 的父级。
此函数在 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
将 Widget 坐标pos 转换为全局屏幕坐标。例如,mapToGlobal(QPointF(0,0))
将给出 widget 左上角像素的全局坐标。
此函数在 Qt 6.0 中引入。
另请参阅 mapFromGlobal()、mapTo() 和mapToParent()。
QPoint QWidget::mapToGlobal(const QPoint &pos) const
这是一个重载函数。
[since 6.0]
QPointF QWidget::mapToParent(const QPointF &pos) const
将 widget 坐标pos 转换为父 widget 中的坐标。
如果 widget 没有父 widget,则与mapToGlobal() 相同。
此函数在 Qt 6.0 中引入。
另请参阅 mapFromParent()、mapTo()、mapToGlobal() 和underMouse()。
QPoint QWidget::mapToParent(const QPoint &pos) const
这是一个重载函数。
QRegion QWidget::mask() const
返回当前在 widget 上设置的屏蔽。如果未设置掩码,返回值将是一个空区域。
另请参阅 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 ,可在子类中重新实现,以接收 widget 的鼠标双击事件。
默认实现调用mousePressEvent() 。
注意: 除双击事件外,该 widget 还将接收鼠标按下和鼠标释放事件。如果与该 widget 重叠的另一个 widget 在按下或释放事件后消失,那么该 widget 将只接收双击事件。开发人员应确保应用程序能正确解释这些事件。
另请参阅 mousePressEvent(),mouseReleaseEvent(),mouseMoveEvent(),event() 和QMouseEvent 。
[static]
QWidget *QWidget::mouseGrabber()
返回当前抓取鼠标输入的部件。
如果此应用程序中没有当前正在抓取鼠标的部件,则返回nullptr
。
另请参阅 grabMouse() 和keyboardGrabber()。
[virtual protected]
void QWidget::mouseMoveEvent(QMouseEvent *event)
event 的事件处理程序,可以在子类中重新实现,以接收部件的鼠标移动事件。
如果关闭鼠标跟踪功能,只有在移动鼠标时按下鼠标按钮,才会发生鼠标移动事件。如果开启了鼠标跟踪功能,即使没有按下鼠标按钮,也会发生鼠标移动事件。
QMouseEvent::pos() 报告鼠标光标相对于此 widget 的位置。对于按下和松开事件,位置通常与上次鼠标移动事件的位置相同,但如果用户的手晃动,位置可能会不同。这是底层窗口系统的特性,与 Qt 无关。
如果您想在鼠标移动时立即显示工具提示(例如,使用 QMouseEvent::pos() 获取鼠标坐标并将其显示为工具提示),您必须首先如上所述启用鼠标跟踪。然后,为了确保立即更新工具提示,您必须在实现 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 和Scribble 示例。
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 事件并发送给 widgets。
注意: 只有当窗口部件具有本地窗口句柄时,事件才会传递给该事件处理程序。
注: 此函数是 Qt 4 的事件过滤函数 x11Event()、winEvent() 和 macEvent() 的上层。
平台 | 事件类型标识符 | 消息类型 | 结果类型 |
---|---|---|---|
窗口 | "windows_generic_MSG"(一般 MSG | MSG * | LRESULT |
MacOS | "NSEvent | NSEvent * XCB | |
XCB | "xcb_generic_event_t | xcb_generic_event_t * |
另请参见 QAbstractNativeEventFilter 。
QWidget *QWidget::nativeParentWidget() const
返回此 widget 的原生父对象,即具有系统标识符的下一个祖先 widget,如果没有任何原生父对象,则返回nullptr
。
另请参见 effectiveWinId()。
QWidget *QWidget::nextInFocusChain() const
返回此 widget 焦点链中的下一个 widget。
另请参阅 previousInFocusChain()。
void QWidget::overrideWindowFlags(Qt::WindowFlags flags)
将窗口部件的窗口标志设置为flags ,而不告诉窗口系统。
警告: 除非您真的知道自己在做什么,否则不要调用此函数。
另请参阅 setWindowFlags() 。
[override virtual]
QPaintEngine *QWidget::paintEngine() const
重实现:QPaintDevice::paintEngine() 常量。
返回 widget 的绘制引擎。
请注意,用户不应明确调用此函数,因为它仅用于重新实现目的。该函数由 Qt 内部调用,默认实现可能并不总是返回有效指针。
[virtual protected]
void QWidget::paintEvent(QPaintEvent *event)
该事件处理程序可在子类中重新实现,以接收event 中传递的绘制事件。
绘制事件是重新绘制全部或部分窗口部件的请求。发生该事件的原因如下:
许多部件在被要求时可以简单地重新绘制整个表面,但有些速度较慢的部件需要进行优化,只绘制所要求的区域: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, 和模拟时钟。
QWidget *QWidget::parentWidget() const
返回此 widget 的父 widget,如果没有父 widget,则返回nullptr
。
QWidget *QWidget::previousInFocusChain() const
previousInFocusChain 函数返回此 widget 焦点链中的前一个 widget。
另请参阅 nextInFocusChain()。
[slot]
void QWidget::raise()
将此 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 事件(除非它有其他按键序列相同的快捷方式)。
警告: 由于 Qt 的快捷方式系统会在快捷方式的父窗口小部件被销毁时自动删除快捷方式,因此通常不需要使用此函数。最好使用QAction 或QShortcut 来处理快捷方式,因为它们比这个低级函数更容易使用。还要注意的是,这种操作的成本很高。
另请参阅 grabShortcut() 和setShortcutEnabled()。
void QWidget::removeAction(QAction *action)
从该 widget 的操作列表中删除操作action 。
另请参阅 insertAction()、actions() 和insertAction()。
void QWidget::render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
使用renderFlags 决定渲染方式,将此 widget 的sourceRegion 渲染至target 。渲染从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))
这是一个重载函数。
将 widget 渲染到painter 的QPainter::device() 中。
渲染时将使用应用于painter 的变换和设置。
注意: painter 必须处于活动状态。在 macOS 上,widget 将渲染为QPixmap ,然后由painter 绘制。
另请参阅 QPainter::device() 。
[slot]
void QWidget::repaint()
通过立即调用paintEvent() 直接重绘部件,除非已禁用更新或部件已隐藏。
我们建议只有在需要立即重绘(例如在动画期间)时才使用 repaint()。在大多数情况下,update() 更好,因为它允许 Qt 优化速度并尽量减少闪烁。
警告: 如果在一个本身可能从paintEvent() 调用的函数中调用 repaint(),可能会产生无限递归。update() 函数绝不会导致递归。
另请参阅 update()、paintEvent() 和setUpdatesEnabled()。
void QWidget::repaint(const QRect &rect)
这是一个重载函数。
该版本会在 widget 内重新绘制一个矩形rect 。
void QWidget::repaint(const QRegion &rgn)
这是一个重载函数。
该版本将重新绘制 widget 内部的一个区域rgn 。
void QWidget::repaint(int x, int y, int w, int h)
这是一个重载函数。
该版本会在 widget 内重新绘制一个矩形 (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() 访问。
处理完调整大小事件后,widget 将立即被擦除并收到一个绘制事件。无需(或不应)在此处理程序中进行绘制。
另请参阅 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)
向右滚动 Widget 及其子dx 像素,向下滚动dy 。dx 和dy 都可以是负数。
滚动后,部件将收到需要重新绘制区域的绘制事件。对于 Qt 知道是不透明的部件,这只是新露出的部分。例如,如果一个不透明部件向左滚动了 8 个像素,那么只有右边 8 个像素宽的条纹需要更新。
由于默认情况下,部件会传播其父部件的内容,因此需要设置autoFillBackground 属性,或使用setAttribute() 设置Qt::WA_OpaquePaintEvent 属性,才能使部件不透明。
对于使用内容传播的 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)
如果on 为 true,则设置该 widget 的属性attribute ;否则清除该属性。
另请参阅 testAttribute().
void QWidget::setBackgroundRole(QPalette::ColorRole role)
将 widget 的背景角色设置为role 。
背景角色定义了 widgetpalette 中用于渲染背景的笔刷。
如果role 是QPalette::NoRole ,那么 widget 将继承其父节点的背景角色。
请注意,样式可以自由选择调色板中的任何颜色。如果使用 setBackgroundRole() 达不到想要的效果,可以修改调色板或设置样式表。
另请参阅 backgroundRole() 和foregroundRole()。
void QWidget::setBaseSize(int basew, int baseh)
这是一个重载函数。
它与 setBaseSize(QSize(basew,baseh)) 相对应。将窗口小部件的基本尺寸设置为宽度basew 和高度baseh 。
注: 属性baseSize 的设置函数。
void QWidget::setContentsMargins(int left, int top, int right, int bottom)
设置 widget 内容周围的边距大小为left,top,right, 和bottom 。边距由布局系统使用,子类可以使用边距指定要绘制的区域(例如,不包括框架)。
更改 margins 会触发resizeEvent().
另请参阅 contentsRect() 和contentsMargins()。
void QWidget::setContentsMargins(const QMargins &margins)
这是一个重载函数。
setContentsMargins 函数用于设置 widget 内容的边距。
设置 widget 内容周围的边距,其大小由margins 决定。边距由布局系统使用,子类可使用边距指定要绘制的区域(例如,不包括框架)。
更改边距将触发resizeEvent() 。
另请参阅 contentsRect() 和contentsMargins()。
[slot]
void QWidget::setDisabled(bool disable)
如果disable 为 true,则禁用部件输入事件;否则启用输入事件。
更多信息请参阅enabled 文档。
另请参阅 isEnabledTo(),QKeyEvent,QMouseEvent, 和changeEvent().
void QWidget::setEditFocus(bool enable)
如果enable 为真,则使该 widget 具有编辑焦点,在这种情况下,Qt::Key_Up 和Qt::Key_Down 将正常传递给该 widget;否则,Qt::Key_Up 和Qt::Key_Down 用于更改焦点。
此功能仅在 Qt for Embedded Linux 中可用。
另请参阅 hasEditFocus() 和QApplication::navigationMode()。
void QWidget::setFixedHeight(int h)
将 widget 的最小和最大高度都设置为h ,而不改变宽度。提供方便。
另请参阅 sizeHint()、minimumSize()、maximumSize() 和setFixedSize()。
void QWidget::setFixedSize(const QSize &s)
将 widget 的最小和最大尺寸都设置为s ,从而防止其增大或缩小。
这将覆盖QLayout 设置的默认大小限制。
要移除限制,请将大小设置为QWIDGETSIZE_MAX 。
另外,如果您希望根据内容固定 widget 的大小,可以调用QLayout::setSizeConstraint(QLayout::SetFixedSize);
另请参阅 maximumSize 和minimumSize 。
void QWidget::setFixedSize(int w, int h)
这是一个重载函数。
将小工具的宽度设为w ,高度设为h 。
void QWidget::setFixedWidth(int w)
将 widget 的最小和最大宽度都设置为w ,而不改变高度。提供方便。
另请参阅 sizeHint()、minimumSize()、maximumSize() 和setFixedSize()。
void QWidget::setFocus(Qt::FocusReason reason)
如果此窗口部件或其父级部件之一是active window ,则将键盘输入焦点赋予此窗口部件(或其焦点代理)。reason 参数将传入此函数发送的任何焦点事件中,用于解释导致窗口部件获得焦点的原因。如果窗口未激活,则当窗口激活时,该部件将获得焦点。
首先,会向焦点窗口部件(如果有)发送一个焦点即将改变事件,告诉它即将失去焦点。然后,焦点发生变化,焦点移出事件会发送到前一个焦点项,焦点移入事件会发送到新的焦点项,告诉它刚刚收到焦点。(如果焦点进入和焦点移出的部件相同,则不会发生任何情况)。
注意: 在嵌入式平台上,setFocus() 不会导致输入法打开输入面板。如果要实现这一点,必须自行向窗口部件发送QEvent::RequestSoftwareInputPanel 事件。
setFocus()会向窗口部件提供焦点,而不管其焦点策略如何,但不会清除任何键盘抓取(请参阅grabKeyboard() )。
需要注意的是,如果窗口部件是隐藏的,则在显示之前不会接受焦点。
警告: 如果在一个函数中调用 setFocus(),而该函数本身可能会被focusOutEvent() 或focusInEvent() 调用,则可能会出现无限递归。
另请参阅 hasFocus(),clearFocus(),focusInEvent(),focusOutEvent(),setFocusPolicy(),focusWidget(),QApplication::focusWidget(),grabKeyboard(),grabMouse(),小工具中的键盘焦点,以及QEvent::RequestSoftwareInputPanel 。
[slot]
void QWidget::setFocus()
这是一个重载函数。
如果此部件或其父级部件之一是active window ,则将键盘输入焦点赋予此部件(或其焦点代理)。
void QWidget::setFocusProxy(QWidget *w)
将 widget 的焦点代理设置为 widgetw 。如果w 是nullptr
,函数会重置该部件,使其没有焦点代理。
有些 widget 可以 "有焦点",但会创建一个子 widget(如QLineEdit )来实际处理焦点。在这种情况下,部件可以将行编辑设置为其焦点代理。
setFocusProxy() 设置了当 "此部件 "获得焦点时实际获得焦点的部件。如果存在焦点代理,setFocus() 和hasFocus() 将对焦点代理进行操作。如果 "此窗口部件 "是焦点窗口部件,则 setFocusProxy() 会将焦点移至新的焦点代理。
另请参见 focusProxy()。
void QWidget::setForegroundRole(QPalette::ColorRole role)
将 widget 的前景角色设置为role 。
前景角色定义了用于绘制前景的 widgetpalette 中的颜色。
如果role 是QPalette::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)
setGraphicsEffect 函数用于设置 widget 的图形效果。
该函数将effect 设置为 widget 的效果。如果该 widget 上已安装了效果,QWidget 将在安装新的effect 之前删除现有效果。
如果effect 是安装在其他 widget 上的效果,setGraphicsEffect() 将删除该 widget 上的效果并将其安装到此 widget 上。
QWidget 获取 的所有权。effect
注: 该函数将在自身及其所有子部件上应用效果。
注: 基于 OpenGL 的 widget(如 QGLWidget、QOpenGLWidget 和QQuickWidget )不支持图形效果。
另请参阅 graphicsEffect() 。
[slot]
void QWidget::setHidden(bool hidden)
方便函数,与setVisible(!hidden) 等价。
另请参见 isHidden().
void QWidget::setLayout(QLayout *layout)
将此 widget 的布局管理器设置为layout 。
如果该 widget 上已经安装了布局管理器,QWidget 不会让您安装另一个布局管理器。您必须先删除现有的布局管理器(由layout() 返回),然后才能使用新布局调用 setLayout()。
如果layout 是另一个部件上的布局管理器,setLayout() 将重新分配布局,使其成为此部件的布局管理器。
举例说明
QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(formWidget); setLayout(layout);
调用此函数的另一种方法是将此 widget 传递给布局的构造函数。
QWidget 将获得layout 的所有权。
void QWidget::setMask(const QBitmap &bitmap)
只显示bitmap 对应 1 位的部件像素。如果该区域包括 widget 的rect() 以外的像素,则该区域的窗口系统控制可能可见,也可能不可见,具体取决于平台。
请注意,如果区域特别复杂,这种效果可能会很慢。
下面的代码展示了如何使用带有 alpha 通道的图像为 widget 生成遮罩:
QLabel topLevelLabel; QPixmap pixmap(":/images/tux.png"); topLevelLabel.setPixmap(pixmap); topLevelLabel.setMask(pixmap.mask());
这段代码所显示的标签将使用其包含的图像进行遮罩,看起来就像直接在屏幕上绘制了一幅不规则形状的图像。
蒙版部件仅在其可见部分接收鼠标事件。
另请参阅 mask()、clearMask() 和windowOpacity()。
void QWidget::setMask(const QRegion ®ion)
这是一个重载函数。
仅使窗口部件与region 重叠的部分可见。如果该区域包括 widgetrect() 以外的像素,则该区域的窗口系统控件可能可见也可能不可见,具体取决于平台。
由于QRegion 允许创建任意复杂的区域,因此可以根据最不规则的窗口形状制作 widget 遮罩,甚至允许显示带孔的 widget。需要注意的是,如果区域特别复杂,这种效果可能会比较慢。
窗口遮罩用于向窗口系统提示,应用程序不希望遮罩以外的区域出现鼠标事件。在大多数系统中,蒙版还会导致粗略的视觉剪切。如 "半透明背景 "示例所示,要获得平滑的窗口边缘,可使用半透明背景和反锯齿绘制。
另请参见 windowOpacity 。
void QWidget::setMaximumSize(int maxw, int maxh)
这是一个重载函数。
该函数对应于 setMaximumSize(QSize(maxw,maxh)) 。将最大宽度设为maxw ,最大高度设为maxh 。
注: 属性maximumSize 的设置函数。
void QWidget::setMinimumSize(int minw, int minh)
这是一个重载函数。
该函数对应于 setMinimumSize(QSize(minw, minh))。将最小宽度设为minw ,将最小高度设为minh 。
注: 属性minimumSize 的设置函数。
void QWidget::setParent(QWidget *parent)
将 widget 的父节点设置为parent ,并重置窗口标志。Widget 将移动到新父 Widget 的位置 (0, 0)。
如果新的父窗口小部件位于不同的窗口中,则重新设置父窗口小部件及其子窗口小部件会以与之前相同的内部顺序附加到新父窗口小部件的tab chain 末尾。如果其中一个被移动的部件有键盘焦点,setParent() 会调用该部件的clearFocus()。
如果新父窗口部件与旧父窗口部件位于同一窗口,则设置父窗口部件不会改变标签页顺序或键盘焦点。
如果 "新 "父窗口部件是旧父窗口部件,则此函数不起任何作用。
注意: 作为更改父窗口部件的一部分,该窗口部件会变得不可见,即使它之前是可见的。您必须调用show() 才能使该部件再次可见。
警告: 您不太可能会用到这个函数。如果您有一个动态更改内容的 widget,使用QStackedWidget 会容易得多。
另请参见 setWindowFlags()。
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
这是一个重载函数。
该函数还将 widget 标志f 作为参数。
void QWidget::setScreen(QScreen *screen)
将显示 widget 的屏幕设置为screen 。
设置屏幕只对窗口有意义。如有必要,widget 的窗口将在screen 上重新创建。
注意: 如果屏幕是由多个屏幕组成的虚拟桌面的一部分,窗口不会自动移动到screen 。要相对于屏幕放置窗口,请使用屏幕的 topLeft() 位置。
另请参阅 screen() 和QWindow::setScreen()。
void QWidget::setShortcutAutoRepeat(int id, bool enable = true)
如果enable 为 true,则启用自动重复给定id 的快捷方式;否则禁用。
另请参阅 grabShortcut() 和releaseShortcut()。
void QWidget::setShortcutEnabled(int id, bool enable = true)
如果enable 为 true,则启用给定id 的快捷方式;否则禁用该快捷方式。
警告: 您通常不需要使用此函数,因为 Qt 的快捷方式系统会在部件隐藏/可见、获得或失去焦点时自动启用/禁用快捷方式。最好使用QAction 或QShortcut 来处理快捷方式,因为它们比这个低级函数更容易使用。
另请参阅 grabShortcut() 和releaseShortcut()。
void QWidget::setSizeIncrement(int w, int h)
这是一个重载函数。
将 x(宽度)尺寸增量设置为w ,将 y(高度)尺寸增量设置为h 。
注: 属性sizeIncrement 的设置函数。
void QWidget::setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
这是一个重载函数。
将 widget 的尺寸策略设置为horizontal 和vertical ,采用标准拉伸,不以高换宽。
注: 属性sizePolicy 的设置函数。
另请参阅 QSizePolicy::QSizePolicy() 。
void QWidget::setStyle(QStyle *style)
将窗口小部件的图形用户界面样式设置为style 。样式对象的所有权不会转移。
如果未设置样式,窗口小部件将使用应用程序的样式QApplication::style() 代替。
设置 widget 的样式对现有或未来的子 widget 没有影响。
警告 此函数尤其适用于演示目的,即展示 Qt 的样式功能。实际应用程序应避免使用该函数,而应使用统一的图形用户界面样式。
警告: 自定义QStyle 子类目前不支持 Qt XML 样式表。我们计划在未来的版本中解决这个问题。
另请参阅 style(),QStyle,QApplication::style(), 和QApplication::setStyle().
[static]
void QWidget::setTabOrder(QWidget *first, QWidget *second)
将second 部件放在first 部件之后。
这实际上是从其焦点链中移除second 微件,并将其插入first 微件之后。
请注意,由于second widget 的选项卡顺序已更改,因此应按如下方式排序:
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 起:有子控件作为焦点代理的 widget 被理解为复合 widget。在一个或两个复合 widget 之间设置选项卡顺序时,每个复合 widget 内部的本地选项卡顺序将被保留。这意味着,如果两个窗口部件都是复合窗口部件,产生的制表符顺序将是从first 中的最后一个子窗口部件到second 中的第一个子窗口部件。
另请参阅 setFocusPolicy(),setFocusProxy() 和Widget 中的键盘焦点。
[static, since 6.6]
void QWidget::setTabOrder(std::initializer_list<QWidget *> widgets)
这是一个重载函数。
通过调用QWidget::setTabOrder(QWidget *, QWidget *) 来设置widgets 列表中每对连续部件的制表符顺序。
与其像这样手动设置每对 widget:
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
该调用不会创建一个封闭的标签聚焦循环。如果有更多 widget 采用Qt::TabFocus 焦点策略,则在d
上进行标签操作会将焦点移至这些 widget 中的一个,而不会移回a
。
该功能在 Qt 6.6 中引入。
另请参阅 setFocusPolicy(),setFocusProxy() 和部件中的键盘焦点。
void QWidget::setWindowFlag(Qt::WindowType flag, bool on = true)
如果on 为 true,则设置窗口标志flag ;否则清除该标志。
另请参阅 setWindowFlags()、windowFlags() 和windowType()。
void QWidget::setWindowRole(const QString &role)
将窗口的角色设置为role 。这只对 X11 上的窗口有意义。
另请参阅 windowRole() 。
void QWidget::setWindowState(Qt::WindowStates windowState)
将窗口状态设置为windowState 。窗口状态是Qt::WindowState :Qt::WindowMinimized,Qt::WindowMaximized,Qt::WindowFullScreen, 和Qt::WindowActive 的 OR 编辑组合。
如果窗口不可见(即isVisible() 返回false
),窗口状态将在调用show() 时生效。对于可见窗口,变化是即时的。例如,要在全屏模式和正常模式之间切换,请使用以下代码:
w->setWindowState(w->windowState() ^ Qt::WindowFullScreen);
要恢复和激活最小化窗口(同时保留其最大化和/或全屏状态),请使用以下代码:
w->setWindowState((w->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
调用该函数将隐藏窗口部件。必须调用show() 才能使窗口部件恢复可见。
注意: 在某些窗口系统中,Qt::WindowActive 并非立即生效,在某些情况下可能会被忽略。
窗口状态发生变化时,窗口小部件会收到changeEvent() 类型的QEvent::WindowStateChange 。
另请参阅 Qt::WindowState 和windowState()。
void QWidget::setupUi(QWidget *widget)
为指定的widget 设置用户界面。
注: 该功能适用于源于使用uic 创建的用户界面描述的部件。
另请参阅 在应用程序中使用设计器用户界面文件。
[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 下存在某些问题。这些问题是由于指定 X11 客户端与窗口管理器之间通信的 ICCCM 协议的限制造成的。ICCCM 根本不理解非装饰全屏窗口的概念。因此,你所能做的就是请求一个无边框窗口,并放置和调整它的大小以填满整个屏幕。视窗口管理器而定,这可能行得通,也可能行不通。无边框窗口是使用 MOTIF 提示请求的,几乎所有现代窗口管理器都至少部分支持 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)
将 Widget 置于父 Widget 堆栈中w 的下方。
要做到这一点,widget 本身和w 必须是同级。
QStyle *QWidget::style() const
另请参见 QWidget::setStyle()、QApplication::setStyle() 和QApplication::style()。
[virtual protected]
void QWidget::tabletEvent(QTabletEvent *event)
event 的事件处理程序,可以在子类中重新实现,以接收 widget 的平板事件。
如果重新实现该处理程序,如果不处理该事件,ignore() ,以便部件的父类可以解释该事件,这一点非常重要。
默认实现会忽略该事件。
如果关闭了手写板跟踪功能,只有当手写笔与手写板接触,或在手写笔移动过程中按下至少一个手写笔按钮时,才会发生手写板移动事件。如果开启了平板电脑跟踪功能,即使触控笔悬停在平板电脑附近,没有按下任何按钮,也会发生平板电脑移动事件。
另请参阅 QEvent::ignore(),QEvent::accept(),event(),setTabletTracking() 和QTabletEvent 。
bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const
如果属性attribute 已在此 widget 上设置,则返回true
;否则返回false
。
另请参阅 setAttribute() 。
bool QWidget::underMouse() const
如果部件位于鼠标指针下方,则返回true
;否则返回false
。
在拖放操作过程中,该值不会正确更新。
另请参阅 enterEvent() 和leaveEvent()。
void QWidget::ungrabGesture(Qt::GestureType gesture)
从给定的gesture 类型中取消订阅 widget
另请参阅 grabGesture() 和QGestureEvent 。
[slot]
void QWidget::update()
更新窗口小部件,除非更新被禁用或窗口小部件被隐藏。
该函数不会立即重新绘制,而是在 Qt 返回主事件循环时调度一个绘制事件进行处理。与调用repaint() 相比,这允许 Qt 优化速度,减少闪烁。
多次调用 update() 通常只需一次paintEvent() 调用。
Qt 通常会在调用paintEvent() 之前擦除 Widget 的区域。如果设置了Qt::WA_OpaquePaintEvent widget 属性,该 widget 将负责为其所有像素涂上不透明的颜色。
另请参阅 repaint(),paintEvent(),setUpdatesEnabled() 和模拟时钟。
void QWidget::update(const QRect &rect)
这是一个重载函数。
该版本更新了 widget 内部的矩形rect 。
void QWidget::update(const QRegion &rgn)
这是一个重载函数。
该版本将重新绘制 widget 内部的一个区域rgn 。
void QWidget::update(int x, int y, int w, int h)
这是一个重载函数。
该版本更新了 widget 内部的一个矩形 (x,y,w,h)。
void QWidget::updateGeometry()
通知布局系统该部件已发生变化,可能需要更改几何形状。
如果sizeHint() 或sizePolicy() 已更改,请调用此函数。
对于显式隐藏的 widget,updateGeometry() 函数不起作用。一旦显示部件,布局系统就会收到通知。
[protected slot]
void QWidget::updateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll)
更新 widget 的微焦点,并通知输入方法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
返回 widget 的窗口系统标识符。
原则上是可移植的,但如果您使用它,很可能会做一些非可移植的事情。要小心。
如果一个窗口部件是非本地的(外来的),并且对其调用了 winId(),那么将为该窗口部件提供一个本地句柄。
该值可能会在运行时发生变化。窗口系统标识符发生变化后,将向窗口部件发送类型为QEvent::WinIdChange 的事件。
另请参见 find()。
QWidget *QWidget::window() const
返回此 widget 的窗口,即拥有(或可能拥有)窗口系统框架的下一个祖先 widget。
如果窗口部件是一个窗口,则返回窗口部件本身。
典型用法是更改窗口标题:
aWidget->window()->setWindowTitle("New Window Title");
另请参见 isWindow()。
QWindow *QWidget::windowHandle() const
如果是本地 widget,则返回相关的QWindow 。否则返回 null。
本地 widget 包括顶层 widget、QGLWidget 以及调用了winId() 的子 widget。
[signal]
void QWidget::windowIconChanged(const QIcon &icon)
当窗口图标发生变化时会发出该信号,参数为新的icon 。
注: 属性windowIcon 的通知信号。
QString QWidget::windowRole() const
返回窗口的角色或空字符串。
另请参阅 setWindowRole(),windowIcon, 和windowTitle 。
Qt::WindowStates QWidget::windowState() const
返回当前窗口状态。窗口状态是Qt::WindowState :Qt::WindowMinimized,Qt::WindowMaximized,Qt::WindowFullScreen, 和Qt::WindowActive 的 OR'ed 组合。
另请参阅 Qt::WindowState 和setWindowState()。
[signal]
void QWidget::windowTitleChanged(const QString &title)
当窗口标题发生变化时会发出该信号,参数为新的title 。
注: 属性windowTitle 的通知信号。
Qt::WindowType QWidget::windowType() const
返回此 widget 的窗口类型。这与windowFlags() 和Qt::WindowType_Mask 相同。
另请参阅 windowFlags 。
宏文档
QWIDGETSIZE_MAX
定义QWidget 对象的最大尺寸。
Widget 允许的最大大小为QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX),即QSize (16777215,16777215)。
另请参阅 QWidget::setMaximumSize().
© 2025 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.