Класс 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 |
- 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 сохраняет симметрию для следующих состояний:
Примечание: 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