Spec-Zone.ru › Qt 5.6

Класс QGraphicsProxyWidget

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

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

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

QGraphicsProxyWidget(QGraphicsItem *parent = Q_NULLPTR, Qt::WindowFlags wFlags = Qt::WindowFlags())
~QGraphicsProxyWidget()
QGraphicsProxyWidget * createProxyForChildWidget(QWidget *child)
void setWidget(QWidget *widget)
QRectF subWidgetRect(const QWidget *widget) const
QWidget * widget() const

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

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

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

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

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

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

QGraphicsProxyWidget встраивает виджеты на основе QWidget, например, QPushButton, QFontComboBox или даже QFileDialog, в QGraphicsScene. Он передает события между двумя объектами и преобразует между целочисленной геометрией QWidget и геометрией на основе qreal 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() Все функции размера с подсказкой от встроенного виджета пересылаются прокси.
QWidget::getContentsMargins() QGraphicsProxyWidget::getContentsMargins() Обновляется один раз функцией setWidget().
QWidget::windowTitle QGraphicsProxyWidget::windowTitle Обновляется один раз функцией setWidget().

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

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

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

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

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

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

QGraphicsProxyWidget::~QGraphicsProxyWidget()

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

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

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

QGraphicsProxyWidget *QGraphicsProxyWidget::createProxyForChildWidget(QWidget *child)

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

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

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

Эта функция была добавлена в Qt 4.5.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[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().

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

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

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

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

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

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

void QGraphicsProxyWidget::setWidget(QWidget *widget)

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

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

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

Флаги окна QGraphicsProxyWidget определяют, будут ли виджету присвоены декорации окна после встраивания.

После возвращения этой функции QGraphicsProxyWidget будет поддерживать синхронизацию своего состояния со состоянием widget по возможности.

Если виджет уже встроен этим прокси при вызове этой функции, этот виджет будет сначала автоматически развстроен. Передача 0 для аргумента widget позволит только развстроить виджет, и владение текущим встроенным виджетом будет передано вызывающей стороне. Каждый вложенный виджет также будет вложен, а его прокси-виджет уничтожен.

Обратите внимание, что виджеты с установленным атрибутом виджета Qt::WA_PaintOnScreen и виджеты, которые оборачивают внешнее приложение или контроллер, встраивать нельзя. Примерами являются QGLWidget и QAxWidget.

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

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

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

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

Переопределено из QGraphicsLayoutItem::sizeHint().

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

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

Если виджет не вложен, widget равен 0 или widget не является потомком вложенного виджета, эта функция возвращает пустой QRectF.

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

[virtual] int QGraphicsProxyWidget::type() const

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

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

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

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

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

QWidget *QGraphicsProxyWidget::widget() const

Возвращает указатель на вложенный виджет.

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

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

Spec-Zone.ru

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