Spec-Zone.ru › Qt 5.12

Класс QGraphicsProxyWidget

Класс QGraphicsProxyWidget предоставляет прокси-слой для встраивания QWidget в QGraphicsScene. Подробнее...

Заголовок: #include <QGraphicsProxyWidget>
qmake: QT += widgets
С тех пор: Qt 4.4
Наследует: QGraphicsWidget
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Открытые типы

перечисление безымянный { Type }

Открытые функции

QGraphicsProxyWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = ...)
виртуальный ~QGraphicsProxyWidget()
QGraphicsProxyWidget * createProxyForChildWidget(QWidget *child)
void setWidget(QWidget *widget)
QRectF subWidgetRect(const QWidget *widget) const
QWidget * widget() const

Переопределенные открытые функции

виртуальный void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
виртуальный void setGeometry(const QRectF &rect) override
виртуальный int type() const override
  • 53 открытые функции, унаследованные от QGraphicsWidget
  • 2 открытых функции, унаследованные от QGraphicsObject
  • 35 открытых функции, унаследованные от QGraphicsLayoutItem
  • 31 открытые функции, унаследованные от QObject
  • 176 открытые функции, унаследованные от QGraphicsItem

Статические открытые члены

const QMetaObject staticMetaObject
  • 1 статический открытый член, унаследованный от QGraphicsWidget
  • 9 статических открытых членов, унаследованных от QObject

Переопределенные защищенные функции

виртуальный void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
виртуальный void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override
виртуальный void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) override
виртуальный void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override
виртуальный void dropEvent(QGraphicsSceneDragDropEvent *event) override
виртуальный bool event(QEvent *event) override
виртуальный bool eventFilter(QObject *object, QEvent *event) override
виртуальный void focusInEvent(QFocusEvent *event) override
виртуальный bool focusNextPrevChild(bool next) override
виртуальный void focusOutEvent(QFocusEvent *event) override
виртуальный void grabMouseEvent(QEvent *event) override
виртуальный void hideEvent(QHideEvent *event) override
виртуальный void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override
виртуальный void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override
виртуальный void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override
виртуальный void inputMethodEvent(QInputMethodEvent *event) override
виртуальный QVariant inputMethodQuery(Qt::InputMethodQuery query) const override
виртуальный QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override
виртуальный void keyPressEvent(QKeyEvent *event) override
виртуальный void keyReleaseEvent(QKeyEvent *event) override
виртуальный void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override
виртуальный void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
виртуальный void mousePressEvent(QGraphicsSceneMouseEvent *event) override
виртуальный void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
виртуальный void resizeEvent(QGraphicsSceneResizeEvent *event) override
виртуальный void showEvent(QShowEvent *event) override
виртуальный QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override
виртуальный void ungrabMouseEvent(QEvent *event) override
виртуальный void wheelEvent(QGraphicsSceneWheelEvent *event) override
END_OF_DOCUMENT_MARKER
  • 24 защищённых функций унаследовано от QGraphicsWidget
  • 1 защищённая функция унаследовано от QGraphicsObject
  • 3 защищённых функций унаследовано от QGraphicsLayoutItem
  • 9 защищённых функций унаследовано от QObject
  • 24 защищённых функций унаследовано от QGraphicsItem

Защищённые слоты

QGraphicsProxyWidget * newProxyWidget(const QWidget *child)
  • 1 защищённый слот унаследовано от QGraphicsObject

Дополнительные унаследованные члены

  • 14 свойств унаследовано от QGraphicsWidget
  • 12 свойств унаследовано от QGraphicsObject
  • 1 свойство унаследовано от QObject
  • 1 публичный слот унаследовано от QGraphicsWidget
  • 1 публичный слот унаследовано от QObject
  • 1 сигнал унаследовано от QGraphicsWidget
  • 9 сигналов унаследовано от QGraphicsObject
  • 2 сигнала унаследовано от QObject
  • 24 защищённых функций унаследовано от QGraphicsWidget
  • 1 защищённая функция унаследовано от QGraphicsObject
  • 3 защищённых функций унаследовано от QGraphicsLayoutItem
  • 9 защищённых функций унаследовано от QObject
  • 24 защищённых функций унаследовано от QGraphicsItem

Подробное описание

Класс QGraphicsProxyWidget предоставляет прослойку для встраивания QWidget в QGraphicsScene.

QGraphicsProxyWidget встраивает виджеты на основе QWidget, например, QPushButton, QFontComboBox, или даже QFileDialog, в QGraphicsScene. Он перенаправляет события между двумя объектами и выполняет преобразование между целочисленной геометрией QWidget и геометрией с плавающей точкой QGraphicsWidget. QGraphicsProxyWidget поддерживает все основные функции QWidget, включая табуляцию фокуса, ввод с клавиатуры, перетаскивание и всплывающие окна. Вы также можете встраивать сложные виджеты, например, виджеты с дочерними виджетами.

Пример:

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QTabWidget *tabWidget = new QTabWidget;

    QGraphicsScene scene;
    QGraphicsProxyWidget *proxy = scene.addWidget(tabWidget);

    QGraphicsView view(&scene);
    view.show();

    return app.exec();
}

QGraphicsProxyWidget автоматически встраивает дочерние всплывающие окна встраиваемых виджетов, создавая дочерний прокси для каждого всплывающего окна. Это означает, что при отображении списка всплывающего окна QComboBox автоматически создаётся новый QGraphicsProxyWidget, встраивающий всплывающее окно и правильно его позиционирующий. Это работает только в том случае, если всплывающее окно является дочерним элементом встраиваемого виджета (например, QToolButton::setMenu() требует, чтобы экземпляр QMenu был дочерним элементом QToolButton).

Встраивание виджета с помощью QGraphicsProxyWidget

Существует два способа встраивания виджета с помощью QGraphicsProxyWidget. Наиболее распространённый способ заключается в передаче указателя на виджет функции QGraphicsScene::addWidget() вместе с любыми соответствующими флагами Qt::WindowFlags. Эта функция возвращает указатель на QGraphicsProxyWidget. Затем вы можете переместить или расположить либо прокси, либо сам встраиваемый виджет.

Например, в фрагменте кода ниже мы встраиваем группу в прокси:

QGroupBox *groupBox = new QGroupBox("Contact Details");
QLabel *numberLabel = new QLabel("Telephone number");
QLineEdit *numberEdit = new QLineEdit;

QFormLayout *layout = new QFormLayout;
layout->addRow(numberLabel, numberEdit);
groupBox->setLayout(layout);

QGraphicsScene scene;
QGraphicsProxyWidget *proxy = scene.addWidget(groupBox);

QGraphicsView view(&scene);
view.show();

На изображении ниже показан результат с подписями полей отступа и прямоугольника содержимого.

В качестве альтернативы вы можете начать с создания нового элемента QGraphicsProxyWidget, а затем вызвать setWidget(), чтобы встроить QWidget позднее. Функция widget() возвращает указатель на встраиваемый виджет. QGraphicsProxyWidget разделяет владение с QWidget, поэтому если любой из двух виджетов уничтожается, другой виджет будет автоматически уничтожен тоже.

Синхронизация состояний виджетов

QGraphicsProxyWidget поддерживает синхронизацию своего состояния со встраиваемым виджетом. Например, если прокси скрыт или отключён, встраиваемый виджет будет скрыт или отключён также, и наоборот. Когда виджет встраивается с помощью addWidget(), QGraphicsProxyWidget копирует состояние из виджета в прокси, после чего оба будут синхронизированы, где это возможно. По умолчанию, когда вы встраиваете виджет в прокси, оба виджета будут видимы, потому что QGraphicsWidget видим при создании (вам не нужно вызывать show()). Если вы явно скроете встраиваемый виджет, прокси также станет невидимым.

Пример:

QGraphicsScene scene;

QLineEdit *edit = new QLineEdit;
QGraphicsProxyWidget *proxy = scene.addWidget(edit);

edit->isVisible();  // returns true
proxy->isVisible(); // also returns true

edit->hide();

edit->isVisible();  // returns false
proxy->isVisible(); // also returns false

QGraphicsProxyWidget сохраняет симметрию для следующих состояний:

Состояние QWidget Состояние QGraphicsProxyWidget Примечания
QWidget::enabled QGraphicsProxyWidget::enabled
QWidget::visible QGraphicsProxyWidget::visible Явное состояние также симметрично.
QWidget::geometry QGraphicsProxyWidget::geometry Геометрия гарантируется симметричной только пока встраиваемый виджет видим.
QWidget::layoutDirection QGraphicsProxyWidget::layoutDirection
QWidget::style QGraphicsProxyWidget::style
QWidget::palette QGraphicsProxyWidget::palette
QWidget::font QGraphicsProxyWidget::font
QWidget::cursor QGraphicsProxyWidget::cursor Встраиваемый виджет переопределяет курсор виджета-прокси. Курсор прокси меняется в зависимости от того, какой встраиваемый подвиджет находится в данный момент под мышкой.
QWidget::sizeHint() QGraphicsProxyWidget::sizeHint() Все функции size hint от встраиваемого виджета пересылаются прокси.
QWidget::getContentsMargins() QGraphicsProxyWidget::getContentsMargins() Обновляется один раз функцией setWidget().
QWidget::windowTitle QGraphicsProxyWidget::windowTitle Обновляется один раз функцией setWidget().

Примечание: QGraphicsScene сохраняет встраиваемый виджет в специальном состоянии, которое предотвращает его вмешательство в другие виджеты (как встраиваемые, так и нет) в то время, когда виджет встраивается. В этом состоянии виджет может немного отличаться в поведении от состояния, когда он не встраивается.

Предупреждение: Этот класс предоставляется для удобства при мостике между QWidgets и QGraphicsItems, он не должен использоваться в высокопроизводительных сценариях.

См. также QGraphicsScene::addWidget() и QGraphicsWidget.

Документация типов членов

перечисление QGraphicsProxyWidget::anonymous

Значение, возвращаемое виртуальной функцией type().

Константа Значение Описание
QGraphicsProxyWidget::Type 12 Виджет-прокси графики

Документация функций-членов

QGraphicsProxyWidget::QGraphicsProxyWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = ...)

Конструирует новый виджет-прокси. parent и wFlags передаются конструктору QGraphicsItem.

[virtual] QGraphicsProxyWidget::~QGraphicsProxyWidget()

Уничтожает виджет-прокси и любой встраиваемый виджет.

[override virtual protected] void QGraphicsProxyWidget::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)

Переопределено из QGraphicsItem::contextMenuEvent().

QGraphicsProxyWidget *QGraphicsProxyWidget::createProxyForChildWidget(QWidget *child)

Создаёт прокси-виджет для заданного дочернего виджета (child) виджета, содержащегося в этом прокси.

Эта функция позволяет получить прокси для виджетов, не являющихся верхнего уровня. Например, вы можете встроить диалоговое окно, а затем преобразовать только один из его виджетов.

Если виджет уже встроен, возвращается существующий прокси-виджет.

Функция была введена в Qt 4.5.

См. также newProxyWidget() и QGraphicsScene::addWidget().

[override virtual protected] void QGraphicsProxyWidget::dragEnterEvent(QGraphicsSceneDragDropEvent *event)

Переопределено из QGraphicsItem::dragEnterEvent().

[override virtual protected] void QGraphicsProxyWidget::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)

Переопределено из QGraphicsItem::dragLeaveEvent().

[override virtual protected] void QGraphicsProxyWidget::dragMoveEvent(QGraphicsSceneDragDropEvent *event)

Переопределено из QGraphicsItem::dragMoveEvent().

[override virtual protected] void QGraphicsProxyWidget::dropEvent(QGraphicsSceneDragDropEvent *event)

Переопределено из QGraphicsItem::dropEvent().

[override virtual protected] bool QGraphicsProxyWidget::event(QEvent *event)

Переопределено из QGraphicsWidget::event().

[override virtual protected] bool QGraphicsProxyWidget::eventFilter(QObject *object, QEvent *event)

Переопределено из QObject::eventFilter().

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

Переопределено из QGraphicsWidget::focusInEvent().

[override virtual protected] bool QGraphicsProxyWidget::focusNextPrevChild(bool next)

Переопределено из QGraphicsWidget::focusNextPrevChild().

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

Переопределено из QGraphicsWidget::focusOutEvent().

[override virtual protected] void QGraphicsProxyWidget::grabMouseEvent(QEvent *event)

Переопределено из QGraphicsWidget::grabMouseEvent().

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

Переопределено из QGraphicsWidget::hideEvent().

[override virtual protected] void QGraphicsProxyWidget::hoverEnterEvent(QGraphicsSceneHoverEvent *event)

Переопределено из QGraphicsItem::hoverEnterEvent().

[override virtual protected] void QGraphicsProxyWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)

Переопределено из QGraphicsWidget::hoverLeaveEvent().

[override virtual protected] void QGraphicsProxyWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event)

Переопределено из QGraphicsWidget::hoverMoveEvent().

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

Переопределено из QGraphicsItem::inputMethodEvent().

[override virtual protected] QVariant QGraphicsProxyWidget::inputMethodQuery(Qt::InputMethodQuery query) const

Переопределено из QGraphicsItem::inputMethodQuery().

[override virtual protected] QVariant QGraphicsProxyWidget::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)

Переопределено из QGraphicsWidget::itemChange().

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

Переопределено из QGraphicsItem::keyPressEvent().

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

Переопределено из QGraphicsItem::keyReleaseEvent().

[override virtual protected] void QGraphicsProxyWidget::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)

Переопределено из QGraphicsItem::mouseDoubleClickEvent().

[override virtual protected] void QGraphicsProxyWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event)

Переопределено из QGraphicsItem::mouseMoveEvent().

[override virtual protected] void QGraphicsProxyWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)

Переопределено из QGraphicsItem::mousePressEvent().

[override virtual protected] void QGraphicsProxyWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)

Переопределено из QGraphicsItem::mouseReleaseEvent().

[protected slot] QGraphicsProxyWidget *QGraphicsProxyWidget::newProxyWidget(const QWidget *child)

Создаёт прокси-виджет для заданного дочернего виджета (child) виджета, содержащегося в этом прокси.

Вы не должны вызывать эту функцию напрямую; используйте QGraphicsProxyWidget::createProxyForChildWidget() вместо этого.

Функция является виртуальным слотом, который вы можете переопределить в своём подклассе, чтобы управлять созданием новых прокси-виджетов. По умолчанию она возвращает прокси, созданный с помощью конструктора QGraphicsProxyWidget() с этим прокси-виджетом в качестве родителя.

Функция была введена в Qt 4.5.

См. также createProxyForChildWidget().

[override virtual] void QGraphicsProxyWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)

Переопределено из QGraphicsWidget::paint().

[override virtual protected] void QGraphicsProxyWidget::resizeEvent(QGraphicsSceneResizeEvent *event)

Переопределено из QGraphicsWidget::resizeEvent().

[override virtual] void QGraphicsProxyWidget::setGeometry(const QRectF &rect)

Переопределено из QGraphicsWidget::setGeometry().

void QGraphicsProxyWidget::setWidget(QWidget *widget)

Встраивает widget в этот прокси-виджет. Встроенный виджет должен находиться исключительно внутри или вне области Graphics View. Вы не можете встроить виджет, пока он виден в другом месте пользовательского интерфейса одновременно.

widget должен быть виджетом верхнего уровня, у которого родитель равен 0.

При встраивании виджета его состояние (например, видимость, активность, геометрия, подсказки размера) копируется в прокси-виджет. Если встроенный виджет явно скрыт или отключён, прокси-виджет станет явно скрытым или отключённым после завершения встраивания. В документации класса представлен полный обзор общего состояния.

QGraphicsProxyWidget's window flags determine whether the widget, after embedding, will be given window decorations or not.

After this function returns, QGraphicsProxyWidget will keep its state synchronized with that of widget whenever possible.

If a widget is already embedded by this proxy when this function is called, that widget will first be automatically unembedded. Passing 0 for the widget argument will only unembed the widget, and the ownership of the currently embedded widget will be passed on to the caller. Every child widget that are embedded will also be embedded and their proxy widget destroyed.

Note that widgets with the Qt::WA_PaintOnScreen widget attribute set and widgets that wrap an external application or controller cannot be embedded. Examples are QGLWidget and QAxWidget.

См. также widget().

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

Reimplemented from QGraphicsWidget::showEvent().

[override virtual protected] QSizeF QGraphicsProxyWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const

Reimplemented from QGraphicsWidget::sizeHint().

QRectF QGraphicsProxyWidget::subWidgetRect(const QWidget *widget) const

Returns the rectangle for widget, which must be a descendant of widget(), or widget() itself, in this proxy item's local coordinates.

If no widget is embedded, widget is 0, or widget is not a descendant of the embedded widget, this function returns an empty QRectF.

См. также widget().

[override virtual] int QGraphicsProxyWidget::type() const

Reimplemented from QGraphicsWidget::type().

[override virtual protected] void QGraphicsProxyWidget::ungrabMouseEvent(QEvent *event)

Reimplemented from QGraphicsWidget::ungrabMouseEvent().

[override virtual protected] void QGraphicsProxyWidget::wheelEvent(QGraphicsSceneWheelEvent *event)

Reimplemented from QGraphicsItem::wheelEvent().

QWidget *QGraphicsProxyWidget::widget() const

Returns a pointer to the embedded widget.

См. также setWidget().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qgraphicsproxywidget.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API