Класс 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
- 34 открытых функции унаследованные от QObject
- 176 открытых функции унаследованные от QGraphicsItem
Переопределённые защищённые функции
| виртуальный 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 |
- 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 открытая переменная, унаследованная от QObject
- 1 статический открытый член, унаследованный от QGraphicsWidget
- 10 статических открытых членов, унаследованных от QObject
- 24 защищённых функции, унаследованные от QGraphicsWidget
- 1 защищённая функция, унаследованная от QGraphicsObject
- 3 защищённых функции, унаследованные от QGraphicsLayoutItem
- 9 защищённых функций, унаследованных от QObject
- 24 защищённых функций, унаследованных от QGraphicsItem
- 2 защищённых переменных, унаследованных от QObject
Подробное описание
Класс 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 поддерживает симметрию для следующих состояний:
Примечание: QGraphicsScene сохраняет встроенный виджет в специальном состоянии, которое предотвращает его вмешательство в другие виджеты (встроенные и не встроенные) во время встраивания. В этом состоянии виджет может немного отличаться по поведению от того, как он себя ведёт, когда не встроен.
Предупреждение: Этот класс предназначен для удобства при связывании QWidgets и QGraphicsItems, его не следует использовать в высокопроизводительных сценариях.
См. также QGraphicsScene::addWidget() и QGraphicsWidget.
Документация по типу членов
перечисление QGraphicsProxyWidget::anonymous
Значение, возвращаемое виртуальной функцией type().
| Постоянная | Значение | Описание |
|---|---|---|
QGraphicsProxyWidget::Type |
12 |
Виджет прокси графики |
Документация по функциям-членам
QGraphicsProxyWidget::QGraphicsProxyWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = ...)
Создаёт новый виджет QGraphicsProxy. 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 в этот прокси-виджет. Встраиваемый виджет должен находиться исключительно внутри или вне области просмотра графики. Вы не можете встроить виджет, если он одновременно виден где-то ещё в пользовательском интерфейсе.
widget должен быть виджетом верхнего уровня, у которого родитель равен 0.
При встраивании состояние виджета (например, видимость, активность, геометрия, подсказки размера) копируется в прокси-виджет. Если встраиваемый виджет явно скрыт или отключён, прокси-виджет станет явно скрытым или отключённым после завершения встраивания. Документация класса содержит полное описание состояния совместно используемых данных.
Флаги окна виджета QGraphicsProxyWidget определяют, будут ли виджету после встраивания предоставлены декорации окна или нет.
После возвращения из этой функции QGraphicsProxyWidget будет поддерживать синхронизацию своего состояния с состоянием widget, когда это возможно.
Если виджет уже встроен этим прокси при вызове этой функции, этот виджет будет сначала автоматически разобщён. Передача 0 для аргумента widget будет только разобщать виджет, и владение текущим встроенным виджетом будет передано вызывающей стороне. Каждый дочерний виджет, который встроен, также будет встроен, а его прокси-виджет уничтожен.
Обратите внимание, что виджеты с атрибутом виджета Qt::WA_PaintOnScreen и виджеты, которые оборачивают внешнее приложение или контроллер, не могут быть встроенными. Примерами являются QGLWidget и QAxWidget.
См. также widget().
[override virtual protected] void QGraphicsProxyWidget::showEvent(QShowEvent *event)
Переопределено из QGraphicsWidget::showEvent().
[override virtual protected] QSizeF QGraphicsProxyWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
Переопределено из QGraphicsWidget::sizeHint().
QRectF QGraphicsProxyWidget::subWidgetRect(const QWidget *widget) const
Возвращает прямоугольник для widget, который должен быть потомком widget() или самим widget() в локальных координатах этого элемента прокси.
Если виджет не встроен, widget равен 0, или widget не является потомком встроенного виджета, эта функция возвращает пустой QRectF.
См. также widget().
[override virtual] int QGraphicsProxyWidget::type() const
Переопределено из QGraphicsWidget::type().
[override virtual protected] void QGraphicsProxyWidget::ungrabMouseEvent(QEvent *event)
Переопределено из QGraphicsWidget::ungrabMouseEvent().
[override 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.11/qgraphicsproxywidget.html