Описание класса QGraphicsWidget
|
|
|
Класс QGraphicsWidget это базовый класс для всех виджетов в QGraphicsScene.
QGraphicsWidget это расширенный базовый класс, который предоставляет дополнительную функциональность по сравнению с QGraphicsItem. Во многих отношениях он похож на QWidget:
В отличае от QGraphicsItem, QGraphicsWidget не является абстрактным классом, вы можете создать экземпляр QGraphicsWidget без необходимости унаследоваться от него. Этот подход полезен для виджетов, которые служат только для упорядочивания дочерних виджетов в компоновке.
QGraphicsWidget может быть использован в качестве базового элемента для вашего собственного элемента если вам нужен расширенное управление фокусом ввода, например, фокусом при обходе и активацией или компоновками.
Так как QGraphicsWidget имеет сходство с QWidget и похожий API, то проще перевести виджет с QWidget на QGraphicsWidget, чем на QGraphicsItem.
Замечание: виджеты, основанные на QWidget, могут быть непосредственно встроены в QGraphicsScene с помощью QGraphicsProxyWidget.
Заметные различия между QGraphicsWidget и QWidget:
QGraphicsWidget | QWidget |
---|---|
Координаты и геометрия определены с помощью qreals (double или float, в зависимости от платформы). | QWidget использует целочисленную геометрию (QPoint, QRect). |
Виджет всегда по-умолчанию видимы; вам необязательно вызывать show() чтобы отобразить виджет. | QWidget по-умолчанию спрятан пока вы не вызовите show(). |
Поддерживаемое подмножество свойств виджета. | Поддерживаются все свойства виджета. |
По-умолчанию стилем элемента верхнего уровня является QGraphicsScene::style | По-умолчанию стилем виджета верхнего уровня является QApplication::style |
В отличие от QWidget, графическое представление предоставляет собственный каркас перетаскивания. | Стандартный каркас перетаскивания. |
Элементы виджета не поддерживают модальность. | Полная поддержка модальности. |
QGraphicsWidget поддерживает подмножество свойств виджета Qt (Qt::WidgetAttribute), как показано в таблице ниже. Любое свойство, не указанное в этой таблице, не поддерживается или не используется.
Свойство виджета | Использование |
---|---|
Qt::WA_SetLayoutDirection | Устанавливается setLayoutDirection(), снимается unsetLayoutDirection(). Вы можете проверить это свойство чтобы усзнать, был ли виджету явно назначено направление компоновки layoutDirection. Если это свойство не установлено, layoutDirection() наследуется. |
Qt::WA_RightToLeft | Переключается с помощью setLayoutDirection(). Наследуется от родителя/сцены. Если установлено, компоновка виджета расположит горизонтально упорядоченные виджеты справа на лево. |
Qt::WA_SetStyle | Устанавливается и снимается с помощью setStyle(). Если это свойство установлено, то виджету был явно назначен стиль. Если оно не установлено, виджет будет использовать стиль сцены или приложения. |
Qt::WA_Resized | Устанавливается setGeometry() и resize(). |
Хотя QGraphicsWidget наследуется и от QObject, и от QGraphicsItem, вы должны использовать функцию, предоставленную QGraphicsItem, а не QObject, чтобы управлять отношениями между родительскими и дочерними элементами. Эти функции контролируют порядок расположения элементов, а также их принадлежность.
Замечание: QObject::parent() всегда должен возвращать 0 для QGraphicsWidgets, но это правило не является строгим.
Смотрите также QGraphicsProxyWidget, QGraphicsItem и Widgets and Layouts.
Это свойство определяет является ли элемент разблокированным или нет.
Это свойство объявлено в QGraphicsItem.
По умолчанию это свойство равно true.
Смотрите также QGraphicsItem::isEnabled() и QGraphicsItem::setEnabled().
Это свойство определяет способ получения фокуса ввода с клавиатуры.
Политика Qt::TabFocus используется если виджет принимает фокус клавиатуры при обходе, Qt::ClickFocus если виджет принимает фокус при клике на нём, Qt::StrongFocus если он принимает фокус обоими способами и Qt::NoFocus (по-умолчанию) если он вообще не принимает фокус.
Вы должны разрешить виджету принимать фокус от клавиатуры, если он принимает события от клавиатуры. Обычно это делается в конструкторе виджета. Например, конструктор QLineEdit вызывает setFocusPolicy(Qt::StrongFocus).
Если вы разблокируете политику фокуса (т.е., не Qt::NoFocus), QGraphicsWidget автоматически установит флаг ItemIsFocusable. Установка для виджета Qt::NoFocus автоматически снимет флаг ItemIsFocusable. Если виджет в этот момент имеет фокус клавиатуры, он его автоматически потеряет.
Функции доступа:
Смотрите также focusInEvent(), focusOutEvent(), keyPressEvent(), keyReleaseEvent() и enabled.
Это свойство содержит шрифт виджета.
Это свойство предоставляет шрифт виджета.
QFont состоит из свойств, которые были явно определены, и свойств, которые были наследованы от родителя виджета. Таким образом, font() может вернуть другой шрифт по сравнению с установленным с помощью setFont(). Такая схема позволит вам определять отдельные свойства шрифта не влияя на другие унаследованные свойства.
Когда меняется шрифт виджета, он определяет его свойства по сравнению с родительским виджетом. Если у виджета нет родителя, он определяет свойства шрифта по сравнению со сценой. Затем виджет посылает себе событие FontChange и оповещает всех потомков, чтобы они тоже могли определить свои шрифты.
По-умолчанию, это свойство содержит шрифт приложения по-умолчанию.
Функции доступа:
Смотрите также QApplication::font(), QGraphicsScene::font и QFont::resolve().
Это свойство содержит направление компоновки для этого виджета.
Это свойство изменяет атрибут Qt::WA_RightToLeft виджета и всех его потомков. Оно также устанавливает свойство виджета Qt::WA_SetLayoutDirection.
Направление компоновки виджета определяет порядок в котором менеджер компоновки горизонтально упорядочит подвиджеты данного виджета. Значение по-умолчанию зависит от языка или локали приложения, и обычно такое же, как и направление писания и чтения слов. С Qt::LeftToRight, компоновщик начинает размещать подвиджеты с левой стороны данного виджета направо. тQt::RightToLeft работает противоположным способом - компоновщик разместит виджеы с правого края налево.
Подвиджеты наследуют направление компоновки от родителя. Виджеты верхнего уровня наследуют свои направления компоновки от QGraphicsScene::layoutDirection. Если вы изменяете направление компоновки видета с помощью вызова setLayoutDirection(), виджет пошлёт себе событие LayoutDirectionChange, а затем сообщит новое направление компоновки всем своим потомкам.
Функции доступа:
Смотрите также QWidget::layoutDirection и QApplication::layoutDirection.
Это свойство содержит палитру виджета.
Это свойство предоставляет палитру виджета. Палитра предоставляет цвета и кисти для групп цветов ( например, QPalette::Button) и состояния (например, QPalette::Inactive), свободно определяя общий вид виджета и его потомков.
QPalette состоит из явно определённых и унаследованных от родителя групп цветов. Поэтому palette() может вернуть другую палитру по сравнению с установленной с помощью setPalette(). Такая схема позволит вам определять отдельные свойства палитры не влияя на другие унаследованные свойства.
Когда меняется палитра виджета, он определяет её свойства по сравнению с родительским виджетом. Затем виджет посылает себе событие PaletteChange и оповещает всех потомков, чтобы они тоже могли определить свои палитры.
По-умолчанию, это свойство содержит палитру приложения по-умолчанию.
Функции доступа:
Смотрите также QApplication::palette(), QGraphicsScene::palette и QPalette::resolve().
Это свойство содержит размер виджета.
Вызов setSize() изменяет размер виджета на размер size, ограниченный minimumSize() и maximumSize(). Это свойство влияет только на высоту и ширину виджета (например, его правую и нижнюю границу); положение виджета и верхний левый угол остаются неизменными.
При изменении своего размера виджет немедленно получает событие GraphicsSceneResize, содержащее старый и новый размеры. Если при прибытии этого события у виджета есть назначенная компоновка, то она будет активирована и автоматически обновит геометрию всех дочерних виджетов.
Это свойство не влияет на компоновки родительских виджетов. Если сам виджет управляется компоновкой родителя, например, у него есть родительский виджет с назначенной компоновкой, то эта компоновка не активируется.
По умолчанию, это свойство содержит размер с нулевой шириной и высотой.
Функции доступа:
Смотрите также setGeometry(), QGraphicsSceneResizeEvent и QGraphicsLayout.
Это свойство определяет является ли элемент видимым или нет.
Это свойство объявлено в QGraphicsItem.
По умолчанию это свойство равно true.
Смотрите также QGraphicsItem::isVisible(), QGraphicsItem::setVisible(), show() и hide().
Это свойство содержит флаги окна виджета.
Флаги окна это комбинация типов окна (например, Qt::Dialog) и некоторых флагов, дающих подсказки относительно поведения окна. Поведение является платформозависимым.
По умолчанию, это свойство не содержит флаги окна.
Функции доступа:
Это свойство содержит заголовок окна.
Это свойство используется только для окон.
По-умолчанию, если заголовок не был установлен, это свойство содержит пустую строку.
Функции доступа:
Создаёт объект QGraphicsWidget. Опциональный аргумент parent передаётся конструктору QGraphicsItem. Опциональный аргумент wFlags указывает флаги окна виджета (например, должен ли виджет быть окном, инструментом, всплывающей подсказкой и т.д.).
Уничтожает объект QGraphicsWidget.
Приводит размер виджета к подсказке о эффективном минимальному размеру.
Это функция вызывается явно когда элемент показывается первый раз.
Смотрите также effectiveSizeHint() и Qt::MinimumSize.
Этот обработчик событий может быть переопределён чтобы обрабатывать изменения состояния.
Изменённое состояние в этом событии может быть получено с помощью event.
События изменения включают: QEvent::ActivationChange, QEvent::EnabledChange, QEvent::FontChange, QEvent::StyleChange, QEvent::PaletteChange, QEvent::ParentChange, QEvent::LayoutDirectionChange и QEvent::ContentsRectChange.
Эта функция возвращает тоже значение что и QObject::children(). Она предоставляется для отличия между устаревшим членом QGraphicsItem::children() и QObject::children(). Вместо этого QGraphicsItem теперь предоставляет childItems().
Вызов этой функции закрывает виджет.
Возвращает true, если виджет был закрыт, в противном случае возвращает false. Сначала этот слот посылает виджету событие QCloseEvent, который может это событие принять или нет. Если событие было проигнорировано, ничего не происходит. Если событие было принято, слот вызовет функцию виджета hide().
Если у виджета установлен атрибут Qt::WA_DeleteOnClose, он будет удалён.
Этот обработчик события event может быть переопределён в производном классе чтобы получать события закрытия виджета. Реализация по-умолчанию принимает событие.
Смотрите также close() и QCloseEvent.
Ищет новый виджет для передачи фокуса клавиатуры, который подходит для Tab и Shift+Tab, и возвращает true если он может найти новый виджет; в противном случае возвращает false. Если next равно true, эта функция ищет вперёд; если next равно false, она ищет в обратном направлении.
Иногда вы захотите переопределить эту функцию чтобы предоставить особенную обработку фокуса для вашего виджета и его подвиджетов. Например, веб-браузер может переопределить её чтобы перемещать активную в настоящий момент ссылку вперед и назад и вызывать базовую реализацию только когда он доходит до первой или последней ссылки на странице.
Дочерние виджеты вызывают focusNextPrevChild() своих родителей, но только окно, содержащее дочерние виджеты, решает куда перенаправить фокус. Переопределением у объекта этой функции вы получаете контроль над перемещением фокуса всех дочерних виджетов.
Смотрите также focusPolicy().
Если этот виджет, дочерний виджет или его потомок имеет фокус ввода, эта функция вернёт указатель на этот виджет. Если потомки не имеют фокуса ввода, возвращается 0.
Смотрите также QWidget::focusWidget().
Получает отступы содержимого виджета. Отступы хранятся в left, top, right и bottom в виде указателей на qreal. Каждый аргумент может быть опущен передачей 0 в качестве значения.
Переопределено из QGraphicsLayoutItem.
Смотрите также setContentsMargins().
Получает отступы область окна виджета. Отступы хранятся в left, top, right и bottom в виде указателей на qreal. Каждый аргумент может быть опущен передачей 0 в качестве значения.
Смотрите также setWindowFrameMargins() и windowFrameRect().
Этот обработчик события для события event может быть переопределён в подклассе чтобы получать уведомления о событиях Qt::GrabKeyboard.
Смотрите также grabKeyboard() и grabMouse().
Этот обработчик события для события event может быть переопределён в подклассе чтобы получать уведомления о событиях Qt::GrabMouse.
Смотрите также grabMouse() и grabKeyboard().
Этот обработчик событий для событий Hide вызывается после того как виджет прячется, например, для виджета или одного из его предков вызывается setVisible(false) в случае когда виджет был ранее показан.
Вы можете переопределить этот обработчик событий чтобы определять когда ваш виджет прячется. Вызов QEvent::accept() или QEvent::ignore() для события event не имеет эффекта.
Смотрите также showEvent(), QWidget::hideEvent() и ItemVisibleChange.
Заполняет объект параметров стиля для данного виджета основываясь на его текущем состоянии и сохраняет вывод в option. Реализация по-умолчанию заполняет option следующими свойствами.
state & QStyle::State_Enabled | Соответствует QGraphicsItem::isEnabled(). |
state & QStyle::State_HasFocus | Соответствует QGraphicsItem::hasFocus(). |
state & QStyle::State_MouseOver | Соответствует QGraphicsItem::isUnderMouse(). |
direction | Соответствует QGraphicsWidget::layoutDirection(). |
rect | Соответствует QGraphicsWidget::rect().toRect(). |
palette | Соответствует QGraphicsWidget::palette(). |
fontMetrics | Соответствует QFontMetrics(QGraphicsWidget::font()). |
Подклассы QGraphicsWidget должны вызывать базовую реализацию, а затеем проверять тип option используя qstyleoption_cast<>() или проверять QStyleOption::Type перед сохранением характерных для виджета параметров.
Например:
void MyGroupBoxWidget::initStyleOption(QStyleOption *option) const
{
QGraphicsWidget::initStyleOption(option);
if (QStyleOptionGroupBox *box = qstyleoption_cast<QStyleOptionGroupBox *>(option)) {
// Добавляем состояние, специфичное для блока.
box->flat = isFlat();
...
}
}
Смотрите также QStyleOption::initFrom().
Возвращает true если окно виджета это активное окно или если у виджета нет окна, но он находится на активной сцене (т.е. сцене, у которой в настоящий момент есть фокус).
Активное окно это окно, которое или содержит дочерний виджет у которого есть фокус ввода, или само имеет фокус ввода.
Смотрите также QGraphicsScene::activeWindow() и QGraphicsScene::setActiveWindow().
Возвращает компоновку виджета или 0 если этот виджет не управляется компоновщиком.
Смотрите также setLayout().
Этот обработчик событий для событий GraphicsSceneMove вызывается после того как виджет был перемещён (например, его локальное положение изменилось).
Это событие доставляется только когда элемент перемещается локально. Вызов setTransform() или перемещение любого предка элемента не влияет на локальное положение элемента.
Вы можете переопределить этот обработчик событий чтобы определять когда ваш был перемещён. Вызов QEvent::accept() или QEvent::ignore() для события event не имеет эффекта.
Смотрите также ItemPositionChange и ItemPositionHasChanged.
Эта виртуальная функция вызывается QGraphicsScene чтобы отрисовать границу окна используя painter, option и widget в локальных координатах. Базовая реализация использует текущий стиль чтобы отобразить границу окна и заголовок.
Вы можете переопределить эту функцию в подклассе от QGraphicsWidget чтобы предоставить собственное отображение границы окна виджета.
Смотрите также QGraphicsItem::paint().
Это событие доставляется элементу сценой в определённый момент после того как он был создан, но перед тем как он был показан или, в противном случае, к нему обратились через сцену. Вы можете использовать этот обработчик событий чтобы сделать последние инициализации виджета, которые требуют чтобы он был полностью сконструирован.
Базовая реализация ничего не делает.
Возвращает локальный прямоугольник элемента в виде QRectF. Эта функция эквивалентна QRectF(QPointF(), size()).
Смотрите также setGeometry() и resize().
Этот обработчик событий для событий GraphicsSceneResize вызывается после того как размер виджета был изменён (т.е., его локальный размер изменился). event содержит и старый, и новый размеры.
Это событие доставляется только когда элемент изменят размер локально; вызов setTransform() для виджета или любого его предка элемента или вида не влияет на локальный размер виджета.
Вы можете переопределить этот обработчик событий чтобы определять когда размер вашего виджета был изменён. Вызов QEvent::accept() или QEvent::ignore() для события event не имеет эффекта.
Смотрите также geometry() и setGeometry().
Реализация sceneEvent() QGraphicsWidget просто передаёт event в QGraphicsWidget::event(). Вы можете обработать все события для вашего виджета в event() или в любой вспомогательной функции; вы не должны переопределять эту функцию в подклассе от QGraphicsWidget.
Переопределено из QGraphicsItem.
Смотрите также QGraphicsItem::sceneEvent().
Если on равно true, эта функция разблокирует атрибут attribute; в противном случае атрибут attribute блокируется.
Смотрите документацию класса QGraphicsWidget для получения полного списка поддерживаемых атрибутов и для чего они нужны.
Смотрите также testAttribute() и QWidget::setAttribute().
Устанавливает поля содержимого виджета равными left, top, right и bottom.
Поля содержимого используются назначенным компоновщиком для определения размещения подвиджетов и компоновок. Поля особенно полезны для виджетов, ограничивающих подвиджеты в одной области своей геометрии. Например, группирующий блок с компоновкой расположит подвиджеты внутри своей рамки, но ниже заголовка.
Изменение полей содержимого виджета всегда вызовет update(), и любой назначенный компоновщик будет автоматически активирован. Затем виджет получит событиеContentsRectChange.
Смотрите также getContentsMargins() и setGeometry().
Устанавливает геометрию элемента равной rect. В результате вызова этой функции положение и размер элемента изменяются. Элемент сначала перемещается, а затем меняет размер.
Побочный эффект вызова этой функции в том, что виджет получит события перемещения и изменения размера. Также, если у виджета есть назначенный компоновщик, то он будет активирован.
Переопределено из QGraphicsLayoutItem.
Смотрите также geometry() и resize().
Это перегруженная функция, предоставленная для удобства.
Эта вспомогательная функция эквивалента вызову setGeometry(QRectF( x, y, w, h)).
Смотрите также geometry() и resize().
Устанавливает компоновщик этого виджета равным layout. Любой существующий менеджер компоновки удаляется перед назначением нового. Если layout равен 0, то виджет остаётся без компоновщика. Существующая геометрия подвиджетов останется неизменной.
Все виджеты, управляемые layout или его подкомпоновщиками, автоматически становятся дочерними для данного элемента. При этом компоновка становится негодной, и геометрия дочерних виджетов подстраивается в соответствии с геометрией geometry() и полями содержимого contentsMargins() этого элемента. Дочерние элементы, которые не управляются layout явно, останутся неизменными после того как компоновщик будет назначен этому виджету.
QGraphicsWidget становится владельцем layout.
Смотрите также layout(), QGraphicsLinearLayout::addItem() и QGraphicsLayout::invalidate().
Устанавливает стиль виджета равным style. QGraphicsWidget не становится владельцем style.
Если стиль не назначен или style равен 0, то виджет будет использовать QGraphicsScene::style() (если он был установлен). В противном случае виджет будет использовать QApplication::style().
Эта функция устанавливает свойство Qt::WA_SetStyle еслиstyle не равен 0; в противном случает, она убирает свойство.
Смотрите также style().
Перемещает виджет second по кольцу фокуса виджетов таким образом, чтобы при нажатии кнопки Tab фокус клавиатуры переходил от виджета first к виджету second.
Заметьте, что так как порядок обхода виджета second изменился, то вы должны упорядочить цепь следующим образом:
setTabOrder(a, b); // a на b setTabOrder(b, c); // a на b на c setTabOrder(c, d); // a на b на c на d
Но не так:
// НЕПРАВИЛЬНО setTabOrder(c, d); // c на d setTabOrder(a, b); // a на b И c на d setTabOrder(b, c); // a на b на c, но не c на d
Если first равен 0, то это означает что second должен быть первым виджетом, который получит фокус ввода когда он появится у сцены (т.е., пользователь нажмёт Tab так, что фокус перейдёт к сцене). Если second равен 0, то это значит что first должен быть первым виджетом, который получит фокус если фокус вернётся к сцене.
По-умолчанию порядок обхода определяется неявно используя порядок создания виджетов.
Смотрите также focusPolicy и Keyboard Focus.
Устанавливает поля рамки окна виджета равными left, top, right и bottom. Поля рамки по-умолчанию предоставляются стилем и они зависят от текущих флагов окна.
Если вы хотите отрисовывать собственную декорацию окна, вы можете установить собственные поля рамки чтобы переопределить поля по-умолчанию.
Смотрите также unsetWindowFrameMargins(), getWindowFrameMargins() и windowFrameRect().
Этот обработчик событий для событий Show вызывается до того как виджет прячется, например, для виджета или одного из его предков вызывается setVisible(true) в случае когда виджет был ранее показан.
Вы можете переопределить этот обработчик событий чтобы определять когда ваш виджет отображается. Вызов QEvent::accept() или QEvent::ignore() для события event не имеет эффекта.
Смотрите также hideEvent(), QWidget::showEvent() и ItemVisibleChange.
Возвращает указатель на стиль виджета. Если у этого виджета нет явно назначенного стиля, то вместо него возвращается стиль сцены. В свою очередь, если у сцены нет назначенного стиля, эта функция вернёт QApplication::style().
Смотрите также setStyle().
Возвращает true если свойство attribute разблокировано для этого виджета; в противном случае возвращает false.
Смотрите также setAttribute().
Этот обработчик события для события event может быть переопределён в подклассе чтобы получать уведомления о событиях Qt::UngrabKeyboard.
Смотрите также ungrabKeyboard() и ungrabMouse().
Этот обработчик события для события event может быть переопределён в подклассе чтобы получать уведомления о событиях Qt::UngrabMouse.
Смотрите также ungrabMouse() и ungrabKeyboard().
Сбрасывает поля рамки окна на значение по-умолчанию, который предоставляется стилем.
Смотрите также setWindowFrameMargins(), getWindowFrameMargins() и windowFrameRect().
Если этот виджет управляется компоновщиком, эта функция сообщает ему что подсказки о размере виджета изменились и что он может изменить размер и положение виджета соответственно.
Вызывайте эту функцию если подсказки о размере виджета sizeHint() изменились.
Переопределено из QGraphicsLayoutItem.
Смотрите также QGraphicsLayout::invalidate().
Этот обработчик события event получает события для рамки окна если этот виджет является окном. Его базовая реализация предоставляет поддержку для базового взаимодействия с рамкой окна такого как перемещения, изменение размера и т.д.
Вы можете переопределить этот обработчик в подклассе от QGraphicsWidget чтобы предоставить собственную поддержку взаимодействия с рамкой окна.
Возвращает true если событие event было распознано и обработано; в противном случае возвращает false.
Смотрите также event().
Возвращает геометрию виджета в координатах родителя включая любую рамку окна.
Смотрите также windowFrameRect(), getWindowFrameMargins() и setWindowFrameMargins().
Возвращает локальный прямоугольник виджета включая любую рамку окна.
Смотрите также windowFrameGeometry(), getWindowFrameMargins() и setWindowFrameMargins().
Возвращает часть рамки окна в точке pos, или Qt::NoWindowFrameSection если в этой точке нет рамки окна.
Эта функция используется в базовой реализации взаимодействия с рамкой QGraphicsWidget.
Вы можете переопределить эту функцию чтобы настроить способ взаимодействия с окном для изменения его размера или положения. Например, если вы хотите позволить виджету изменение размера только за правый нижний угол, вы можете переопределить эту функцию чтобы она возвращала Qt::NoSection для всех частей кроме Qt::BottomRightSection.
Эта функция была введена в Qt 4.4.
Смотрите также windowFrameEvent(), paintWindowFrame() и windowFrameGeometry().
Возвращает тип окна виджета.
Copyright © 2008 Nokia | Торговые марки | Qt 4.4.3 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |