Класс QWidget
Класс QWidget является базовым классом всех объектов пользовательского интерфейса. Подробнее...
| Заголовок: | #include <QWidget> |
| qmake: | QT += widgets |
| Наследует: | QObject и QPaintDevice |
| Наследуется от: | QAbstractButton, QAbstractSlider, QAbstractSpinBox, QCalendarWidget, QComboBox, QDesignerActionEditorInterface, QDesignerFormWindowInterface, QDesignerObjectInspectorInterface, QDesignerPropertyEditorInterface, QDesignerWidgetBoxInterface, QDesktopWidget, QDialog, QDialogButtonBox, QDockWidget, QFocusFrame, QFrame, QGroupBox, QKeySequenceEdit, QLineEdit, QMacCocoaViewContainer, QMacNativeWidget, QMainWindow, QMdiSubWindow, QMenu, QMenuBar, QOpenGLWidget, QProgressBar, QQuickWidget, QRubberBand, QSizeGrip, QSplashScreen, QSplitterHandle, QStatusBar, QSvgWidget, QTabBar, QTabWidget, QToolBar, и QWizardPage |
Публичные типы
| Перечисление | ФлагОтрисовки { РисоватьФонОкна, РисоватьПотомки, ИгнорироватьМаску } |
| флаги | ФлагиОтрисовки |
Свойства
Публичные функции
| QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
| virtual | ~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 | курсор() const |
| WId | effectiveWinId() const |
| void | ensurePolished() const |
| Qt::FocusPolicy | focusPolicy() const |
| QWidget * | focusProxy() const |
| QWidget * | focusWidget() const |
| const QFont & | шрифт() const |
| QFontInfo | fontInfo() const |
| QFontMetrics | fontMetrics() const |
| QPalette::ColorRole | foregroundRole() const |
| QRect | frameGeometry() const |
| QSize | frameSize() const |
| const QRect & | geometry() const |
| QPixmap | grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1))) |
| void | grabGesture(Qt::GestureType 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 | переместить(const QPoint &) |
| void | переместить(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 | position() 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(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren)) |
| void | render(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::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 |
| QScreen * | screen() 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 ®ion) |
| 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 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) |
Защищенные Функции
| виртуальный void | actionEvent(QActionEvent *event) |
| виртуальный void | changeEvent(QEvent *event) |
| виртуальный void | closeEvent(QCloseEvent *event) |
| виртуальный void | contextMenuEvent(QContextMenuEvent *event) |
| void | create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true) |
| void | destroy(bool destroyWindow = true, bool destroySubWindows = true) |
| виртуальный void | dragEnterEvent(QDragEnterEvent *event) |
| виртуальный void | dragLeaveEvent(QDragLeaveEvent *event) |
| виртуальный void | dragMoveEvent(QDragMoveEvent *event) |
| виртуальный void | dropEvent(QDropEvent *event) |
| виртуальный void | enterEvent(QEvent *event) |
| виртуальный void | focusInEvent(QFocusEvent *event) |
| bool | focusNextChild() |
| виртуальный bool | focusNextPrevChild(bool next) |
| виртуальный void | focusOutEvent(QFocusEvent *event) |
| bool | focusPreviousChild() |
| виртуальный void | hideEvent(QHideEvent *event) |
| виртуальный void | inputMethodEvent(QInputMethodEvent *event) |
| виртуальный void | keyPressEvent(QKeyEvent *event) |
| виртуальный void | keyReleaseEvent(QKeyEvent *event) |
| виртуальный void | leaveEvent(QEvent *event) |
| виртуальный void | mouseDoubleClickEvent(QMouseEvent *event) |
| виртуальный void | mouseMoveEvent(QMouseEvent *event) |
| виртуальный void | mousePressEvent(QMouseEvent *event) |
| виртуальный void | mouseReleaseEvent(QMouseEvent *event) |
| виртуальный void | moveEvent(QMoveEvent *event) |
| виртуальный bool | nativeEvent(const QByteArray &eventType, void *message, long *result) |
| виртуальный void | paintEvent(QPaintEvent *event) |
| виртуальный void | resizeEvent(QResizeEvent *event) |
| виртуальный void | showEvent(QShowEvent *event) |
| виртуальный void | tabletEvent(QTabletEvent *event) |
| виртуальный void | wheelEvent(QWheelEvent *event) |
Переопределённые защищённые функции
| виртуальный bool | event(QEvent *event) override |
| виртуальный void | initPainter(QPainter *painter) const override |
| виртуальный int | metric(QPaintDevice::PaintDeviceMetric m) const override |
Защищённые слоты
| void | updateMicroFocus() |
Макросы
| QWIDGETSIZE_MAX |
Подробное описание
Виджет — это атом пользовательского интерфейса: он получает события мыши, клавиатуры и другие события от системы окон и рисует своё представление на экране. Каждый виджет прямоугольный, и они упорядочены в порядке Z. Виджет обрезается своим родителем и виджетами, расположенными перед ним.
Виджет, который не вложен в родительский виджет, называется окном. Обычно окна имеют рамку и строку заголовка, хотя также можно создать окна без такой декорации, используя соответствующие флаги типа окна.
Конструктор каждого виджета принимает один или два стандартных аргумента:
-
QWidget *parent = nullptr— родитель нового виджета. Если он равенnullptr(по умолчанию), новый виджет будет окном. В противном случае он будет дочерним элементом parent и будет ограничен геометрией parent (если вы не укажете флаг окна Qt::Window). -
Qt::WindowFlags f = { }(применимо) задаёт флаги окна; по умолчанию подходит для почти всех виджетов, но чтобы, например, получить окно без рамки системы окон, необходимо использовать специальные флаги.
QWidget имеет много функций-членов, но некоторые из них имеют мало непосредственной функциональности; например, QWidget имеет свойство шрифта, но никогда не использует его сам. Существует много подклассов, которые предоставляют реальную функциональность, например, QLabel, QPushButton, QListWidget и QTabWidget.
Главные и дочерние виджеты
Виджет без родительского виджета всегда является независимым окном (главный виджет). Для этих виджетов setWindowTitle() и setWindowIcon() соответственно устанавливают строку заголовка и значок.
Неокно виджеты — это дочерние виджеты, отображаемые внутри своих родительских виджетов. Большинство виджетов в Qt полезны в основном как дочерние виджеты. Например, можно отобразить кнопку как окно верхнего уровня, но большинство людей предпочитают размещать свои кнопки внутри других виджетов, например, QDialog.
На диаграмме показан виджет QGroupBox, используемый для размещения различных дочерних виджетов в макете, предоставляемом QGridLayout. Дочерние виджеты QLabel были выделены, чтобы указать их полные размеры.
Если вы хотите использовать QWidget для размещения дочерних виджетов, обычно необходимо добавить макет в родительский QWidget. Более подробная информация об управлении макетами приведена в разделе Управление макетами.
Композитные виджеты
Когда виджет используется в качестве контейнера для группировки ряда дочерних виджетов, он известен как композитный виджет. Их можно создать, создав виджет с необходимыми визуальными свойствами — например, QFrame — и добавив к нему дочерние виджеты, обычно управляемые макетом. На приведенной выше диаграмме показан такой композитный виджет, созданный с помощью Qt Designer.
Композитные виджеты также можно создать, создав подкласс стандартного виджета, такого как QWidget или QFrame, и добавив необходимый макет и дочерние виджеты в конструктор подкласса. Многие примеры, предоставляемые с Qt, используют этот подход, а также он описан в руководствах Qt по учебникам.
Настраиваемые виджеты и рисование
Поскольку QWidget является подклассом QPaintDevice, подклассы могут использоваться для отображения пользовательского содержимого, которое составляется с помощью ряда операций рисования с экземпляром класса QPainter. Этот подход отличается от подхода на основе холста, используемого Graphics View Framework, где элементы добавляются в сцену приложением и отрисовываются самим фреймворком.
Каждый виджет выполняет все операции рисования внутри своей функции paintEvent(). Она вызывается всякий раз, когда виджет необходимо перерисовать, либо в результате какого-либо внешнего изменения, либо по запросу приложения.
Пример Аналоговых часов демонстрирует, как простой виджет может обрабатывать события рисования.
Рекомендованные размеры и политики размеров
При реализации нового виджета почти всегда полезно переопределить sizeHint(), чтобы предоставить разумный размер по умолчанию для виджета, и установить правильную политику размера с помощью setSizePolicy().
По умолчанию составные виджеты, которые не предоставляют подсказку размера, будут иметь размеры, соответствующие требованиям по пространству их дочерних виджетов.
Политика размера позволяет задать хорошее поведение по умолчанию для системы управления макетом, чтобы другие виджеты могли легко содержать и управлять вашими. Политика размера по умолчанию указывает, что подсказка размера представляет собой предпочтительный размер виджета, и этого часто достаточно для многих виджетов.
Примечание: Размер виджетов верхнего уровня ограничен 2/3 высоты и ширины рабочего стола. Вы можете изменить размер виджета вручную, если эти ограничения недостаточны.
События
Виджеты реагируют на события, обычно вызванные действиями пользователя. Qt доставляет события виджетам, вызывая определённые функции-обработчики событий с экземплярами подклассов QEvent, содержащими информацию о каждом событии.
Если ваш виджет содержит только дочерние виджеты, вам, вероятно, не нужно реализовывать обработчики событий. Если вы хотите обнаружить щелчок мыши в дочернем виджете, вызовите функцию underMouse() дочернего виджета внутри функции mousePressEvent() виджета.
Пример Рисования реализует более широкий набор событий для обработки перемещения мыши, нажатий кнопок и изменения размера окна.
Вам необходимо обеспечить поведение и содержимое для собственных виджетов, но вот краткий обзор событий, относящихся к QWidget, начиная с самых распространённых:
- paintEvent() вызывается всякий раз, когда виджет необходимо перерисовать. Каждый виджет, отображающий пользовательское содержимое, должен реализовать его. Рисование с помощью QPainter может происходить только в paintEvent() или в функции, вызываемой paintEvent().
- resizeEvent() вызывается при изменении размера виджета.
- mousePressEvent() вызывается при нажатии кнопки мыши, когда курсор мыши находится внутри виджета или когда виджет захватил мышь с помощью grabMouse(). Нажатие мыши без отпускания по сути эквивалентно вызову grabMouse().
- mouseReleaseEvent() вызывается при отпускании кнопки мыши. Виджет получает события отпускания мыши, когда он получил соответствующее событие нажатия мыши. Это означает, что если пользователь нажимает мышь внутри вашего виджета, затем перетаскивает мышь куда-то ещё, прежде чем отпустить кнопку мыши, ваш виджет получает событие отпускания. Есть одно исключение: если появляется всплывающее меню, пока удерживается кнопка мыши, это всплывающее меню сразу же захватывает события мыши.
- mouseDoubleClickEvent() вызывается при двойном щелчке пользователем внутри виджета. Если пользователь дважды щелкает, виджет получает событие нажатия мыши, событие отпускания мыши, (событие щелчка мыши,) второе нажатие мыши, это событие и, наконец, второе отпускание мыши. (Возможно получение некоторых событий перемещения мыши, если мышь не удерживается неподвижно во время этой операции.) Невозможно отличить щелчок от двойного щелчка до появления второго щелчка. (Вот одна из причин, почему большинство книг по графическому интерфейсу рекомендуют, чтобы двойные щелчки являлись расширением одиночных щелчков, а не срабатывали как отдельное действие.)
Виджеты, которые принимают ввод с клавиатуры, должны переопределить несколько дополнительных обработчиков событий:
- keyPressEvent() вызывается всякий раз, когда нажимается клавиша, и снова, когда клавиша удерживается достаточно долго, чтобы начать автоповтор. Клавиши Tab и Shift+Tab передаются виджету только в том случае, если они не используются механизмами изменения фокуса. Чтобы принудительно обработать эти клавиши вашим виджетом, необходимо переопределить QWidget::event().
- focusInEvent() вызывается, когда виджет получает фокус клавиатуры (при условии, что вы вызвали setFocusPolicy()). Хорошо спроектированные виджеты указывают, что они владеют фокусом клавиатуры, чётко, но незаметно.
- focusOutEvent() вызывается, когда виджет теряет фокус клавиатуры.
Возможно, вам также потребуется переопределить некоторые менее распространённые обработчики событий:
- mouseMoveEvent() вызывается всякий раз, когда мышь перемещается, удерживая кнопку мыши. Это может быть полезно во время операций перетаскивания. Если вы вызываете setMouseTracking(true), вы получаете события перемещения мыши даже при отсутствии нажатых кнопок. (См. также руководство по перетаскиванию.)
- keyReleaseEvent() вызывается всякий раз, когда клавиша отпускается, и пока она удерживается (если клавиша имеет автоповтор). В этом случае виджет получит пару событий отпускания и нажатия клавиши для каждого повтора. Клавиши Tab и Shift+Tab передаются виджету только в том случае, если они не используются механизмами изменения фокуса. Чтобы принудительно обработать эти клавиши вашим виджетом, необходимо переопределить QWidget::event().
- wheelEvent() вызывается всякий раз, когда пользователь вращает колесо мыши, удерживая фокус на виджете.
- enterEvent() вызывается при входе курсора мыши в область экрана виджета. (Это исключает область экрана, принадлежащую любому дочернему виджету.)
- leaveEvent() вызывается при выходе курсора мыши из области экрана виджета. Если мышь входит в дочерний виджет, это не вызовет leaveEvent().
- moveEvent() вызывается при перемещении виджета относительно его родителя.
- closeEvent() вызывается при закрытии виджета пользователем (или при вызове close()).
Также существуют некоторые довольно необычные события, описанные в документации для QEvent::Type. Для обработки этих событий необходимо переопределить event() напрямую.
В реализации по умолчанию event() обрабатываются клавиши Tab и Shift+Tab (для перемещения фокуса клавиатуры) и передаются большинство других событий одному из более специализированных обработчиков выше.
События и механизм их доставки описаны в Системе событий.
Группы функций и свойств
Стили виджетов
Помимо стандартных стилей виджетов для каждой платформы, виджеты также могут быть стилизованы в соответствии с правилами, указанными в листе стилей. Эта функция позволяет настраивать внешний вид определенных виджетов, чтобы предоставить пользователю визуальные подсказки о их назначении. Например, кнопку можно стилизовать определенным образом, чтобы указать, что она выполняет разрушающее действие.
Использование листов стилей виджетов подробно описано в документе Стили Qt.
Прозрачность и буферизация
Начиная с Qt 4.0, QWidget автоматически использует буферизацию при отрисовке, поэтому нет необходимости писать код буферизации в paintEvent() для избежания мерцания.
Начиная с Qt 4.1, содержимое родительских виджетов по умолчанию распространяется на все их дочерние виджеты, если не установлен Qt::WA_PaintOnScreen. Пользовательские виджеты могут использовать эту функцию, обновляя нестандартные области (для создания непрямоугольных дочерних виджетов) или рисуя с цветом, имеющим менее чем полный альфа-компонент. На рисунке ниже показано, как можно точно настроить атрибуты и свойства пользовательского виджета для достижения различных эффектов.
На рисунке выше представлен полупрозрачный прямоугольный дочерний виджет с удалённой областью, добавленный в родительский виджет (виджет QLabel, отображающий пиксель). Затем задаются различные свойства и атрибуты виджета для достижения разных эффектов:
- В левом виджете не заданы дополнительные свойства или атрибуты виджета. Этот стандартный режим подходит для большинства пользовательских виджетов, использующих прозрачность, нестандартные формы или не заполняющих всю область непрозрачной кистью.
- В центральном виджете задано свойство autoFillBackground. Это свойство используется с пользовательскими виджетами, которые полагаются на виджет для обеспечения фонового изображения по умолчанию и не заполняют всю область непрозрачной кистью.
- В правом виджете установлен атрибут виджета Qt::WA_OpaquePaintEvent. Это указывает, что виджет будет заполнять всю область непрозрачными цветами. Область виджета изначально будет *неинициализирована*, на рисунке она представлена диагональной красной сеткой, просвечивающей через перерисованную область. Атрибут Qt::WA_OpaquePaintArea полезен для виджетов, которые нуждаются в быстрой отрисовке собственного специализированного содержимого и не нуждаются в фоновом заполнении по умолчанию.
Для быстрого обновления пользовательских виджетов простыми цветами фона, таких как виджеты для реального времени или графики, лучше определить подходящий цвет фона (используя setBackgroundRole() с ролью QPalette::Window), установить свойство autoFillBackground и реализовать необходимую функциональность рисования в paintEvent() виджета.
Для быстрого обновления пользовательских виджетов, постоянно рисующих всю область непрозрачным содержимым, например, виджетов потоковой передачи видео, лучше установить атрибут виджета Qt::WA_OpaquePaintEvent, избегая излишних накладных расходов, связанных с перерисовкой фона виджета.
Если у виджета установлен атрибут виджета Qt::WA_OpaquePaintEvent *и* свойство autoFillBackground, атрибут Qt::WA_OpaquePaintEvent имеет приоритет. В зависимости от ваших потребностей, следует выбрать один из них.
Начиная с Qt 4.1, содержимое родительских виджетов также распространяется на стандартные виджеты Qt. Это может привести к неожиданным результатам, если родительский виджет оформлен нестандартно, как показано на рисунке ниже.
Возможности настройки поведения рисования стандартных виджетов Qt без создания подклассов несколько меньше, чем для пользовательских виджетов. Обычно нужный внешний вид стандартного виджета можно получить, установив свойство autoFillBackground.
Создание непрозрачных окон
Начиная с Qt 4.5, стало возможным создавать окна с полупрозрачными областями на системах окон, поддерживающих композицию.
Чтобы включить эту функцию в виджете верхнего уровня, установите его атрибут Qt::WA_TranslucentBackground с помощью setAttribute() и убедитесь, что его фон рисуется непрозрачными цветами в областях, которые должны быть частично прозрачными.
Примечания по платформам:
- X11: Эта функция использует сервер X, поддерживающий визуализацию ARGB и менеджер композиции окон.
- Windows: Для работы с прозрачностью виджету необходимо установить флаг окна Qt::FramelessWindowHint.
Собственные виджеты против чужеродных виджетов
Введённые в Qt 4.4, чужеродные виджеты — это виджеты, неизвестные системе окон. У них нет связанной с ними собственной дескриптора окна. Эта функция значительно ускоряет отрисовку, изменение размеров виджетов и устраняет мерцание.
Если вам требуется старое поведение с собственными окнами, вы можете выбрать один из следующих вариантов:
- Используйте
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флаги QWidget::RenderFlags
Это перечисление описывает, как отображать виджет при вызове QWidget::render().
| Постоянная | Значение | Описание |
|---|---|---|
QWidget::DrawWindowBackground |
0x1 |
Если вы включите этот параметр, фон виджета будет отрисован в целевой объект, даже если autoFillBackground не установлен. По умолчанию этот параметр включён. |
QWidget::DrawChildren |
0x2 |
Если вы включите этот параметр, дочерние элементы виджета будут рекурсивно отрисованы в целевой объект. По умолчанию этот параметр включён. |
QWidget::IgnoreMask |
0x4 |
Если вы включите этот параметр, маска QWidget::mask() виджета будет проигнорирована при отрисовке в целевой объект. По умолчанию этот параметр выключен. |
Это перечисление было введено или изменено в Qt 4.3.
Тип RenderFlags — это псевдоним для QFlags<RenderFlag>. Он хранит логическое ИЛИ из значений RenderFlag.
Документация по свойству
acceptDrops : bool
Это свойство определяет, включены ли события перетаскивания для данного виджета
Установление этого свойства в значение true сообщает системе, что этот виджет может принимать события перетаскивания.
Если виджет является рабочим столом (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().
accessibleName : QString
Это свойство содержит имя виджета, как его видят вспомогательные технологии
Это основное имя, с помощью которого вспомогательные технологии, такие как программы чтения с экрана, объявляют этот виджет. Для большинства виджетов установка этого свойства не требуется. Например, для QPushButton будет использоваться текст кнопки.
Важно установить это свойство, когда виджет не предоставляет никакого текста. Например, кнопка, содержащая только значок, должна установить это свойство, чтобы работать с программами чтения с экрана. Имя должно быть коротким и эквивалентным визуальной информации, передаваемой виджетом.
Это свойство должно быть локализовано.
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | accessibleName() const |
| void | setAccessibleName(const QString &name) |
См. также QWidget::accessibleDescription и QAccessibleInterface::text().
autoFillBackground : bool
Это свойство определяет, автоматически ли заполняется фон виджета
Если включено, это свойство заставит Qt заполнить фон виджета перед вызовом события рисования. Используемый цвет определяется ролью цвета QPalette::Window из палитры виджета.
Кроме того, окна всегда заполняются цветом QPalette::Window, если не установлены атрибуты WA_OpaquePaintEvent или WA_NoSystemBackground.
Это свойство не может быть выключено (т.е. установлено в значение false), если родительский виджет имеет статический градиент для своего фона.
Предупреждение: Используйте это свойство с осторожностью в сочетании с Qt Style Sheets. Когда виджет имеет стиль с допустимым фоном или изображением границы, это свойство автоматически отключается.
По умолчанию это свойство имеет значение false.
Это свойство было добавлено в Qt 4.1.
Функции доступа:
| bool | autoFillBackground() const |
| void | setAutoFillBackground(bool enabled) |
См. также Qt::WA_OpaquePaintEvent, Qt::WA_NoSystemBackground и Прозрачность и двойная буферизация.
baseSize : QSize
Это свойство содержит базовый размер виджета
Базовый размер используется для расчета размера виджета, если виджет определяет sizeIncrement().
По умолчанию для вновь созданного виджета это свойство содержит размер с нулевой шириной и высотой.
Функции доступа:
| QSize | baseSize() const |
| void | setBaseSize(const QSize &) |
| void | setBaseSize(int basew, int baseh) |
См. также setSizeIncrement().
childrenRect : const QRect
Это свойство содержит ограничительный прямоугольник дочерних виджетов
Скрытые дочерние виджеты не учитываются.
По умолчанию для виджета без дочерних виджетов это свойство содержит прямоугольник с нулевой шириной и высотой, расположенный в начале координат.
Функции доступа:
| QRect | childrenRect() const |
См. также childrenRegion() и geometry().
childrenRegion : const QRegion
Это свойство содержит объединенную область, занимаемую дочерними виджетами
Скрытые дочерние виджеты не учитываются.
По умолчанию для виджета без дочерних виджетов это свойство содержит пустую область.
Функции доступа:
| QRegion | childrenRegion() const |
См. также childrenRect(), geometry() и mask().
contextMenuPolicy : Qt::ContextMenuPolicy
Как виджет отображает контекстное меню
Значение этого свойства по умолчанию — Qt::DefaultContextMenu, что означает, что вызывается обработчик contextMenuEvent(). Другие значения: Qt::NoContextMenu, Qt::PreventContextMenu, Qt::ActionsContextMenu и Qt::CustomContextMenu. С Qt::CustomContextMenu генерируется сигнал customContextMenuRequested().
Функции доступа:
| Qt::ContextMenuPolicy | contextMenuPolicy() const |
| void | setContextMenuPolicy(Qt::ContextMenuPolicy policy) |
См. также contextMenuEvent(), customContextMenuRequested() и actions().
cursor : QCursor
Это свойство определяет форму курсора для данного виджета
Курсор мыши примет эту форму, когда будет над этим виджетом. Список предопределенных курсоров см. в списке предопределенных объектов курсора.
Редактор может использовать курсор в виде "прямой линии":
setCursor(Qt::IBeamCursor);
Если курсор не задан или после вызова unsetCursor(), используется курсор родительского виджета.
По умолчанию это свойство содержит курсор со формой Qt::ArrowCursor.
Некоторые реализации базовых окон могут сбросить курсор, если он покидает виджет, даже если мышь захвачена. Если вы хотите установить курсор для всех виджетов, даже когда он находится за пределами окна, рассмотрите использование QGuiApplication::setOverrideCursor().
Функции доступа:
| QCursor | cursor() const |
| void | setCursor(const QCursor &) |
| void | unsetCursor() |
См. также QGuiApplication::setOverrideCursor().
enabled : bool
Это свойство определяет, включен ли виджет
В общем случае, активированный виджет обрабатывает события клавиатуры и мыши; выключенный виджет — нет. Исключение составляет QAbstractButton.
Некоторые виджеты отображаются по-разному, когда они выключены. Например, кнопка может отобразить свою метку серым цветом. Если вашему виджету нужно знать, когда он становится активным или выключенным, вы можете использовать changeEvent() с типом QEvent::EnabledChange.
Выключение виджета неявно отключает всех его дочерних элементов. Включение соответственно включает все дочерние виджеты, если они не были явно отключены. Невозможно явно включить дочерний виджет, который не является окном, пока родительский виджет остается выключенным.
По умолчанию, это свойство равно true.
Функции доступа:
| bool | isEnabled() const |
| void | setEnabled(bool) |
См. также isEnabledTo(), QKeyEvent, QMouseEvent и changeEvent().
focus : const bool
Это свойство указывает, имеет ли данный виджет (или его прокси фокуса) фокус ввода с клавиатуры.
По умолчанию, это свойство равно false.
Примечание: Получение значения этого свойства для виджета фактически эквивалентно проверке того, ссылается ли QApplication::focusWidget() на виджет.
Функции доступа:
| 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
Это свойство содержит шрифт, текущий для виджета.
Это свойство описывает требуемый шрифт виджета. Шрифт используется стилем виджета при отрисовке стандартных компонентов и служит средством обеспечения того, что пользовательские виджеты могут поддерживать согласованность с внешним видом родной платформы. Часто разные платформы или разные стили определяют разные шрифты для приложения.
При назначении нового шрифта виджету свойства этого шрифта комбинируются со стандартным шрифтом виджета для формирования окончательного шрифта виджета. Вы можете вызвать fontInfo(), чтобы получить копию окончательного шрифта виджета. Окончательный шрифт также используется для инициализации шрифта QPainter.
Значение по умолчанию зависит от системной среды. QApplication сохраняет системный/темовый шрифт, который служит по умолчанию для всех виджетов. Также могут быть специальные шрифты по умолчанию для определенных типов виджетов. Вы также можете определить шрифты по умолчанию для виджетов, передавая пользовательский шрифт и имя виджета в QApplication::setFont(). Наконец, шрифт сравнивается с базой данных шрифтов Qt для поиска наилучшего соответствия.
QWidget распространяет явные свойства шрифта от родителя к дочернему элементу. Если вы измените определенное свойство шрифта и назначите этот шрифт виджету, это свойство будет распространено на все дочерние элементы виджета, перезаписывая любые системные значения по умолчанию для этого свойства. Обратите внимание, что шрифты по умолчанию не распространяются на окна (см. isWindow()), если не включен атрибут Qt::WA_WindowPropagation.
Распространение шрифтов в QWidget аналогично распространению палитры.
Текущий стиль, который используется для отрисовки содержимого всех стандартных виджетов Qt, свободен выбирать использование шрифта виджета или, в некоторых случаях, игнорировать его (частично или полностью). В частности, некоторые стили, такие как стиль GTK, стиль Mac и стиль Windows Vista, применяют особые изменения к шрифту виджета для соответствия собственному внешнему виду платформы. Из-за этого гарантии изменения внешнего вида виджета при назначении свойств к шрифту виджета нет. Вместо этого вы можете выбрать применение styleSheet.
Примечание: Если CSS-стили Qt используются для того же виджета, что и setFont(), стили CSS будут иметь приоритет, если настройки конфликтуют.
Функции доступа:
| const QFont & | font() const |
| void | setFont(const QFont &) |
См. также fontInfo() и fontMetrics().
frameGeometry : const QRect
геометрия виджета относительно его родителя, включая любую рамку окна
См. документацию Геометрия окна для обзора проблем с геометрией окон.
По умолчанию, это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана.
Функции доступа:
| QRect | frameGeometry() const |
См. также geometry(), x(), y() и pos().
frameSize : const QSize
Это свойство содержит размер виджета, включая любую рамку окна
По умолчанию, это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана.
Функции доступа:
| QSize | frameSize() const |
fullScreen : const bool
Это свойство указывает, отображается ли виджет в полноэкранном режиме.
Виджет в полноэкранном режиме занимает всю область экрана и не отображает декорации окна, такие как строку заголовка.
По умолчанию, это свойство равно false.
Функции доступа:
| bool | isFullScreen() const |
См. также windowState(), minimized и maximized.
geometry : QRect
Это свойство содержит геометрию виджета относительно его родителя, исключая рамку окна.
При изменении геометрии виджет, если он виден, сразу получает событие перемещения (moveEvent()) и/или событие изменения размера (resizeEvent()). Если виджет в данный момент не виден, гарантируется, что он получит соответствующие события до того, как он будет показан.
Компонент размера корректируется, если он находится вне диапазона, определенного minimumSize() и maximumSize().
Предупреждение: Вызов setGeometry() внутри resizeEvent() или moveEvent() может привести к бесконечной рекурсии.
См. документацию Геометрия окна для обзора проблем с геометрией окон.
По умолчанию, это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана.
Функции доступа:
| 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().
height : const int
Это свойство содержит высоту виджета, исключая рамку окна.
См. документацию Геометрия окна для обзора вопросов геометрии с окнами.
Примечание: Не используйте эту функцию для поиска высоты экрана на рабочем столе с несколькими экранами. Прочитайте это примечание для получения подробностей.
По умолчанию это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана.
Функции доступа:
| int | height() const |
См. также geometry, width и size.
inputMethodHints : Qt::InputMethodHints
Какие специфические подсказки для метода ввода имеет виджет.
Это актуально только для виджетов ввода. Он используется методом ввода для получения подсказок о том, как должен работать метод ввода. Например, если установлен флаг Qt::ImhFormattedNumbersOnly, метод ввода может изменить свои визуальные компоненты, чтобы отразить, что можно вводить только цифры.
Предупреждение: Некоторые виджеты требуют определенных флагов для корректной работы. Для установки флага используйте w->setInputMethodHints(w->inputMethodHints()|f) вместо w->setInputMethodHints(f).
Примечание: Флаги являются только подсказками, поэтому конкретная реализация метода ввода свободна игнорировать их. Если вы хотите быть уверенным, что вводятся определенные типы символов, вы также должны установить QValidator на виджете.
Значение по умолчанию — Qt::ImhNone.
Это свойство было добавлено в Qt 4.6.
Функции доступа:
| Qt::InputMethodHints | inputMethodHints() const |
| void | setInputMethodHints(Qt::InputMethodHints hints) |
См. также inputMethodQuery().
isActiveWindow : const bool
Это свойство указывает, является ли окно этого виджета активным окном.
Активное окно — это окно, содержащее виджет, у которого есть фокус клавиатуры (окно может по-прежнему иметь фокус, если у него нет виджетов или ни один из его виджетов не принимает фокус клавиатуры).
Когда всплывающие окна видимы, это свойство имеет значение true как для активного окна, так и для всплывающего.
По умолчанию это свойство false.
Функции доступа:
| bool | isActiveWindow() const |
См. также activateWindow() и QApplication::activeWindow().
layoutDirection : Qt::LayoutDirection
Это свойство содержит направление выравнивания для этого виджета.
По умолчанию это свойство установлено в Qt::LeftToRight.
Когда направление выравнивания установлено для виджета, оно распространяется на дочерние виджеты, но не на дочерний виджет, являющийся окном, и не на дочерний виджет, для которого явно вызван setLayoutDirection(). Также, дочерние виджеты, добавленные после вызова setLayoutDirection() для родителя, не наследуют направление выравнивания родителя.
Этот метод больше не влияет на направление выравнивания текста начиная с Qt 4.7.
Функции доступа:
| Qt::LayoutDirection | layoutDirection() const |
| void | setLayoutDirection(Qt::LayoutDirection direction) |
| void | unsetLayoutDirection() |
См. также QApplication::layoutDirection.
locale : QLocale
Это свойство содержит локаль виджета.
Пока не установлена специальная локаль, это либо локаль родительского виджета, либо (если этот виджет является виджетом верхнего уровня) — локаль по умолчанию.
Если виджет отображает даты или числа, они должны быть отформатированы с использованием локали виджета.
Это свойство было добавлено в Qt 4.3.
Функции доступа:
| QLocale | locale() const |
| void | setLocale(const QLocale &locale) |
| void | unsetLocale() |
См. также QLocale и QLocale::setDefault().
maximized : const bool
Это свойство указывает, является ли этот виджет максимализированным.
Это свойство актуально только для окон.
Примечание: Из-за ограничений на некоторых системах окон это свойство не всегда сообщает ожидаемые результаты (например, если пользователь на X11 максимализирует окно через менеджер окон, Qt не может отличить это от любого другого изменения размера). Ожидается, что это улучшится по мере развития протоколов менеджеров окон.
По умолчанию это свойство false.
Функции доступа:
| bool | isMaximized() const |
См. также windowState(), showMaximized(), visible, show(), hide(), showNormal() и minimized.
maximumHeight : int
Это свойство содержит максимальную высоту виджета в пикселях.
Это свойство соответствует высоте, хранящейся в свойстве maximumSize.
По умолчанию это свойство содержит значение 16777215.
Примечание: Определение макроса QWIDGETSIZE_MAX ограничивает максимальный размер виджетов.
Функции доступа:
| int | maximumHeight() const |
| void | setMaximumHeight(int maxh) |
См. также maximumSize и maximumWidth.
maximumSize : QSize
Это свойство содержит максимальный размер виджета в пикселях.
Размер виджета не может быть больше максимального размера виджета.
По умолчанию это свойство содержит размер, в котором ширина и высота имеют значения 16777215.
Примечание: Определение макроса QWIDGETSIZE_MAX ограничивает максимальный размер виджетов.
Функции доступа:
| QSize | maximumSize() const |
| void | setMaximumSize(const QSize &) |
| void | setMaximumSize(int maxw, int maxh) |
См. также maximumWidth, maximumHeight, minimumSize и sizeIncrement.
maximumWidth : int
Это свойство содержит максимальную ширину виджета в пикселях.
Это свойство соответствует ширине, хранящейся в свойстве maximumSize.
По умолчанию это свойство содержит значение 16777215.
Примечание: Определение макроса QWIDGETSIZE_MAX ограничивает максимальный размер виджетов.
Функции доступа:
| int | maximumWidth() const |
| void | setMaximumWidth(int maxw) |
См. также maximumSize и maximumHeight.
minimized : const bool
Это свойство указывает, является ли этот виджет свёрнутым (минимизированным).
Это свойство актуально только для окон.
По умолчанию это свойство false.
Функции доступа:
| bool | isMinimized() const |
См. также showMinimized(), visible, show(), hide(), showNormal() и maximized.
minimumHeight : int
Это свойство содержит минимальную высоту виджета в пикселях.
Это свойство соответствует высоте, хранящейся в свойстве minimumSize.
По умолчанию это свойство имеет значение 0.
Функции доступа:
| int | minimumHeight() const |
| void | setMinimumHeight(int minh) |
См. также minimumSize и minimumWidth.
minimumSize : QSize
Это свойство содержит минимальный размер виджета.
Размер виджета нельзя уменьшить меньше минимального размера. Размер виджета принудительно устанавливается в минимальный размер, если текущий размер меньше.
Минимальный размер, установленный этой функцией, переопределит минимальный размер, определённый QLayout. Чтобы сбросить минимальный размер, используйте значение QSize(0, 0).
По умолчанию это свойство содержит размер с нулевой шириной и высотой.
Функции доступа:
| QSize | minimumSize() const |
| void | setMinimumSize(const QSize &) |
| void | setMinimumSize(int minw, int minh) |
См. также minimumWidth, minimumHeight, maximumSize и sizeIncrement.
minimumSizeHint : const QSize
Это свойство содержит рекомендуемый минимальный размер виджета.
Если значение этого свойства является недопустимым размером, минимальный размер не рекомендуется.
Реализация minimumSizeHint() по умолчанию возвращает недопустимый размер, если для данного виджета нет макета, и в противном случае возвращает минимальный размер макета. Большинство встроенных виджетов переопределяют minimumSizeHint().
QLayout никогда не изменит размер виджета до размера, меньшего, чем рекомендуемый минимальный размер, если не установлено minimumSize() или политика размера установлена в QSizePolicy::Ignore. Если minimumSize() установлено, рекомендуемый минимальный размер будет проигнорирован.
Функции доступа:
| virtual QSize | minimumSizeHint() const |
См. также QSize::isValid(), resize(), setMinimumSize() и sizePolicy().
minimumWidth : int
Это свойство содержит минимальную ширину виджета в пикселях.
Это свойство соответствует ширине, хранящейся в свойстве minimumSize.
По умолчанию это свойство имеет значение 0.
Функции доступа:
| int | minimumWidth() const |
| void | setMinimumWidth(int minw) |
См. также minimumSize и minimumHeight.
modal : const bool
Это свойство указывает, является ли виджет модальным.
Это свойство имеет смысл только для окон. Модальный виджет предотвращает получение ввода виджетами в других окнах.
По умолчанию это свойство false.
Функции доступа:
| bool | isModal() const |
См. также isWindow(), windowModality и QDialog.
mouseTracking : bool
Это свойство указывает, включено ли отслеживание мыши для виджета.
Если отслеживание мыши отключено (по умолчанию), виджет получает события перемещения мыши только тогда, когда хотя бы одна кнопка мыши нажата во время перемещения мыши.
Если отслеживание мыши включено, виджет получает события перемещения мыши даже если никакие кнопки не нажаты.
Функции доступа:
| bool | hasMouseTracking() const |
| void | setMouseTracking(bool enable) |
См. также mouseMoveEvent().
normalGeometry : const QRect
Это свойство содержит геометрию виджета, как она будет отображаться при отображении как обычного (не максимизированного или полноэкранного) виджета верхнего уровня.
Для дочерних виджетов это свойство всегда содержит пустой прямоугольник.
По умолчанию это свойство содержит пустой прямоугольник.
Функции доступа:
| QRect | normalGeometry() const |
См. также QWidget::windowState() и QWidget::geometry.
palette : QPalette
Это свойство содержит палитру виджета.
Это свойство описывает палитру виджета. Палитра используется стилем виджета при отрисовке стандартных компонентов и доступна для обеспечения согласованности пользовательских виджетов с внешним видом платформы. Разные платформы или стили могут иметь разные палитры.
При назначении новой палитры виджету цветовые роли из этой палитры комбинируются с палитрой по умолчанию виджета для формирования окончательной палитры виджета. Элемент палитры для роли фона виджета используется для заполнения фона виджета (QWidget::autoFillBackground), а роль переднего плана инициализирует перо QPainter.
Значение по умолчанию зависит от среды системы. QApplication поддерживает системную/тема палитру, которая служит значением по умолчанию для всех виджетов. Могут также быть специальные значения по умолчанию для определенных типов виджетов (например, в Windows Vista у всех классов, производных от QMenuBar, есть специальная палитра по умолчанию). Вы также можете определить палитры по умолчанию для виджетов, передав пользовательскую палитру и имя виджета в QApplication::setPalette(). Стиль всегда имеет возможность улучшить палитру при её назначении (см. QStyle::polish()).
QWidget передает явные роли палитры от родительского к дочерним виджетам. Если вы назначили кисть или цвет определённой роли в палитре и назначили эту палитру виджету, эта роль будет передана всем дочерним виджетам, переопределяя любые системные значения по умолчанию для этой роли. Обратите внимание, что палитры по умолчанию не передаются окнам (isWindow()), если не включён атрибут Qt::WA_WindowPropagation.
Передача палитры в QWidget аналогична передаче шрифтов.
Текущий стиль, используемый для отрисовки содержимого всех стандартных виджетов Qt, свободен выбирать цвета и кисти из палитры виджета или, в некоторых случаях, игнорировать палитру (частично или полностью). В частности, некоторые стили, такие как GTK, Mac и Windows Vista, зависят от сторонних API для отрисовки содержимого виджетов, и эти стили обычно не следуют палитре. Из-за этого назначение ролей в палитре виджета не гарантирует изменения внешнего вида виджета. Вместо этого вы можете применить styleSheet.
Предупреждение: Не используйте эту функцию вместе с Qt Style Sheets. При использовании таблиц стилей палитра виджета может настраиваться с помощью «color», «background-color», «selection-color», «selection-background-color» и «alternate-background-color».
Функции доступа:
| const QPalette & | palette() const |
| void | setPalette(const QPalette &) |
См. также QGuiApplication::palette(), QWidget::font() и Qt Style Sheets.
pos : QPoint
Это свойство содержит положение виджета в родительском виджете.
Если виджет является окном, положение относится к положению виджета на рабочем столе, включая его рамку.
При изменении положения виджет, если он видим, немедленно получает событие перемещения (moveEvent). Если виджет в данный момент не виден, гарантируется, что он получит событие перед отображением.
По умолчанию это свойство содержит позицию, которая относится к началу координат.
Предупреждение: Вызов move() или setGeometry() внутри moveEvent() может привести к бесконечной рекурсии.
См. документацию Геометрия окон для обзора проблем с геометрией окон.
Функции доступа:
| QPoint | pos() const |
| void | move(int x, int y) |
| void | move(const QPoint &) |
См. также frameGeometry, size, x() и y().
rect : const QRect
Это свойство содержит внутреннюю геометрию виджета, исключая рамку окна.
Свойство rect равно QRect(0, 0, width(), height()).
См. документацию Геометрия окон для обзора проблем с геометрией окон.
По умолчанию это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана.
Функции доступа:
| QRect | rect() const |
См. также size.
size : QSize
Это свойство содержит размер виджета, исключая рамку окна.
Если виджет видим во время изменения размера, он получает событие resize (resizeEvent()) немедленно. Если виджет не виден, ему гарантируется получение события перед отображением.
Размер корректируется, если он выходит за пределы диапазона, определённого minimumSize() и maximumSize().
По умолчанию это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана.
Предупреждение: Вызов resize() или setGeometry() внутри resizeEvent() может привести к бесконечной рекурсии.
Примечание: Установка размера в 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
Это свойство содержит рекомендуемый размер для виджета.
Если значение этого свойства является недопустимым размером, нет рекомендуемого размера.
Реализация sizeHint() по умолчанию возвращает недопустимый размер, если для этого виджета нет макета, и возвращает предпочтительный размер макета в противном случае.
Функции доступа:
| virtual QSize | sizeHint() const |
См. также QSize::isValid(), minimumSizeHint(), sizePolicy(), setMinimumSize() и updateGeometry().
sizeIncrement : QSize
Это свойство содержит приращение размера виджета.
Когда пользователь изменяет размер окна, размер будет изменяться шагами sizeIncrement(). width() пикселей по горизонтали и sizeIncrement.height() пикселей по вертикали, с baseSize() в качестве основы. Предпочтительные размеры виджета для неотрицательных целых чисел i и j:
width = baseSize().width() + i * sizeIncrement().width(); height = baseSize().height() + j * sizeIncrement().height();
Обратите внимание, что, хотя вы можете установить приращение размера для всех виджетов, оно влияет только на окна.
По умолчанию это свойство содержит размер с нулевой шириной и высотой.
Предупреждение: Приращение размера не имеет эффекта в Windows и может быть проигнорировано менеджером окон на X11.
Функции доступа:
| QSize | sizeIncrement() const |
| void | setSizeIncrement(const QSize &) |
| void | setSizeIncrement(int w, int h) |
См. также size, minimumSize и maximumSize.
sizePolicy : QSizePolicy
Это свойство содержит поведение по умолчанию макета виджета.
Если существует QLayout, управляющий дочерними элементами этого виджета, используется политика размера, указанная этим макетом. Если такого QLayout нет, используется результат этой функции.
Политика по умолчанию — Preferred/Preferred, что означает, что виджет может быть свободно изменен, но предпочитает иметь размер, возвращаемый sizeHint(). Кнопочные виджеты устанавливают политику размера, чтобы указать, что они могут растягиваться по горизонтали, но являются фиксированными по вертикали. То же самое относится к полям ввода (таким как QLineEdit, QSpinBox или редактируемый QComboBox) и другим виджетам с горизонтальной ориентацией (таким как QProgressBar). QToolButton обычно квадратные, поэтому они позволяют рост в обоих направлениях. Виджеты, поддерживающие разные направления (например, QSlider, QScrollBar или QHeader) указывают растяжение только в соответствующем направлении. Виджеты, которые могут предоставлять полосы прокрутки (обычно подклассы QScrollArea) имеют тенденцию указывать, что они могут использовать дополнительное пространство и что им достаточно меньше, чем sizeHint().
Функции доступа:
| QSizePolicy | sizePolicy() const |
| void | setSizePolicy(QSizePolicy) |
| void | setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical) |
См. также sizeHint(), QLayout, QSizePolicy и updateGeometry().
statusTip : QString
Это свойство содержит подсказку состояния виджета.
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | statusTip() const |
| void | setStatusTip(const QString &) |
См. также toolTip и whatsThis.
styleSheet : QString
Это свойство содержит таблицу стилей виджета.
Таблица стилей содержит текстовое описание настроек стиля виджета, как описано в документе Qt Style Sheets.
Начиная с Qt 4.5, таблицы стилей Qt полностью поддерживают macOS.
Предупреждение: Таблицы стилей Qt в настоящее время не поддерживают пользовательские подклассы QStyle. Мы планируем решить эту проблему в будущей версии.
Это свойство было введено в Qt 4.2.
Функции доступа:
| QString | styleSheet() const |
| void | setStyleSheet(const QString &styleSheet) |
См. также setStyle(), QApplication::styleSheet и Qt Style Sheets.
tabletTracking : bool
Это свойство содержит значение, указывающее, включена ли отслеживание планшета для виджета.
Если отслеживание планшета отключено (по умолчанию), виджет получает события перемещения планшета только при контакте стилуса с планшетом или при нажатии хотя бы одной кнопки стилуса при перемещении стилуса.
Если отслеживание планшета включено, виджет получает события перемещения планшета даже при наведении вблизи. Это полезно для мониторинга положения, а также вспомогательных свойств, таких как вращение и наклон, и предоставления обратной связи в пользовательском интерфейсе.
Это свойство было введено в Qt 5.9.
Функции доступа:
| bool | hasTabletTracking() const |
| void | setTabletTracking(bool enable) |
См. также tabletEvent().
toolTip : QString
Это свойство содержит всплывающую подсказку виджета.
Обратите внимание, что по умолчанию всплывающие подсказки отображаются только для виджетов, являющихся дочерними элементами активного окна. Вы можете изменить это поведение, установив атрибут Qt::WA_AlwaysShowToolTips для окна, а не для виджета с всплывающей подсказкой.
Если вы хотите управлять поведением всплывающей подсказки, вы можете перехватить функцию event() и поймать событие QEvent::ToolTip (например, если вы хотите настроить область, для которой должна отображаться всплывающая подсказка).
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | toolTip() const |
| void | setToolTip(const QString &) |
См. также QToolTip, statusTip и whatsThis.
toolTipDuration : int
Это свойство содержит длительность всплывающей подсказки виджета.
Определяет, сколько времени будет отображаться всплывающая подсказка в миллисекундах. Если значение равно -1 (по умолчанию), продолжительность рассчитывается в зависимости от длины всплывающей подсказки.
Это свойство было введено в Qt 5.2.
Функции доступа:
| int | toolTipDuration() const |
| void | setToolTipDuration(int msec) |
См. также toolTip.
updatesEnabled : bool
Это свойство определяет, включены ли обновления.
Обновляемый виджет получает события рисования и имеет системный фон; отключенный виджет — нет. Это также подразумевает, что вызов update() и repaint() не имеет эффекта, если обновления отключены.
По умолчанию это свойство равно true.
setUpdatesEnabled() обычно используется для отключения обновлений на короткое время, например, чтобы избежать мерцания экрана во время больших изменений. В Qt виджеты обычно не вызывают мерцание экрана, но на X11 сервер может стереть области на экране, когда виджеты скрываются до того, как они могут быть заменены другими виджетами. Отключение обновлений решает эту проблему.
Пример:
setUpdatesEnabled(false); bigVisualChanges(); setUpdatesEnabled(true);
Отключение виджета неявно отключает все его дочерние элементы. Включение виджета включает все дочерние виджеты, кроме виджетов верхнего уровня или тех, которые были явно отключены. Повторное включение обновлений неявно вызывает update() для виджета.
Функции доступа:
| bool | updatesEnabled() const |
| void | setUpdatesEnabled(bool enable) |
См. также paintEvent().
visible : bool
Это свойство определяет, видим ли виджет.
Вызов setVisible(true) или show() устанавливает виджет в состояние видимости, если все его родительские виджеты до окна видны. Если предковый элемент не виден, виджет не станет видимым, пока все его предковые элементы не будут отображены. Если его размер или положение изменились, Qt гарантирует, что виджет получит события перемещения и изменения размера непосредственно перед отображением. Если виджет еще не был изменен в размерах, Qt скорректирует размер виджета до удобного значения, используя adjustSize().
Вызов setVisible(false) или hide() скрывает виджет явно. Явно скрытый виджет никогда не станет видимым, даже если все его предковые элементы станут видимыми, пока вы не отобразите его.
Виджет получает события show и hide, когда его статус видимости изменяется. Между событиями hide и show нет необходимости тратить циклы ЦП на подготовку или отображение информации пользователю. Например, приложение для воспроизведения видео может просто прекратить создание новых кадров.
Виджет, который случайно скрыт другими окнами на экране, считается видимым. То же самое относится к минимизированным окнам и окнам, которые существуют на другом виртуальном рабочем столе (на платформах, которые поддерживают эту концепцию). Виджет получает спонтанные события show и hide, когда статус его отображения изменяется системным окном, например, спонтанное событие hide, когда пользователь сворачивает окно, и спонтанное событие show, когда окно восстанавливается.
Вам почти никогда не нужно переопределять функцию setVisible(). Если вам нужно изменить некоторые параметры перед отображением виджета, используйте showEvent() вместо этого. Если вам нужна отложенная инициализация, используйте событие Polish, переданное в функцию event().
Функции доступа:
| bool | isVisible() const |
| virtual void | setVisible(bool visible) |
См. также show(), hide(), isHidden(), isVisibleTo(), isMinimized(), showEvent() и hideEvent().
whatsThis : QString
Это свойство содержит текст справки виджета "Что это?".
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | whatsThis() const |
| void | setWhatsThis(const QString &) |
См. также QWhatsThis, QWidget::toolTip и QWidget::statusTip.
width : const int
Это свойство содержит ширину виджета, исключая рамку окна.
См. документацию Геометрия окна для обзора проблем с геометрией окон.
Примечание: Не используйте эту функцию для поиска ширины экрана на рабочем столе с несколькими экранами. Прочитайте это примечание для получения подробной информации.
По умолчанию это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана.
Функции доступа:
| int | width() const |
См. также geometry, height и size.
windowFilePath : QString
Это свойство содержит путь к файлу, связанному с виджетом.
Это свойство имеет смысл только для окон. Оно связывает путь к файлу с окном. Если вы установите путь к файлу, но не установите заголовок окна, Qt установит заголовок окна в имя файла указанного пути, полученного с помощью QFileInfo::fileName().
Если заголовок окна установлен в какой-либо момент, заголовок окна имеет приоритет и будет отображен вместо строки пути к файлу.
Кроме того, на macOS это добавляет преимущество установки иконки-заместителя для окна, предполагая, что путь к файлу существует.
Если путь к файлу не задан, это свойство содержит пустую строку.
По умолчанию это свойство содержит пустую строку.
Это свойство было введено в Qt 4.4.
Функции доступа:
| QString | windowFilePath() const |
| void | setWindowFilePath(const QString &filePath) |
См. также windowTitle и windowIcon.
windowFlags : Qt::WindowFlags
Флаги окна представляют собой комбинацию типа (например, Qt::Dialog) и нуля или более подсказок для системного окна (например, Qt::FramelessWindowHint).
Если виджет имел тип Qt::Widget или Qt::SubWindow и становится окном (Qt::Window, Qt::Dialog и т. д.), он размещается в позиции (0, 0) на рабочем столе. Если виджет является окном и становится Qt::Widget или Qt::SubWindow, он размещается в позиции (0, 0) относительно родительского виджета.
Примечание: Эта функция вызывает setParent(), когда изменяются флаги окна, что приводит к скрытию виджета. Вы должны вызвать show(), чтобы снова сделать виджет видимым.
Функции доступа:
| Qt::WindowFlags | windowFlags() const |
| void | setWindowFlags(Qt::WindowFlags type) |
См. также windowType(), setWindowFlag() и Пример флагов окна.
Значок окна : QIcon
Данное свойство содержит значок виджета.
Это свойство имеет смысл только для окон. Если значок не был установлен, windowIcon() возвращает значок приложения (QApplication::windowIcon()).
Примечание: В macOS значки окна представляют активный документ и не будут отображаться, если путь к файлу не был также установлен с помощью setWindowFilePath.
Функции доступа:
| QIcon | windowIcon() const |
| void | setWindowIcon(const QIcon &icon) |
Сигнал уведомления:
| void | windowIconChanged(const QIcon &icon) |
См. также windowTitle и setWindowFilePath.
Модальность окна : Qt::WindowModality
Данное свойство определяет, какие окна заблокированы модальным виджетом.
Это свойство имеет смысл только для окон. Модальный виджет предотвращает получение ввода виджетами в других окнах. Значение этого свойства управляет тем, какие окна блокируются, когда виджет отображается. Изменение этого свойства во время отображения окна не оказывает никакого влияния; вы должны сначала hide() виджет, а затем show() его снова.
По умолчанию это свойство равно Qt::NonModal.
Это свойство было введено в Qt 4.1.
Функции доступа:
| Qt::WindowModality | windowModality() const |
| void | setWindowModality(Qt::WindowModality windowModality) |
См. также isWindow(), QWidget::modal и QDialog.
Измененное окно : bool
Это свойство содержит информацию о том, содержит ли документ, отображаемый в окне, несохранённые изменения.
Изменённое окно — это окно, содержимое которого изменилось, но не было сохранено на диск. Этот флаг будет иметь разное воздействие в зависимости от платформы. В macOS кнопка закрытия будет иметь изменённый вид; на других платформах в заголовке окна будет отображаться «*» (звёздочка).
Заголовок окна должен содержать заполнитель "[*]", который указывает, где должна отображаться «*». Обычно он должен отображаться сразу после имени файла (например, "document1.txt[*] - Текстовый редактор"). Если окно не изменено, заполнитель просто удаляется.
Обратите внимание, что если виджет установлен как изменённый, все его предки также будут установлены как изменённые. Однако, если вы вызовете setWindowModified(false) на виджете, это не будет распространяться на его родителя, так как другие дочерние элементы родителя могут быть изменены.
Функции доступа:
| bool | isWindowModified() const |
| void | setWindowModified(bool) |
См. также windowTitle, Пример приложения, Пример SDI и Пример MDI.
Прозрачность окна : double
Это свойство содержит уровень прозрачности окна.
Допустимый диапазон прозрачности составляет от 1,0 (полностью непрозрачный) до 0,0 (полностью прозрачный).
По умолчанию значение этого свойства равно 1,0.
Эта функция доступна на платформах Embedded Linux, macOS, Windows и X11, поддерживающих расширение Composite.
Примечание: В X11 вам необходимо запустить менеджер композиции, а атом _NET_WM_WINDOW_OPACITY специфичный для X11 должен поддерживаться менеджером окон, который вы используете.
Предупреждение: Изменение этого свойства с непрозрачного на прозрачный может вызвать событие отрисовки, которое необходимо обработать, прежде чем окно будет правильно отображено. Это в основном влияет на использование QScreen::grabWindow(). Также обратите внимание, что полупрозрачные окна значительно медленнее обновляются и изменяются по размеру, чем непрозрачные окна.
Функции доступа:
| qreal | windowOpacity() const |
| void | setWindowOpacity(qreal level) |
См. также setMask().
Название окна : QString
Это свойство содержит заголовок окна (заголовок).
Это свойство имеет смысл только для виджетов верхнего уровня, таких как окна и диалоговые окна. Если заголовок не задан, заголовок основывается на windowFilePath. Если ни одно из этих свойств не задано, то заголовок — пустая строка.
Если вы используете механизм windowModified, заголовок окна должен содержать заполнитель "[*]", который указывает, где должна отображаться «*». Обычно он должен отображаться сразу после имени файла (например, "document1.txt[*] - Текстовый редактор"). Если свойство windowModified равно false (значение по умолчанию), заполнитель просто удаляется.
На некоторых платформах рабочего стола (включая Windows и Unix) имя приложения (из QGuiApplication::applicationDisplayName) добавляется в конец заголовка окна, если он задан. Это выполняется плагином QPA, поэтому он отображается пользователю, но не является частью строки windowTitle.
Функции доступа:
| QString | windowTitle() const |
| void | setWindowTitle(const QString &) |
Сигнал уведомления:
| void | windowTitleChanged(const QString &title) |
См. также windowIcon, windowModified и windowFilePath.
x : const int
Это свойство содержит координату x виджета относительно его родителя, включая рамку окна.
См. документацию Геометрия окна для обзора проблем с геометрией окон.
По умолчанию это свойство имеет значение 0.
Функции доступа:
| int | x() const |
См. также frameGeometry, y и pos.
y : const int
Это свойство содержит координату y виджета относительно его родителя, включая рамку окна.
См. документацию Геометрия окна для обзора проблем с геометрией окон.
По умолчанию это свойство имеет значение 0.
Функции доступа:
| int | y() const |
См. также frameGeometry, x и pos.
Документация функций-членов
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
Создаёт виджет, который является дочерним элементом parent, с флагами виджета, установленными в f.
Если parent равен nullptr, новый виджет становится окном. Если parent — это другой виджет, этот виджет становится дочерним окном внутри parent. Новый виджет удаляется при удалении его родителя.
Аргумент флагов виджета, f, обычно равен 0, но его можно установить для настройки рамки окна (т.е. parent должен быть nullptr). Для настройки рамки используйте значение, составленное путём побитового ИЛИ любого из флагов окон.
Если вы добавляете дочерний виджет к уже видимому виджету, вы должны явно отобразить дочерний виджет, чтобы сделать его видимым.
Обратите внимание, что версия Qt для X11 может не поддерживать все комбинации флагов стиля на всех системах. Это происходит потому, что в X11 Qt может только запросить менеджер окон, и менеджер окон может переопределить настройки приложения. В Windows Qt может установить любые желаемые флаги.
См. также windowFlags.
[slot] bool QWidget::close()
Закрывает этот виджет. Возвращает true если виджет был закрыт; в противном случае возвращает false.
Сначала он отправляет виджету событие QCloseEvent. Виджет скрывается (hidden), если он принимает событие закрытия. Если он игнорирует событие, ничего не происходит. По умолчанию реализация QWidget::closeEvent() принимает событие закрытия.
Если у виджета установлен флаг Qt::WA_DeleteOnClose, виджет также удаляется. Событие закрытия доставляется виджету независимо от того, виден он или нет.
Сигнал QApplication::lastWindowClosed() излучается, когда закрывается последнее видимое основное окно (т.е. окно без родителя) с установленным атрибутом Qt::WA_QuitOnClose. По умолчанию этот атрибут установлен для всех виджетов, за исключением временных окон, таких как всплывающие окна, окна инструментов и всплывающие меню.
[signal] void QWidget::customContextMenuRequested(const QPoint &pos)
Этот сигнал излучается, когда политика контекстного меню виджета (contextMenuPolicy) равна Qt::CustomContextMenu, и пользователь запросил контекстное меню на виджете. Позиция pos — это позиция события контекстного меню, полученного виджетом. Обычно она задаётся в координатах виджета. Исключение составляют QAbstractScrollArea и его подклассы, которые преобразуют событие контекстного меню в координаты viewport().
См. также mapToGlobal(), QMenu и contextMenuPolicy.
[slot] void QWidget::hide()
Скрывает виджет. Эта функция эквивалентна setVisible(false).
Примечание: Если вы работаете с QDialog или его подклассами и вызываете функцию show() после этой функции, диалоговое окно будет отображено в исходном положении.
См. также hideEvent(), isHidden(), show(), setVisible(), isVisible() и close().
[slot] void QWidget::lower()
Опускает виджет в низ стека родительского виджета.
После вызова виджет будет отображаться позади (и, следовательно, скрыт) любого перекрывающегося виджета-потомка.
См. также raise() и stackUnder().
[slot] void QWidget::raise()
Приподнимает этот виджет наверх стека родительского виджета.
После вызова виджет будет отображаться поверх любого перекрывающегося виджета-потомка.
Примечание: При использовании activateWindow() вы можете вызвать эту функцию, чтобы убедиться, что окно расположено сверху.
См. также lower() и stackUnder().
[slot] void QWidget::repaint()
Перерисовывает виджет напрямую, вызвав paintEvent() немедленно, если обновления отключены или виджет скрыт.
Рекомендуется использовать repaint() только если вам нужно немедленное перерисовка, например, во время анимации. Почти во всех случаях update() лучше, поскольку он позволяет Qt оптимизировать производительность и минимизировать мерцание.
Предупреждение: Если вы вызываете repaint() в функции, которая может вызываться из paintEvent(), вы можете получить бесконечную рекурсию. Функция update() никогда не вызывает рекурсию.
См. также update(), paintEvent() и setUpdatesEnabled().
[slot] void QWidget::setDisabled(bool disable)
Отключает события ввода виджета, если disable равно true; в противном случае включает события ввода.
Для получения дополнительной информации см. документацию к enabled.
См. также isEnabledTo(), QKeyEvent, QMouseEvent и changeEvent().
[slot] void QWidget::setFocus()
Это перегруженная функция.
Предоставляет фокус клавиатурного ввода этому виджету (или его прокси-виджету), если этот виджет или один из его родителей является активным окном (активным окном).
[slot] void QWidget::setHidden(bool hidden)
Удобная функция, эквивалентная setVisible(!hidden).
См. также isHidden().
[slot] void QWidget::show()
Отображает виджет и его дочерние виджеты.
Это эквивалентно вызову showFullScreen(), showMaximized() или setVisible(true) в зависимости от поведения по умолчанию платформы для флагов окна.
См. также raise(), showEvent(), hide(), setVisible(), showMinimized(), showMaximized(), showNormal(), isVisible() и windowFlags().
[slot] void QWidget::showFullScreen()
Отображает виджет в полноэкранном режиме.
Вызов этой функции влияет только на окна.
Чтобы выйти из полноэкранного режима, вызовите showNormal().
Полноэкранный режим работает нормально в Windows, но имеет определённые проблемы в X. Эти проблемы обусловлены ограничениями протокола ICCCM, который определяет взаимодействие между клиентами X11 и менеджером окон. ICCCM просто не понимает концепции окон в полноэкранном режиме без декораций. Поэтому мы можем только запросить окно без рамок и разместить его, чтобы заполнить весь экран. В зависимости от менеджера окон, это может или не может работать. Окно без рамок запрашивается с помощью подсказок MOTIF, которые в той или иной степени поддерживаются практически всеми современными менеджерами окон.
Альтернативой было бы полное обход менеджера окон и создание окна с флагом Qt::X11BypassWindowManagerHint. Однако это имеет другие серьёзные проблемы, такие как полная поломка фокуса клавиатуры и очень странные эффекты при изменении рабочего стола или при открытии других окон пользователем.
Менеджеры окон X11, которые следуют современным спецификациям после ICCCM, правильно поддерживают полноэкранный режим.
См. также showNormal(), showMaximized(), show(), hide() и isVisible().
[slot] void QWidget::showMaximized()
Отображает виджет в максимальном режиме.
Вызов этой функции влияет только на окна.
В X11 эта функция может работать некорректно с определёнными менеджерами окон. См. документацию по геометрии окна для объяснения.
См. также setWindowState(), showNormal(), showMinimized(), show(), hide() и isVisible().
[slot] void QWidget::showMinimized()
Отображает виджет минимизированным, в виде значка.
Вызов этой функции влияет только на окна.
См. также showNormal(), showMaximized(), show(), hide(), isVisible() и isMinimized().
[slot] void QWidget::showNormal()
Восстанавливает виджет после максимизации или минимизации.
Вызов этой функции влияет только на окна.
См. также setWindowState(), showMinimized(), showMaximized(), show(), hide() и isVisible().
[slot] void QWidget::update()
Обновляет виджет, если обновления не отключены и виджет не скрыт.
Эта функция не вызывает немедленную перерисовку; вместо этого она планирует событие рисования для обработки, когда Qt возвращается к главному циклу событий. Это позволяет Qt оптимизировать скорость и минимизировать мерцание по сравнению с вызовом repaint().
Вызов update() несколько раз обычно приводит к одному вызову paintEvent().
Qt обычно стирает область виджета перед вызовом paintEvent(). Если установлен атрибут виджета Qt::WA_OpaquePaintEvent, виджет отвечает за прорисовку всех своих пикселей непрозрачным цветом.
См. также repaint(), paintEvent(), setUpdatesEnabled() и Пример аналоговых часов.
[protected slot] void QWidget::updateMicroFocus()
Обновляет микрофокус виджета.
[signal] void QWidget::windowIconChanged(const QIcon &icon)
Этот сигнал испускается, когда иконка окна изменилась, с новой иконкой icon в качестве аргумента.
Примечание: Сигнал-нотификатор для свойства windowIcon.
Эта функция была введена в Qt 5.2.
[signal] void QWidget::windowTitleChanged(const QString &title)
Этот сигнал испускается, когда заголовок окна изменился, с новым title в качестве аргумента.
Примечание: Сигнал-нотификатор для свойства windowTitle.
Эта функция была введена в Qt 5.2.
[virtual] QWidget::~QWidget()
Уничтожает виджет.
Все дочерние элементы этого виджета удаляются в первую очередь. Приложение завершается, если этот виджет является основным.
[virtual protected] void QWidget::actionEvent(QActionEvent *event)
Этот обработчик событий вызывается с данным event всякий раз, когда действия виджета изменяются.
См. также addAction(), insertAction(), removeAction(), actions() и QActionEvent.
QList<QAction *> QWidget::actions() const
Возвращает (возможно пустой) список действий этого виджета.
См. также contextMenuPolicy, insertAction() и removeAction().
void QWidget::activateWindow()
Устанавливает верхний виджет, содержащий этот виджет, в качестве активного окна.
Активное окно — это видимое верхнее окно, у которого есть фокус ввода с клавиатуры.
Эта функция выполняет ту же операцию, что и щелчок мышью по строке заголовка верхнего окна. В X11 результат зависит от диспетчера окон. Если вы хотите гарантировать, что окно также расположено поверх других, вы также должны вызвать raise(). Обратите внимание, что окно должно быть видимым, в противном случае activateWindow() не окажет никакого эффекта.
В Windows, если вы вызываете это, когда приложение не является активным, то оно не станет активным окном. Вместо этого изменится цвет записи в панели задач, чтобы указать, что окно изменилось каким-либо образом. Это связано с тем, что Microsoft не позволяет приложению прерывать текущую работу пользователя в другом приложении.
См. также isActiveWindow(), window(), show() и QWindowsWindowFunctions::setWindowActivationBehavior().
void QWidget::addAction(QAction *action)
Добавляет действие action в список действий этого виджета.
Все виджеты QWidgets имеют список QAction, но они могут отображаться графически многими различными способами. По умолчанию список QAction (как возвращается actions()) используется для создания контекстного QMenu.
QWidget должен содержать только одно действие каждого типа, и добавление уже существующего действия не приведет к добавлению его дважды.
Владение action не переходит к этому QWidget.
См. также removeAction(), insertAction(), actions() и QMenu.
void QWidget::addActions(QList<QAction *> actions)
Добавляет действия actions в список действий этого виджета.
См. также removeAction(), QMenu и addAction().
void QWidget::adjustSize()
Изменяет размер виджета для соответствия его содержимому.
Эта функция использует sizeHint() если она допустима, т.е. ширина и высота размера подсказки >= 0. В противном случае она устанавливает размер в прямоугольник детей, охватывающий все дочерние виджеты (объединение всех прямоугольников дочерних виджетов).
Для окон также учитывается размер экрана. Если sizeHint() меньше (200, 100) и политика размера — расширение, окно будет не меньше (200, 100). Максимальный размер окна составляет 2/3 ширины и высоты экрана.
См. также sizeHint() и childrenRect().
QPalette::ColorRole QWidget::backgroundRole() const
Возвращает роль фона виджета.
Роль фона определяет кисть из palette виджета, используемую для отрисовки фона.
Если роль фона не задана явно, виджет наследует роль фона своего родительского виджета.
См. также setBackgroundRole() и foregroundRole().
QBackingStore *QWidget::backingStore() const
Возвращает QBackingStore, в который будет нарисован этот виджет.
Эта функция была введена в Qt 5.0.
[virtual protected] void QWidget::changeEvent(QEvent *event)
Этот обработчик событий можно переопределить для обработки изменений состояния.
Изменяемое состояние в этом событии можно получить через предоставленный event.
События изменения включают: QEvent::ToolBarChange, QEvent::ActivationChange, QEvent::EnabledChange, QEvent::FontChange, QEvent::StyleChange, QEvent::PaletteChange, QEvent::WindowTitleChange, QEvent::IconTextChange, QEvent::ModifiedChange, QEvent::MouseTrackingChange, QEvent::ParentChange, QEvent::WindowStateChange, QEvent::LanguageChange, QEvent::LocaleChange, QEvent::LayoutDirectionChange, QEvent::ReadOnlyChange.
QWidget *QWidget::childAt(int x, int y) const
Возвращает видимый дочерний виджет в позиции (x, y) в системе координат виджета. Если видимого дочернего виджета в указанной позиции нет, функция возвращает nullptr.
QWidget *QWidget::childAt(const QPoint &p) const
Это перегруженная функция.
Возвращает видимый дочерний виджет в точке p в собственной системе координат виджета.
void QWidget::clearFocus()
Убирает фокус ввода с клавиатуры с виджета.
Если у виджета есть активный фокус, ему отправляется событие потери фокуса, чтобы сообщить ему о потере фокуса.
Этот виджет должен разрешить установку фокуса, чтобы получить фокус ввода с клавиатуры, т.е. он должен вызвать setFocusPolicy().
См. также hasFocus(), setFocus(), focusInEvent(), focusOutEvent(), setFocusPolicy() и QApplication::focusWidget().
void QWidget::clearMask()
Удаляет любую маску, установленную с помощью setMask().
См. также setMask().
[virtual protected] void QWidget::closeEvent(QCloseEvent *event)
Этот обработчик событий вызывается с данным event, когда Qt получает запрос на закрытие окна для верхнего виджета от системы окон.
По умолчанию событие принимается, и виджет закрывается. Вы можете переопределить эту функцию, чтобы изменить способ, которым виджет реагирует на запросы закрытия окна. Например, вы можете предотвратить закрытие окна, вызвав 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
Функция contentsMargins возвращает отступы содержимого виджета.
Эта функция была введена в Qt 4.6.
См. также setContentsMargins() и contentsRect().
QRect QWidget::contentsRect() const
Возвращает область внутри отступов виджета.
См. также setContentsMargins() и contentsMargins().
[virtual protected] void QWidget::contextMenuEvent(QContextMenuEvent *event)
Обработчик этого события, для события event, может быть переопределен в подклассе для получения событий контекстного меню виджета.
Обработчик вызывается, когда политика контекстного меню виджета contextMenuPolicy равна Qt::DefaultContextMenu.
В реализации по умолчанию событие контекстного меню игнорируется. Дополнительные сведения см. в документации QContextMenuEvent.
См. также event(), QContextMenuEvent и customContextMenuRequested().
[protected] void QWidget::create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true)
Создаёт новое окно виджета.
Параметры window, initializeWindow и destroyOldWindow игнорируются в Qt 5. Используйте 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, он создаст родное окно для каждого виджета в цепочке его предков, чтобы обеспечить правильное расположение и обрезку в этом случае. Создание родного окна для контейнера окна также обеспечивает правильное расположение и обрезку. Это должно быть выполнено до показа контейнера окна. Приложения с множеством родных дочерних окон могут испытывать проблемы с производительностью.
Контейнер окна имеет ряд известных ограничений:
- Порядок расположения; Встроенное окно будет расположено поверх иерархии виджетов как непрозрачный прямоугольник. Порядок расположения нескольких перекрывающихся экземпляров контейнеров окон не определён.
- Интеграция отрисовки; Контейнер окна не взаимодействует с QGraphicsProxyWidget, QWidget::render() или подобными функциями.
- Обработка фокуса; Контейнер окна может иметь любую политику фокуса и будет передавать фокус окну, вызвав QWindow::requestActivate(). Однако возврат к обычной цепочке фокуса из экземпляра QWindow будет зависеть от реализации самого экземпляра QWindow. Например, при входе в окно на основе Qt Quick с фокусом по табу, весьма вероятно, что дальнейшие нажатия клавиш табуляции будут происходить только внутри приложения QML. Также, действительно ли QWindow::requestActivate() даёт фокус окну, зависит от платформы.
- Использование большого количества экземпляров контейнеров окон в приложении на основе QWidget может значительно ухудшить общую производительность приложения.
[protected] void QWidget::destroy(bool destroyWindow = true, bool destroySubWindows = true)
Освобождает ресурсы системы окон. Уничтожает окно виджета, если destroyWindow равно true.
destroy() рекурсивно вызывает себя для всех дочерних виджетов, передавая destroySubWindows в качестве параметра destroyWindow. Для лучшего контроля над уничтожением дочерних виджетов, уничтожьте дочерние виджеты выборочно сначала.
Эта функция обычно вызывается из деструктора QWidget.
[virtual protected] void QWidget::dragEnterEvent(QDragEnterEvent *event)
Этот обработчик событий вызывается, когда происходит перетаскивание и курсор входит в этот виджет. Событие передаётся в параметре event.
Если событие игнорируется, виджет не получит никаких событий перемещения при перетаскивании.
См. документацию по перетаскиванию для обзора того, как предоставить перетаскивание в вашем приложении.
См. также QDrag и QDragEnterEvent.
[virtual protected] void QWidget::dragLeaveEvent(QDragLeaveEvent *event)
Этот обработчик событий вызывается, когда происходит перетаскивание и курсор покидает этот виджет. Событие передаётся в параметре event.
См. документацию по перетаскиванию для обзора того, как предоставить перетаскивание в вашем приложении.
См. также QDrag и QDragLeaveEvent.
[virtual protected] void QWidget::dragMoveEvent(QDragMoveEvent *event)
Этот обработчик событий вызывается, если происходит перетаскивание, и когда выполняется любое из следующих условий: курсор входит в этот виджет, курсор перемещается внутри этого виджета или нажата клавиша модификатора на клавиатуре, пока этот виджет имеет фокус. Событие передаётся в параметре event.
См. документацию по перетаскиванию для обзора того, как предоставить перетаскивание в вашем приложении.
См. также QDrag и QDragMoveEvent.
[virtual protected] void QWidget::dropEvent(QDropEvent *event)
Этот обработчик событий вызывается, когда перетаскивание отпускается на этом виджете. Событие передаётся в параметре event.
См. документацию по перетаскиванию для обзора того, как предоставить перетаскивание в вашем приложении.
См. также QDrag и QDropEvent.
WId QWidget::effectiveWinId() const
Возвращает эффективный идентификатор окна системы виджета, т.е. идентификатор окна родного родителя.
Если виджет является родным, эта функция возвращает ID родного виджета. В противном случае возвращается ID окна первого родного родительского виджета, т.е. главного виджета, содержащего этот виджет.
Примечание: Не рекомендуется сохранять это значение, так как оно может измениться во время выполнения.
Эта функция была введена в Qt 4.4.
См. также nativeParentWidget().
void QWidget::ensurePolished() const
Обеспечивает, что виджет и его дочерние элементы были отполированы QStyle (т.е., имеют подходящий шрифт и палитру).
QWidget вызывает эту функцию после того, как он был полностью построен, но до первого показа. Вы можете вызвать эту функцию, если хотите убедиться, что виджет отполирован перед выполнением операции, например, для реализации sizeHint() виджета может потребоваться корректный размер шрифта. Обратите внимание, что эта функция вызывается из реализации по умолчанию sizeHint().
Полировка полезна для завершающей инициализации, которая должна происходить после вызова всех конструкторов (как базовых классов, так и подклассов).
Если вам нужно изменить некоторые настройки, когда виджет отполирован, переопределите event() и обработайте тип события QEvent::Polish.
Примечание: Функция объявлена как const, чтобы её можно было вызывать из других константных функций (например, sizeHint()).
См. также event().
[virtual protected] void QWidget::enterEvent(QEvent *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().
Обработка событий мыши и планшета также немного специфична: только когда виджет включён, event() вызовет специализированные обработчики, такие как mousePressEvent; в противном случае он отбросит событие.
Эта функция возвращает true если событие было распознано, в противном случае она возвращает false. Если распознанное событие было принято (см. QEvent::accepted), любая дальнейшая обработка, такая как распространение события на родительский виджет, останавливается.
См. также closeEvent(), focusInEvent(), focusOutEvent(), enterEvent(), keyPressEvent(), keyReleaseEvent(), leaveEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), mousePressEvent(), mouseReleaseEvent(), moveEvent(), paintEvent(), resizeEvent(), QObject::event() и QObject::timerEvent().
[static] QWidget *QWidget::find(WId id)
Возвращает указатель на виджет с идентификатором/дескриптором окна id.
Тип идентификатора окна зависит от используемой системной оболочки; см. qwindowdefs.h для определения. Если виджета с таким идентификатором нет, возвращается nullptr.
[virtual protected] void QWidget::focusInEvent(QFocusEvent *event)
Обработчик событий может быть переопределён в подклассе для получения событий фокусировки (получение фокуса) виджета. Событие передаётся в параметре event.
Виджет обычно должен установить setFocusPolicy() на значение, отличное от Qt::NoFocus, чтобы получать события фокусировки. (Обратите внимание, что программист приложения может вызвать setFocus() для любого виджета, даже тех, которые обычно не принимают фокус.)
Стандартная реализация обновляет виджет (за исключением окон, не задающих focusPolicy()).
См. также focusOutEvent(), setFocusPolicy(), keyPressEvent(), keyReleaseEvent(), event() и QFocusEvent.
[protected] bool QWidget::focusNextChild()
Находит новый виджет, которому следует передать фокус (соответствующий нажатию Tab) и возвращает true если такой виджет найден, или false, если нет.
См. также focusPreviousChild().
[virtual protected] bool QWidget::focusNextPrevChild(bool next)
Находит новый виджет, которому следует передать фокус (соответствующий нажатию Tab и Shift+Tab) и возвращает true если такой виджет найден, или false, если нет.
Если next истинно, функция ищет вперёд, если ложно — назад.
Иногда вам потребуется переопределить эту функцию. Например, веб-браузер может переопределить её для перемещения "текущей активной ссылки" вперёд или назад, а затем вызвать focusNextPrevChild() только когда достигнет последней или первой ссылки на "странице".
Дочерние виджеты вызывают focusNextPrevChild() на своих родительских виджетах, но только окно, содержащее дочерние виджеты, решает, куда перенаправить фокус. Переопределяя эту функцию для объекта, вы получаете контроль над перемещением фокуса для всех дочерних виджетов.
См. также focusNextChild() и focusPreviousChild().
[virtual protected] void QWidget::focusOutEvent(QFocusEvent *event)
Обработчик событий может быть переопределён в подклассе для получения событий фокусировки (потеря фокуса) виджета. Событие передаётся в параметре event.
Виджет обычно должен установить setFocusPolicy() на значение, отличное от Qt::NoFocus, чтобы получать события фокусировки. (Обратите внимание, что программист приложения может вызвать setFocus() для любого виджета, даже тех, которые обычно не принимают фокус.)
Стандартная реализация обновляет виджет (за исключением окон, не задающих focusPolicy()).
См. также focusInEvent(), setFocusPolicy(), keyPressEvent(), keyReleaseEvent(), event() и QFocusEvent.
[protected] bool QWidget::focusPreviousChild()
Находит новый виджет, которому следует передать фокус (соответствующий нажатию Shift+Tab) и возвращает true если такой виджет найден, или false, если нет.
См. также focusNextChild().
QWidget *QWidget::focusProxy() const
Возвращает прокси виджета фокуса, или nullptr если прокси виджета нет.
См. также setFocusProxy().
QWidget *QWidget::focusWidget() const
Возвращает последний дочерний виджет этого виджета, для которого был вызван setFocus. Для виджетов верхнего уровня это виджет, который получит фокус в случае активации этого окна.
Это не то же самое, что QApplication::focusWidget(), которое возвращает виджет фокуса в текущем активном окне.
QFontInfo QWidget::fontInfo() const
Возвращает информацию о шрифте для текущего шрифта виджета. Эквивалентно QFontInfo(widget->font()).
См. также font(), fontMetrics() и setFont().
QFontMetrics QWidget::fontMetrics() const
Возвращает метрики шрифта для текущего шрифта виджета. Эквивалентно QFontMetrics(widget->font()).
См. также font(), fontInfo() и setFont().
QPalette::ColorRole QWidget::foregroundRole() const
Возвращает роль переднего плана.
Роль переднего плана определяет цвет из palette виджета, используемый для отрисовки переднего плана.
Если роль переднего плана не установлена явно, функция возвращает роль, которая контрастирует с ролью заднего плана.
См. также setForegroundRole() и backgroundRole().
QPixmap QWidget::grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))
Отображает виджет в виде пиксельного изображения, ограниченного заданным прямоугольником rectangle. Если у виджета есть дочерние элементы, они также отрисовываются в соответствующих позициях.
Если задан прямоугольник с некорректным размером (по умолчанию), отображается весь виджет.
Примечание: Эта функция может быть вызвана через механизм метаобъектов и из QML. См. Q_INVOKABLE.
Эта функция была добавлена в Qt 5.0.
void QWidget::grabGesture(Qt::GestureType gesture, Qt::GestureFlags flags = Qt::GestureFlags())
Подписывает виджет на данное событие gesture со специфическими флагами flags.
Эта функция была добавлена в Qt 4.6.
См. также ungrabGesture() и QGestureEvent.
void QWidget::grabKeyboard()
Захватывает ввод с клавиатуры.
Этот виджет получает все события клавиатуры до тех пор, пока не будет вызван releaseKeyboard(); другие виджеты не получают событий клавиатуры вообще. События мыши не затронуты. Используйте grabMouse(), если нужно захватить и мышь.
Виджет фокуса не затронут, за исключением того, что он не получает никаких событий клавиатуры. setFocus() перемещает фокус как обычно, но новый виджет фокуса получает события клавиатуры только после вызова releaseKeyboard().
Если другой виджет в данный момент захватывает ввод с клавиатуры, захват этого виджета освобождается в первую очередь.
См. также releaseKeyboard(), grabMouse(), releaseMouse() и focusWidget().
void QWidget::grabMouse()
Захватывает ввод с мыши.
Этот виджет получает все события мыши до тех пор, пока не будет вызван releaseMouse(); другие виджеты не получают событий мыши вообще. События клавиатуры не затронуты. Используйте grabKeyboard(), если нужно захватить клавиатуру.
Предупреждение: Ошибки в приложениях с захватом мыши очень часто блокируют терминал. Используйте эту функцию с большой осторожностью и рассмотрите возможность использования параметра командной строки -nograb во время отладки.
Практически никогда нет необходимости захватывать мышь при использовании Qt, поскольку Qt делает это разумно. В частности, Qt захватывает мышь при нажатии кнопки мыши и удерживает её, пока не будет отпущена последняя кнопка.
Примечание: Только видимые виджеты могут захватывать ввод с мыши. Если для виджета isVisible() возвращает false, этот виджет не может вызвать grabMouse().
Примечание: В Windows функция grabMouse() работает только если курсор мыши находится внутри окна, принадлежащего этому процессу. В macOS функция grabMouse() работает только когда курсор находится внутри рамки этого виджета.
См. также releaseMouse(), grabKeyboard() и releaseKeyboard().
void QWidget::grabMouse(const QCursor &cursor)
Эта функция перегружает grabMouse().
Захватывает ввод мыши и изменяет форму курсора.
Курсор примет форму cursor (на всё время захвата фокуса мыши) и только этот виджет будет получать события мыши до тех пор, пока не будет вызван releaseMouse().
Предупреждение: Захват мыши может заблокировать терминал.
Примечание: См. примечание в QWidget::grabMouse().
См. также releaseMouse(), grabKeyboard(), releaseKeyboard() и setCursor().
int QWidget::grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut)
Добавляет ярлык в систему ярлыков Qt, который отслеживает заданную последовательность key в заданном context. Если context равен Qt::ApplicationShortcut, ярлык применяется ко всему приложению. В противном случае, он либо локальный для этого виджета (Qt::WidgetShortcut), либо для самого окна (Qt::WindowShortcut).
Если ту же последовательность key захватили несколько виджетов, при её нажатии событие QEvent::Shortcut отправляется всем соответствующим виджетам в неопределённом порядке, но со значением флага ``ambiguous'' (неопределённый).
Предупреждение: Обычно вам не нужно использовать эту функцию; вместо этого создайте QAction с необходимыми последовательностями нажатия клавиш (если вам также нужны эквивалентные пункты меню и кнопки на панели инструментов) или QShortcut, если вам нужны только последовательности нажатия клавиш. И QAction, и QShortcut обрабатывают всю фильтрацию событий за вас и предоставляют сигналы, которые срабатывают при нажатии пользователем последовательности клавиш, поэтому они намного проще в использовании, чем эта низкоуровневая функция.
См. также releaseShortcut() и setShortcutEnabled().
QGraphicsEffect *QWidget::graphicsEffect() const
Функция graphicsEffect возвращает указатель на графический эффект виджета.
Если у виджета нет графического эффекта, возвращается nullptr.
Эта функция была добавлена в Qt 4.6.
См. также setGraphicsEffect().
QGraphicsProxyWidget *QWidget::graphicsProxyWidget() const
Возвращает прокси-виджет для соответствующего вложенного виджета в представлении графики; в противном случае возвращает nullptr.
Эта функция была добавлена в Qt 4.5.
См. также QGraphicsProxyWidget::createProxyForChildWidget() и QGraphicsScene::addWidget().
bool QWidget::hasEditFocus() const
Возвращает true, если у этого виджета в данный момент есть фокус редактирования; в противном случае возвращает false.
Эта функция доступна только в Qt для встраиваемой Linux-системы.
См. также setEditFocus() и QApplication::navigationMode().
[virtual] bool QWidget::hasHeightForWidth() const
Возвращает true, если предпочтительная высота виджета зависит от его ширины; в противном случае возвращает false.
Эта функция была добавлена в Qt 5.0.
[virtual] int QWidget::heightForWidth(int w) const
Возвращает предпочтительную высоту этого виджета, учитывая ширину w.
Если у этого виджета есть макет, реализация по умолчанию возвращает предпочтительную высоту макета. Если макета нет, реализация по умолчанию возвращает -1, указывая, что предпочтительная высота не зависит от ширины.
[virtual protected] void QWidget::hideEvent(QHideEvent *event)
Этот обработчик событий может быть переопределен в подклассе для получения событий скрытия виджета. Событие передаётся в параметре event.
События скрытия отправляются виджетам сразу после их скрытия.
Примечание: Виджет получает спонтанные события показа и скрытия, когда его состояние отображения меняется системой окон, например, спонтанное событие скрытия, когда пользователь сворачивает окно, и спонтанное событие показа, когда окно восстанавливается. После получения спонтанного события скрытия виджет всё ещё считается видимым в смысле isVisible().
См. также visible, event() и QHideEvent.
[override virtual protected] void QWidget::initPainter(QPainter *painter) const
Инициализирует перо, фон и шрифт painter такими же, как у данного виджета. Эта функция вызывается автоматически при открытии рисовальщика на QWidget.
[virtual protected] void QWidget::inputMethodEvent(QInputMethodEvent *event)
Этот обработчик событий для события event может быть переопределён в подклассе для получения событий композиции метода ввода. Этот обработчик вызывается при изменении состояния метода ввода.
Обратите внимание, что при создании пользовательских виджетов редактирования текста атрибут окна Qt::WA_InputMethodEnabled должен быть явно задан (с помощью функции setAttribute()), чтобы получать события метода ввода.
Реализация по умолчанию вызывает event->ignore(), что отклоняет событие метода ввода. Подробнее см. документацию по QInputMethodEvent.
См. также event() и QInputMethodEvent.
[virtual] QVariant QWidget::inputMethodQuery(Qt::InputMethodQuery query) const
Этот метод актуален только для виджетов ввода. Используется методом ввода для запроса набора свойств виджета, чтобы можно было поддерживать сложные операции метода ввода, такие как поддержка окружающего текста и переконверсии.
query определяет, какое свойство запрашивается.
См. также inputMethodEvent(), QInputMethodEvent, QInputMethodQueryEvent и inputMethodHints.
void QWidget::insertAction(QAction *before, QAction *action)
Вставляет действие action в список действий этого виджета перед действием before. Добавляет действие в конец, если before является nullptr или before не является допустимым действием для этого виджета.
В QWidget должно быть только одно действие каждого типа.
См. также removeAction(), addAction(), QMenu, contextMenuPolicy и actions().
void QWidget::insertActions(QAction *before, QList<QAction *> actions)
Вставляет действия actions в список действий этого виджета перед действием before. Добавляет действия в конец, если before является nullptr или before не является допустимым действием для этого виджета.
В QWidget может быть не более одного действия каждого типа.
См. также removeAction(), QMenu, insertAction() и contextMenuPolicy.
bool QWidget::isAncestorOf(const QWidget *child) const
Возвращает true, если этот виджет является родителем (или предком, и так далее на любом уровне) данного child, и оба виджета находятся в одном окне; в противном случае возвращает false.
bool QWidget::isEnabledTo(const QWidget *ancestor) const
Возвращает true, если этот виджет станет активным, если ancestor активен; в противном случае возвращает false.
Это выполняется, если ни сам виджет, ни любой родитель до, но не включая ancestor, не были явно отключены.
isEnabledTo(0) возвращает false, если этот виджет или любой из его предков был явно отключен.
Здесь термин ``предок'' обозначает родительский виджет в рамках одного окна.
Поэтому isEnabledTo(0) останавливается на окне этого виджета, в отличие от isEnabled(), которое также учитывает родительские окна.
См. также setEnabled() и enabled.
bool QWidget::isHidden() const
Возвращает true, если виджет скрыт; в противном случае возвращает false.
Скрытый виджет будет виден только при вызове show() для него. Он не будет автоматически показан, когда показывается родитель.
END_OF_DOCUMENT_MARKERДля проверки видимости используйте !isVisible() вместо этого (обратите внимание на знак восклицания).
isHidden() подразумевает !isVisible(), но виджет может быть невидимым и не скрытым одновременно. Это относится к виджетам, которые являются дочерними элементами виджетов, которые не видны.
Виджеты скрыты, если:
- они были созданы как независимые окна,
- они были созданы как дочерние элементы видимых виджетов,
- hide() или setVisible(false) был вызван.
bool QWidget::isVisibleTo(const QWidget *ancestor) const
Возвращает true , если этот виджет станет видимым, если ancestor показан; в противном случае возвращает false.
Истинное значение возникает, если ни сам виджет, ни какой-либо родитель до, но не включая ancestor, не был явно скрыт.
Эта функция все равно вернёт значение true, если виджет скрыт другими окнами на экране, но мог быть физически видимым, если бы он или они были перемещены.
isVisibleTo(0) идентично isVisible().
См. также show(), hide() и isVisible().
bool QWidget::isWindow() const
Возвращает true , если виджет является независимым окном, в противном случае возвращает false.
Окно — это виджет, который визуально не является дочерним элементом другого виджета и обычно имеет рамку и заголовок окна.
Окно может иметь родительский виджет. В этом случае оно будет сгруппировано со своим родителем и удалено при удалении родителя, минимизировано при минимизации родителя и т. д. При поддержке менеджером окон оно также будет иметь общую запись в панели задач со своим родителем.
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 и Пример Tetrix.
[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий отпускания клавиш для виджета.
Виджет должен получить фокус первоначально и иметь фокус, чтобы получить событие отпускания клавиши.
Если вы переопределяете этот обработчик, очень важно вызвать реализацию базового класса, если вы не действуете на клавишу.
По умолчанию реализация игнорирует событие, чтобы родительский виджет мог его интерпретировать.
Обратите внимание, что QKeyEvent начинается с isAccepted() == true, поэтому вам не нужно вызывать QKeyEvent::accept() — просто не вызывайте реализацию базового класса, если вы действуете на клавишу.
См. также keyPressEvent(), QEvent::ignore(), setFocusPolicy(), focusInEvent(), focusOutEvent(), event() и QKeyEvent.
[static] QWidget *QWidget::keyboardGrabber()
Возвращает виджет, который в данный момент захватывает вход с клавиатуры.
Если в этом приложении в данный момент ни один виджет не захватывает ввод с клавиатуры, возвращается nullptr.
См. также grabMouse() и mouseGrabber().
QLayout *QWidget::layout() const
Возвращает менеджер компоновки, установленный на этом виджете, или nullptr , если менеджер компоновки не установлен.
Менеджер компоновки задаёт геометрию дочерних виджетов, которые были добавлены в компоновку.
См. также setLayout(), sizePolicy() и Управление компоновкой.
[virtual protected] void QWidget::leaveEvent(QEvent *event)
Этот обработчик событий может быть переопределён в подклассе для получения событий выхода виджета, которые передаются в параметре event.
Событие выхода отправляется виджету, когда указатель мыши покидает виджет.
См. также enterEvent(), mouseMoveEvent() и event().
QPoint QWidget::mapFrom(const QWidget *parent, const QPoint &pos) const
Преобразует координату виджета pos из системы координат parent в систему координат этого виджета. parent не должен быть nullptr и должен быть родителем вызываемого виджета.
См. также mapTo(), mapFromParent(), mapFromGlobal() и underMouse().
QPoint QWidget::mapFromGlobal(const QPoint &pos) const
Преобразует глобальные экранные координаты pos в координаты виджета.
См. также mapToGlobal(), mapFrom() и mapFromParent().
QPoint QWidget::mapFromParent(const QPoint &pos) const
Преобразует координату родительского виджета pos в координаты виджета.
То же, что и mapFromGlobal(), если у виджета нет родителя.
См. также mapToParent(), mapFrom(), mapFromGlobal() и underMouse().
QPoint QWidget::mapTo(const QWidget *parent, const QPoint &pos) const
Преобразует координату виджета pos в систему координат parent. parent не должен быть nullptr и должен быть родителем вызываемого виджета.
См. также mapFrom(), mapToParent(), mapToGlobal() и underMouse().
QPoint QWidget::mapToGlobal(const QPoint &pos) const
Преобразует координату виджета pos в глобальные экранные координаты. Например, mapToGlobal(QPoint(0,0)) даст глобальные координаты верхнего левого пикселя виджета.
См. также mapFromGlobal(), mapTo() и mapToParent().
QPoint QWidget::mapToParent(const QPoint &pos) const
Преобразует координату виджета pos в координаты родительского виджета.
То же, что и mapToGlobal(), если у виджета нет родителя.
См. также mapFromParent(), mapTo(), mapToGlobal() и underMouse().
QRegion QWidget::mask() const
Возвращает маску, текущую установленную на виджете. Если маска не установлена, возвращается пустая область.
См. также setMask(), clearMask(), QRegion::isEmpty() и Пример часов с формой.
[override virtual protected] int QWidget::metric(QPaintDevice::PaintDeviceMetric m) const
Переопределяет: QPaintDevice::metric(QPaintDevice::PaintDeviceMetric metric) const.
Внутренняя реализация виртуальной функции QPaintDevice::metric().
m — метрика для получения.
[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event)
Обработчик этого события, для события event, может быть переопределен в подклассе для получения событий двойного щелчка мыши для виджета.
По умолчанию вызывается mousePressEvent().
Примечание: Виджет также получит события нажатия и отпускания мыши помимо события двойного щелчка. Если другой виджет, перекрывающий этот виджет, исчезает в ответ на события нажатия или отпускания, то этот виджет получит только событие двойного щелчка. Разработчик должен убедиться, что приложение интерпретирует эти события правильно.
См. также mousePressEvent(), mouseReleaseEvent(), mouseMoveEvent(), event(), и QMouseEvent.
[static] QWidget *QWidget::mouseGrabber()
Возвращает виджет, который в данный момент захватывает ввод мыши.
Если ни один виджет в этом приложении в данный момент не захватывает мышь, nullptr возвращается.
См. также grabMouse() и keyboardGrabber().
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event)
Этот обработчик событий, для события event, может быть переопределен в подклассе для получения событий перемещения мыши для виджета.
Если отслеживание мыши выключено, события перемещения мыши происходят только если нажата кнопка мыши, пока мышь перемещается. Если отслеживание мыши включено, события перемещения мыши происходят даже если не нажата ни одна кнопка мыши.
QMouseEvent::pos() сообщает о позиции курсора мыши относительно этого виджета. Для событий нажатия и отпускания позиция обычно такая же, как позиция последнего события перемещения мыши, но она может отличаться, если рука пользователя дрожит. Это особенность базовой системы окон, а не Qt.
Если вы хотите отобразить всплывающую подсказку немедленно, во время перемещения мыши (например, чтобы получить координаты мыши с помощью QMouseEvent::pos() и отобразить их как всплывающую подсказку), сначала необходимо включить отслеживание мыши, как описано выше. Затем, чтобы убедиться, что всплывающая подсказка обновляется немедленно, необходимо вызвать QToolTip::showText() вместо setToolTip() в вашей реализации mouseMoveEvent().
См. также 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, long *result)
Этот специальный обработчик событий может быть переопределен в подклассе для получения событий родной платформы, определённых по eventType, которые передаются в параметре message.
В вашей реализации этой функции, если вы хотите остановить обработку события Qt, верните true и установите result. Параметр result имеет значение только в Windows. Если вы вернете false, это родное событие передается обратно в Qt, который преобразует событие в событие Qt и отправляет его виджету.
Примечание: События доставляются только в этот обработчик событий, если у виджета есть дескриптор окна родной платформы.
Примечание: Эта функция заменяет функции фильтрации событий x11Event(), winEvent() и macEvent() Qt 4.
| Платформа | Идентификатор типа события | Тип сообщения | Тип результата |
|---|---|---|---|
| Windows | "windows_generic_MSG" | MSG * | LRESULT |
| macOS | "NSEvent" | NSEvent * | |
| XCB | "xcb_generic_event_t" | xcb_generic_event_t * |
См. также QAbstractNativeEventFilter.
QWidget *QWidget::nativeParentWidget() const
Возвращает родного родителя для этого виджета, т.е. следующий виджет-предок, имеющий идентификатор системы, или nullptr если у него нет родного родителя.
Эта функция была введена в Qt 4.4.
См. также effectiveWinId().
QWidget *QWidget::nextInFocusChain() const
Возвращает следующий виджет в цепочке фокуса этого виджета.
См. также previousInFocusChain().
void QWidget::overrideWindowFlags(Qt::WindowFlags flags)
Устанавливает флаги окна для виджета на flags, без уведомления системы окон.
Предупреждение: Не вызывайте эту функцию, если вы не точно знаете, что делаете.
См. также setWindowFlags().
[override virtual] QPaintEngine *QWidget::paintEngine() const
Переопределяет: QPaintDevice::paintEngine() const.
Возвращает движок отрисовки виджета.
Обратите внимание, что пользователь не должен вызывать эту функцию явно, поскольку она предназначена только для переопределения. Функция вызывается Qt внутри и по умолчанию может не всегда возвращать корректный указатель.
[virtual protected] void QWidget::paintEvent(QPaintEvent *event)
Этот обработчик событий может быть переопределен в подклассе для получения событий отрисовки, передаваемых в event.
Событие отрисовки — это запрос на перерисовку всего или части виджета. Это может произойти по одной из следующих причин:
- repaint() или update() были вызваны,
- виджет был скрыт и теперь виден, или
- по многим другим причинам.
Многие виджеты могут просто перерисовать всю свою поверхность, когда их об этом просят, но некоторые медленные виджеты должны оптимизировать, рисуя только запрошенную область: QPaintEvent::region(). Эта оптимизация скорости не изменяет результат, так как рисование обрезается до этой области во время обработки события. QListView и QTableView делают это, например.
Qt также пытается ускорить отрисовку, объединяя несколько событий отрисовки в одно. Когда update() вызывается несколько раз или система окон отправляет несколько событий отрисовки, Qt объединяет эти события в одно событие с большей областью (см. QRegion::united()). Функция repaint() не позволяет оптимизировать, поэтому рекомендуется использовать update() всякий раз, когда это возможно.
Когда происходит событие отрисовки, область обновления обычно была стерта, поэтому вы рисуете на фоне виджета.
Фон можно установить с помощью setBackgroundRole() и setPalette().
Начиная с Qt 4.0, QWidget автоматически создает буферизацию при отрисовке, поэтому нет необходимости писать код для двойной буферизации в paintEvent(), чтобы избежать мерцания.
Примечание: Обычно следует воздерживаться от вызова update() или repaint() внутри paintEvent(). Например, вызов update() или repaint() для дочерних элементов внутри paintEvent() приводит к неопределённому поведению; дочерний элемент может или не может получить событие отрисовки.
Предупреждение: Если вы используете пользовательский движок отрисовки без буфера Qt, необходимо установить Qt::WA_PaintOnScreen. В противном случае, QWidget::paintEngine() никогда не будет вызываться; вместо этого будет использоваться буфер.
См. также event(), repaint(), update(), QPainter, QPixmap, QPaintEvent и Пример аналоговых часов.
QWidget *QWidget::parentWidget() const
Возвращает родительский элемент виджета или nullptr, если у него нет родительского виджета.
QWidget *QWidget::previousInFocusChain() const
Функция previousInFocusChain возвращает предыдущий виджет в цепочке фокуса этого виджета.
Эта функция была представлена в Qt 4.6.
См. также nextInFocusChain().
void QWidget::releaseKeyboard()
Отпускает захват клавиатуры.
См. также grabKeyboard(), grabMouse() и releaseMouse().
void QWidget::releaseMouse()
Отпускает захват мыши.
См. также grabMouse(), grabKeyboard() и releaseKeyboard().
void QWidget::releaseShortcut(int id)
Удаляет ярлык с заданным id из системы ярлыков Qt. Виджет больше не будет получать события QEvent::Shortcut для последовательности клавиш ярлыка (если у него нет других ярлыков с той же последовательностью клавиш).
Предупреждение: Вам обычно не нужно использовать эту функцию, так как система ярлыков Qt автоматически удаляет ярлыки при уничтожении их родительского виджета. Лучше использовать QAction или QShortcut для обработки ярлыков, так как они более удобны в использовании, чем эта функция низкого уровня. Обратите также внимание, что это дорогостоящая операция.
См. также grabShortcut() и setShortcutEnabled().
void QWidget::removeAction(QAction *action)
Удаляет действие action из списка действий этого виджета.
См. также insertAction(), actions() и insertAction().
void QWidget::render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
Отображает sourceRegion этого виджета в target, используя renderFlags для определения способа отображения. Отрисовка начинается в targetOffset в target. Например:
QPixmap pixmap(widget->size()); widget->render(&pixmap);
Если sourceRegion является пустой областью, эта функция будет использовать QWidget::rect() в качестве области, т.е. весь виджет.
Убедитесь, что вы вызываете QPainter::end() для активного художника устройства target (если таковой имеется) перед отображением. Например:
QPainter painter(this); ... painter.end(); myWidget->render(this);
Примечание: Чтобы получить содержимое QOpenGLWidget, используйте QOpenGLWidget::grabFramebuffer() вместо этого.
Примечание: Чтобы получить содержимое QGLWidget (устаревший), используйте QGLWidget::grabFrameBuffer() или QGLWidget::renderPixmap() вместо этого.
Эта функция была представлена в Qt 4.3.
void QWidget::render(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
Это перегруженная функция.
Отображает виджет в QPainter::device() художника painter.
Применяемые преобразования и настройки к painter будут использоваться при отображении.
Примечание: painter должен быть активным. В macOS виджет будет отображён в QPixmap, а затем нарисован painter.
См. также QPainter::device().
void QWidget::repaint(int x, int y, int w, int h)
Это перегруженная функция.
Этот вариант перерисовывает прямоугольник (x, y, w, h) внутри виджета.
Если w отрицательно, оно заменяется на width() - x, а если h отрицательно, оно заменяется на height() - y.
void QWidget::repaint(const QRect &rect)
Это перегруженная функция.
Этот вариант перерисовывает прямоугольник rect внутри виджета.
void QWidget::repaint(const QRegion &rgn)
Это перегруженная функция.
Этот вариант перерисовывает область rgn внутри виджета.
void QWidget::resize(int w, int h)
Это перегруженная функция.
Это соответствует resize(QSize(w, h)).
Примечание: Функция-сеттер для свойства size.
[virtual protected] void QWidget::resizeEvent(QResizeEvent *event)
Этот обработчик событий может быть переопределён в подклассе для получения событий изменения размера виджета, которые передаются в параметре event. При вызове resizeEvent(), у виджета уже есть его новые геометрические данные. Предыдущий размер доступен через QResizeEvent::oldSize().
Виджет будет стерт и получит событие отрисовки сразу после обработки события изменения размера. Внутри этого обработчика не нужно (и не следует) выполнять отрисовку.
См. также moveEvent(), event(), resize(), 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() для восстановления геометрии и состояния панелей инструментов и плавающих окон.
Эта функция была представлена в Qt 4.2.
См. также 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() для сохранения геометрии и состояния панелей инструментов и плавающих окон.
Эта функция была представлена в Qt 4.2.
См. также restoreGeometry(), QMainWindow::saveState() и QMainWindow::restoreState().
QScreen *QWidget::screen() const
Возвращает экран, на котором находится виджет.
Эта функция была представлена в Qt 5.14.
См. также windowHandle().
void QWidget::scroll(int dx, int dy)
Прокручивает виджет, включая его дочерние элементы, на dx пикселей вправо и на dy пикселей вниз. И dx и dy могут быть отрицательными.
После прокрутки виджеты получат события отрисовки для областей, которые необходимо перерисовать. Для виджетов, которые Qt знает как непрозрачные, это только недавно открытые части. Например, если непрозрачный виджет прокручен влево на 8 пикселей, необходимо обновить только полоску шириной 8 пикселей на правом краю.
Поскольку виджеты по умолчанию распространяют содержимое своих родителей, вам необходимо установить свойство autoFillBackground или использовать setAttribute(), чтобы установить атрибут Qt::WA_OpaquePaintEvent, для того, чтобы сделать виджет непрозрачным.
Для виджетов, использующих распространение содержимого, прокрутка вызовет обновление всей области прокрутки.
См. также Прозрачность и двойная буферизация.
void QWidget::scroll(int dx, int dy, const QRect &r)
Это перегруженный метод.
Этот вариант прокручивает только r и не перемещает дочерние элементы виджета.
Если r пуста или недействительна, результат не определен.
См. также QScrollArea.
void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on = true)
Устанавливает атрибут attribute для этого виджета, если on равно true; в противном случае очищает атрибут.
См. также testAttribute().
void QWidget::setBackgroundRole(QPalette::ColorRole role)
Устанавливает роль фона виджета в role.
Роль фона определяет кисть из палитры виджета palette, которая используется для отрисовки фона.
Если role равно QPalette::NoRole, то виджет наследует роль фона родителя.
Обратите внимание, что стили могут свободно выбирать любой цвет из палитры. Вы можете изменить палитру или установить стилевое оформление, если вы не достигли желаемого результата с помощью setBackgroundRole().
См. также backgroundRole() и foregroundRole().
void QWidget::setBaseSize(int basew, int baseh)
Это перегруженный метод.
Это соответствует setBaseSize(QSize(basew, baseh)). Устанавливает базовый размер виджета шириной basew и высотой baseh.
Примечание: Метод-установщик свойства baseSize.
void QWidget::setContentsMargins(int left, int top, int right, int bottom)
Устанавливает отступы вокруг содержимого виджета с размерами left, top, right и bottom. Отступы используются системой макетов и могут быть использованы подклассами для указания области отрисовки (например, за исключением рамки).
Изменение отступов вызовет resizeEvent().
См. также contentsRect() и contentsMargins().
void QWidget::setContentsMargins(const QMargins &margins)
Это перегруженный метод.
Функция setContentsMargins устанавливает отступы вокруг содержимого виджета.
Устанавливает отступы вокруг содержимого виджета с размерами, определяемыми margins. Отступы используются системой макетов и могут быть использованы подклассами для указания области отрисовки (например, за исключением рамки).
Изменение отступов вызовет resizeEvent().
Эта функция была добавлена в Qt 4.6.
См. также contentsRect() и contentsMargins().
void QWidget::setEditFocus(bool enable)
Если enable равно true, этот виджет получает фокус редактирования, в этом случае Qt::Key_Up и Qt::Key_Down будут переданы виджету нормально; в противном случае, Qt::Key_Up и Qt::Key_Down используются для изменения фокуса.
Эта функция доступна только в Qt для Embedded Linux.
См. также hasEditFocus() и QApplication::navigationMode().
void QWidget::setFixedHeight(int h)
Устанавливает минимальную и максимальную высоту виджета в h, не изменяя ширину. Предоставлено для удобства.
См. также sizeHint(), minimumSize(), maximumSize() и setFixedSize().
void QWidget::setFixedSize(const QSize &s)
Устанавливает минимальный и максимальный размеры виджета в s, предотвращая его рост или уменьшение.
Это переопределит ограничения размера, установленные QLayout.
Для удаления ограничений установите размер в QWIDGETSIZE_MAX.
В качестве альтернативы, если вы хотите, чтобы виджет имел фиксированный размер, основанный на его содержимом, вы можете вызвать QLayout::setSizeConstraint(QLayout::SetFixedSize);
См. также maximumSize и minimumSize.
void QWidget::setFixedSize(int w, int h)
Это перегруженный метод.
Устанавливает ширину виджета в w и высоту в h.
void QWidget::setFixedWidth(int w)
Устанавливает минимальную и максимальную ширину виджета в w, не изменяя высоту. Предоставлено для удобства.
См. также sizeHint(), minimumSize(), maximumSize() и setFixedSize().
void QWidget::setFocus(Qt::FocusReason reason)
Предоставляет фокус ввода с клавиатуры этому виджету (или его прокси-виджету), если этот виджет или один из его родителей является активным окном. Аргумент reason будет передан в любое событие фокуса, отправленное из этой функции, он используется для объяснения того, что вызвало получение фокуса виджетом. Если окно не активно, виджету будет предоставлен фокус, когда окно станет активным.
Сначала событие о предстоящем изменении фокуса отправляется виджету с фокусом (если таковой имеется), чтобы сообщить ему, что он собирается потерять фокус. Затем фокус меняется, событие потери фокуса отправляется предыдущему элементу с фокусом, и событие получения фокуса отправляется новому элементу, чтобы сообщить ему, что он только что получил фокус. (Ничего не происходит, если виджеты получения и потери фокуса совпадают.)
Примечание: Встраиваемых платформах setFocus() не приведет к открытию панели ввода методом ввода. Если вы хотите, чтобы это произошло, вы должны сами отправить событие QEvent::RequestSoftwareInputPanel в виджет.
setFocus() предоставляет фокус виджету независимо от его политики фокуса, но не очищает захват клавиатуры (см. grabKeyboard()).
Обратите внимание, что если виджет скрыт, он не будет принимать фокус, пока не будет показан.
Предупреждение: Если вы вызываете setFocus() в функции, которая может вызываться из focusOutEvent() или focusInEvent(), вы можете получить рекурсию.
См. также hasFocus(), clearFocus(), focusInEvent(), focusOutEvent(), setFocusPolicy(), focusWidget(), QApplication::focusWidget(), grabKeyboard(), grabMouse(), Фокус клавиатуры в виджетах и QEvent::RequestSoftwareInputPanel.
void QWidget::setFocusProxy(QWidget *w)
Устанавливает прокси-виджет фокуса виджета на виджет w. Если w это nullptr, функция сбрасывает этот виджет, чтобы у него не было прокси-виджета фокуса.
Некоторые виджеты могут «иметь фокус», но создают дочерний виджет, например QLineEdit, для фактического управления фокусом. В этом случае виджет может установить редактор как свой прокси-виджет фокуса.
setFocusProxy() устанавливает виджет, который фактически получит фокус, когда «этот виджет» получит его. Если есть прокси-виджет фокуса, setFocus() и hasFocus() работают с прокси-виджетом фокуса. Если «этот виджет» является виджетом фокуса, то setFocusProxy() перемещает фокус в новый прокси-виджет фокуса.
См. также focusProxy().
void QWidget::setForegroundRole(QPalette::ColorRole role)
Устанавливает роль переднего плана виджета в role.
Роль переднего плана определяет цвет из палитры виджета palette, используемый для отрисовки переднего плана.
Если role равно QPalette::NoRole, виджет использует роль переднего плана, которая контрастирует с ролью фона.
Обратите внимание, что стили могут свободно выбирать любой цвет из палитры. Вы можете изменить палитру или установить стилевое оформление, если не получили желаемого результата с помощью setForegroundRole().
См. также foregroundRole() и backgroundRole().
void QWidget::setGeometry(int x, int y, int w, int h)
Это перегруженный метод.
Это соответствует setGeometry(QRect(x, y, w, h)).
Примечание: Метод-сеттер для свойства geometry.
void QWidget::setGraphicsEffect(QGraphicsEffect *effect)
Функция setGraphicsEffect предназначена для установки графического эффекта виджета.
Устанавливает effect в качестве эффекта виджета. Если на этом виджете уже установлен эффект, QWidget удалит существующий эффект перед установкой нового effect.
Если effect установлен на другом виджете, setGraphicsEffect() удалит эффект с этого виджета и установит его на текущий виджет.
QWidget принимает владение effect.
Примечание: Этот метод применит эффект к самому себе и всем своим дочерним виджетам.
Примечание: Графические эффекты не поддерживаются для виджетов на основе OpenGL, таких как QGLWidget, QOpenGLWidget и QQuickWidget.
Этот метод был введён в Qt 4.6.
См. также graphicsEffect().
void QWidget::setLayout(QLayout *layout)
Устанавливает менеджер компоновки для данного виджета на layout.
Если на этом виджете уже установлен менеджер компоновки, QWidget не позволит установить другой. Сначала необходимо удалить существующий менеджер компоновки (возвращаемый методом layout()), прежде чем вызывать setLayout() с новым менеджером компоновки.
Если layout является менеджером компоновки другого виджета, setLayout() переродирует менеджер компоновки и сделает его менеджером компоновки для этого виджета.
Пример:
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(formWidget);
setLayout(layout); Альтернативой вызову этой функции является передача этого виджета в конструктор менеджера компоновки.
QWidget примет владение layout.
См. также layout() и Управление компоновкой.
void QWidget::setMask(const QBitmap &bitmap)
Делает видимыми только те пиксели виджета, для которых в bitmap соответствует бит 1. Если область включает пиксели за пределами rect() виджета, элементы управления системного окна в этой области могут быть или не быть видимыми в зависимости от платформы.
Обратите внимание, что этот эффект может быть медленным, если область является особенно сложной.
Следующий код демонстрирует, как изображение с альфа-каналом может быть использовано для создания маски для виджета:
QLabel topLevelLabel;
QPixmap pixmap(":/images/tux.png");
topLevelLabel.setPixmap(pixmap);
topLevelLabel.setMask(pixmap.mask()); Метка, отображаемая этим кодом, замаскирована с использованием содержащегося в ней изображения, что создаёт впечатление, что нерегулярно-оформленное изображение рисуется непосредственно на экран.
Маскированные виджеты получают события мыши только на своих видимых участках.
См. также mask(), clearMask(), windowOpacity() и Пример часов с формой.
void QWidget::setMask(const QRegion ®ion)
Это перегруженный метод.
Делает видимыми только те части виджета, которые перекрываются region. Если область включает пиксели за пределами rect() виджета, элементы управления системного окна в этой области могут быть или не быть видимыми в зависимости от платформы.
Обратите внимание, что этот эффект может быть медленным, если область является особенно сложной.
См. также 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)
Устанавливает родительский виджет для текущего виджета на parent и сбрасывает флаги окна. Виджет перемещается в позицию (0, 0) в новом родительском виджете.
Если новый родительский виджет находится в другом окне, переродившийся виджет и его дочерние элементы добавляются в конец цепочки перехода на вкладку нового родительского виджета в том же внутреннем порядке, что и прежде. Если один из перемещённых виджетов имел фокус клавиатуры, setParent() вызывает clearFocus() для этого виджета.
Если новый родительский виджет находится в том же окне, что и старый родитель, установка родителя не изменяет порядок перехода на вкладку или фокус клавиатуры.
Если «новый» родительский виджет совпадает со старым родительским виджетом, эта функция ничего не делает.
Примечание: Виджет становится невидимым при изменении родителя, даже если он был ранее видим. Для повторного отображения виджета необходимо вызвать show().
Предупреждение: Очень маловероятно, что вам когда-либо понадобится эта функция. Если у вас есть виджет, динамически меняющий своё содержимое, гораздо проще использовать QStackedWidget.
См. также setWindowFlags().
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
Это перегруженный метод.
Эта функция также принимает флаги виджета, f, в качестве аргумента.
void QWidget::setShortcutAutoRepeat(int id, bool enable = true)
Если enable равно true, автоматический повтор сочетания клавиш с заданным id включён; в противном случае он выключен.
Этот метод был введён в Qt 4.2.
См. также 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)
Это перегруженный метод.
Устанавливает политику размеров виджета на horizontal и vertical, с стандартным растяжением и без высоты относительно ширины.
Примечание: Метод-сеттер для свойства sizePolicy.
См. также QSizePolicy::QSizePolicy().
void QWidget::setStyle(QStyle *style)
Устанавливает графический стиль виджета на style. Владение объектом стиля не передаётся.
Если стиль не задан, виджет использует стиль приложения QApplication::style() вместо.
Установка стиля виджета не влияет на существующие или будущие дочерние виджеты.
Предупреждение: Эта функция особенно полезна для демонстрационных целей, где вы хотите продемонстрировать возможности стилизации Qt. Реальные приложения должны избегать её и использовать один согласованный графический стиль.
Предупреждение: Сейчас стили CSS Qt не поддерживаются для пользовательских подклассов QStyle. Мы планируем решить эту проблему в будущей версии.
См. также style(), QStyle, QApplication::style() и QApplication::setStyle().
[static] void QWidget::setTabOrder(QWidget *first, QWidget *second)
Устанавливает second виджет после first виджета в порядке фокуса.
Это эффективно удаляет second виджет из его цепочки фокуса и вставляет его после first виджета.
Обратите внимание, что так как порядок перехода на вкладку second виджета изменяется, цепочка должна быть организована так:
setTabOrder(a, b); // a to b setTabOrder(b, c); // a to b to c setTabOrder(c, d); // a to b to c to d
а не так:
// WRONG setTabOrder(c, d); // c to d setTabOrder(a, b); // a to b AND c to d setTabOrder(b, c); // a to b to c, but not c to d
Если first или second имеют прокси фокуса, setTabOrder() корректно заменяет прокси.
Примечание: Начиная с Qt 5.10: Виджет, у которого есть дочерний элемент как прокси фокуса, понимается как составной виджет. При установке порядка перехода на вкладку между одним или двумя составными виджетами локальный порядок перехода на вкладку внутри каждого будет сохранён. Это означает, что если оба виджета являются составными виджетами, результирующий порядок перехода на вкладку будет от последнего дочернего элемента внутри first до первого дочернего элемента внутри second.
См. также setFocusPolicy(), setFocusProxy() и Фокус клавиатуры в виджетах.
void QWidget::setWindowFlag(Qt::WindowType flag, bool on = true)
Устанавливает флаг окна flag для этого виджета, если on имеет значение true; в противном случае очищает флаг.
Эта функция была добавлена в Qt 5.9.
См. также setWindowFlags(), windowFlags() и windowType().
void QWidget::setWindowRole(const QString &role)
Устанавливает роль окна на role. Это имеет смысл только для окон на X11.
См. также windowRole().
void QWidget::setWindowState(Qt::WindowStates windowState)
Устанавливает состояние окна в windowState. Состояние окна — это объединённое по оператору OR значение из Qt::WindowState: Qt::WindowMinimized, Qt::WindowMaximized, Qt::WindowFullScreen и Qt::WindowActive.
Если окно не отображается (т.е. isVisible() возвращает false), состояние окна вступит в силу при вызове show(). Для видимых окон изменение происходит мгновенно. Например, чтобы переключиться между полноэкранным и обычным режимом, используйте следующий код:
w->setWindowState(w->windowState() ^ Qt::WindowFullScreen);
Для восстановления и активации минимизированного окна (при сохранении его максимального и/или полноэкранного состояния) используйте следующее:
w->setWindowState((w->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
Вызов этой функции скроет виджет. Вам необходимо вызвать show(), чтобы снова отобразить виджет.
Примечание: На некоторых системах окон Qt::WindowActive не работает мгновенно и может быть проигнорировано в определённых случаях.
При изменении состояния окна виджет получает changeEvent() типа QEvent::WindowStateChange.
См. также Qt::WindowState и windowState().
void QWidget::setupUi(QWidget *widget)
Настраивает пользовательский интерфейс для указанного виджета widget.
Примечание: Эта функция доступна для виджетов, которые производятся от описаний пользовательского интерфейса, созданных с использованием uic.
См. также Использование файла UI-дизайнера в вашем приложении C++.
[virtual protected] void QWidget::showEvent(QShowEvent *event)
Обработчик этого события может быть переопределён в подклассе для получения событий отображения виджетов, которые передаются в параметре event.
Непроизвольные события отображения отправляются виджетам непосредственно перед их отображением. Произвольные события отображения окон доставляются позже.
Примечание: Виджет получает произвольные события отображения и скрытия, когда его статус отображения изменяется системой окон, например, произвольное событие скрытия, когда пользователь минимизирует окно, и произвольное событие отображения, когда окно восстанавливается. После получения произвольного события скрытия виджет всё ещё считается видимым в смысле isVisible().
См. также visible, event() и QShowEvent.
void QWidget::stackUnder(QWidget *w)
Размещает виджет под w в стеке родительского виджета.
Для работы виджет и w должны быть братьями.
QStyle *QWidget::style() const
См. также QWidget::setStyle(), QApplication::setStyle() и QApplication::style().
[virtual protected] void QWidget::tabletEvent(QTabletEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий планшета для виджета.
Если вы переопределяете этот обработчик, очень важно ignore() событие, если вы его не обрабатываете, чтобы родительский виджет мог его интерпретировать.
По умолчанию обработчик игнорирует событие.
Если отслеживание планшета выключено, события перемещения планшета происходят только если стилус касается планшета или нажата хотя бы одна кнопка стилуса во время перемещения стилуса. Если отслеживание планшета включено, события перемещения планшета происходят даже когда стилус находится вблизи планшета, без нажатых кнопок.
См. также QEvent::ignore(), QEvent::accept(), event(), setTabletTracking() и QTabletEvent.
bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const
Возвращает true если атрибут attribute установлен для этого виджета; в противном случае возвращает false.
См. также setAttribute().
bool QWidget::underMouse() const
Возвращает true если виджет находится под курсором мыши; в противном случае возвращает false.
Это значение не обновляется должным образом во время операций перетаскивания.
См. также enterEvent() и leaveEvent().
void QWidget::ungrabGesture(Qt::GestureType gesture)
Отписывает виджет от данного типа жеста gesture
Эта функция была добавлена в Qt 4.6.
См. также grabGesture() и QGestureEvent.
void QWidget::update(int x, int y, int w, int h)
Это перегруженная функция.
Этот вариант обновляет прямоугольник (x, y, w, h) внутри виджета.
void QWidget::update(const QRect &rect)
Это перегруженная функция.
Этот вариант обновляет прямоугольник rect внутри виджета.
void QWidget::update(const QRegion &rgn)
Это перегруженная функция.
Этот вариант перерисовывает область rgn внутри виджета.
void QWidget::updateGeometry()
Уведомляет систему компоновки, что этот виджет изменился и может потребоваться изменение геометрии.
Вызовите эту функцию, если sizeHint() или sizePolicy() изменились.
Для явных скрытых виджетов updateGeometry() — это пустая операция. Система компоновки будет уведомлена, как только виджет будет показан.
QRegion QWidget::visibleRegion() const
Возвращает область, где могут произойти события рисования, не затенённую другими виджетами.
Для видимых виджетов это приблизительная оценка области, не покрытой другими виджетами; в противном случае это пустая область.
Функция repaint() при необходимости вызывает эту функцию, поэтому обычно её вызывать не нужно.
[virtual protected] void QWidget::wheelEvent(QWheelEvent *event)
Этот обработчик событий, для события event, может быть переопределён в подклассе для получения событий прокрутки для виджета.
Если вы переопределяете этот обработчик, очень важно ignore() событие, если вы его не обрабатываете, чтобы родительский виджет мог его интерпретировать.
По умолчанию обработчик игнорирует событие.
См. также QEvent::ignore(), QEvent::accept(), event() и QWheelEvent.
WId QWidget::winId() const
Возвращает идентификатор окна системы окон виджета.
Принципиально переносимый, но если вы его используете, вы, вероятно, собираетесь сделать что-то непереносимое. Будьте осторожны.
Если виджет не является родным (чужой), и winId() вызывается на нём, этому виджету будет предоставлен родной дескриптор.
Это значение может изменяться во время выполнения. Событие с типом QEvent::WinIdChange будет отправлено виджету после изменения идентификатора системы окон.
См. также find().
QWidget *QWidget::window() const
Возвращает окно для этого виджета, т.е. следующий виджет-предок, который имеет (или мог бы иметь) рамку системы окон.
Если виджет является окном, возвращается сам виджет.
Типичное использование — изменение заголовка окна:
aWidget->window()->setWindowTitle("New Window Title"); См. также isWindow().
QWindow *QWidget::windowHandle() const
Если это родной виджет, возвращает связанное QWindow. В противном случае возвращает null.
Родные виджеты включают виджеты верхнего уровня, QGLWidget и дочерние виджеты, на которых был вызван winId().
Эта функция была добавлена в Qt 5.0.
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().
Qt::WindowType QWidget::windowType() const
Возвращает тип окна этого виджета. Это идентично windowFlags() & Qt::WindowType_Mask.
См. также windowFlags.
Документация макросов
QWIDGETSIZE_MAX
Определяет максимальный размер объекта QWidget.
Наибольший разрешенный размер виджета — QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX), т. е. QSize (16777215,16777215).
См. также QWidget::setMaximumSize().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qwidget.html