Описание класса QGraphicsProxyWidgetКласс QGraphicsProxyWidget предоставляет слой посредника для встраивания QWidget в QGraphicsScene. Далее... #include <QGraphicsProxyWidget> Унаследован от: QGraphicsWidget. Этот класс был введён в Qt 4.4. Открытые функции
Переопределённые открытые функции
Переопределённые защищённые функции
Защищённые слоты
Дополнительные унаследованные члены
Подробное описаниеКласс QGraphicsProxyWidget предоставляет слой посредника для встраивания QWidget в QGraphicsScene. QGraphicsProxyWidget встраивает основанные на QWidget виджеты, например, QPushButton, QFontComboBox или даже QFileDialog в QGraphicsScene. Он переправляет события между двумя объектами и переводит между целочисленной геометрией QWidget и вещественной геометрией QGraphicsWidget. QGraphicsProxyWidget поддерживает все ключевые свойства QWidget, включая фокус с помощью клавиши Tab, ввод с клавиатуры, перетаскивание и всплывание. Вы также можете встроить сложный виджет, например, виджет с подвиджетами. Пример: 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(); // возвращает true proxy->isVisible(); // также возвращает true edit->hide(); edit->isVisible(); // возвращает false proxy->isVisible(); // также возвращает false QGraphicsProxyWidget поддерживает симметричность для следующих состояний:
Замечание: QGraphicsScene содержит встроенный внедрённый виджет в специальном состоянии, которое не даёт ему беспокоить другие виджеты (как встроенные, так и обычные) когда он встроен. В этом состоянии поведение виджета может слегка отличатся от поведения, когда он не встроен. Внимание: Этот класс предоставлен для удобства при соединении QWidgets и QGraphicsItems, он не должен быть использован для случаев, когда требуется высокая производительность. Смотрите также QGraphicsScene::addWidget() и QGraphicsWidget. Описание функций-членовQGraphicsProxyWidget::QGraphicsProxyWidget ( QGraphicsItem * parent = 0, Qt::WindowFlags wFlags = 0 )Создаёт новый виджет QGraphicsProxy. parent и wFlags передаются в конструктор QGraphicsItem. QGraphicsProxyWidget::~QGraphicsProxyWidget ()Уничтожает виджет посредника и встроенный виджет. void QGraphicsProxyWidget::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) [virtual protected]Переопределено из QGraphicsItem::contextMenuEvent(). QGraphicsProxyWidget * QGraphicsProxyWidget::createProxyForChildWidget ( QWidget * child )Создаёт виджет посредника для дочернего виджета child виджета, содержащегося в этом посредника. Эта функция позволяет получать посредников для виджетов, не являющихся виджетами верхнего уровня. Например, вы можете внедрить диалог, а затем преобразовать только один из его виджетов. Если виджет уже внедрён, будет возвращён уже существующий посредник. Эта функция была введена в Qt 4.5. Смотрите также newProxyWidget() и QGraphicsScene::addWidget(). void QGraphicsProxyWidget::dragEnterEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]Переопределено из QGraphicsItem::dragEnterEvent(). void QGraphicsProxyWidget::dragLeaveEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]Переопределено из QGraphicsItem::dragLeaveEvent(). void QGraphicsProxyWidget::dragMoveEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]Переопределено из QGraphicsItem::dragMoveEvent(). void QGraphicsProxyWidget::dropEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]Переопределено из QGraphicsItem::dropEvent(). bool QGraphicsProxyWidget::event ( QEvent * event ) [virtual protected]Переопределено от QObject::event(). bool QGraphicsProxyWidget::eventFilter ( QObject * object, QEvent * event ) [virtual protected]Переопределено из QObject::eventFilter(). void QGraphicsProxyWidget::focusInEvent ( QFocusEvent * event ) [virtual protected]Переопределено из QGraphicsItem::focusInEvent(). bool QGraphicsProxyWidget::focusNextPrevChild ( bool next ) [virtual protected]Переопределено из QGraphicsWidget::focusNextPrevChild(). void QGraphicsProxyWidget::focusOutEvent ( QFocusEvent * event ) [virtual protected]Переопределено из QGraphicsItem::focusOutEvent(). void QGraphicsProxyWidget::grabMouseEvent ( QEvent * event ) [virtual protected]Переопределено из QGraphicsWidget::grabMouseEvent(). void QGraphicsProxyWidget::hideEvent ( QHideEvent * event ) [virtual protected]Переопределено из QGraphicsWidget::hideEvent(). void QGraphicsProxyWidget::hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]Переопределено из QGraphicsItem::hoverEnterEvent(). void QGraphicsProxyWidget::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]Переопределено из QGraphicsItem::hoverLeaveEvent(). void QGraphicsProxyWidget::hoverMoveEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]Переопределено из QGraphicsItem::hoverMoveEvent(). QVariant QGraphicsProxyWidget::itemChange ( GraphicsItemChange change, const QVariant & value ) [virtual protected]Переопределено из QGraphicsItem::itemChange(). void QGraphicsProxyWidget::keyPressEvent ( QKeyEvent * event ) [virtual protected]Переопределено из QGraphicsItem::keyPressEvent(). void QGraphicsProxyWidget::keyReleaseEvent ( QKeyEvent * event ) [virtual protected]Переопределено из QGraphicsItem::keyReleaseEvent(). void QGraphicsProxyWidget::mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]Переопределено из QGraphicsItem::mouseDoubleClickEvent(). void QGraphicsProxyWidget::mouseMoveEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]Переопределено из QGraphicsItem::mouseMoveEvent(). void QGraphicsProxyWidget::mousePressEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]Переопределено из QGraphicsItem::mousePressEvent(). void QGraphicsProxyWidget::mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]Переопределено из QGraphicsItem::mouseReleaseEvent(). QGraphicsProxyWidget * QGraphicsProxyWidget::newProxyWidget ( const QWidget * child ) [protected slot]Создаёт виджет посредника для дочернего виджета child виджета, содержащегося в этом посредника. Вы не должны непосредственно вызывать эту функцию; вместо этого используйте QGraphicsProxyWidget::createProxyForChildWidget(). Эта функция является пустым виртуальным слотом, который вы можете переопределить в вашем подклассе чтобы контролировать создание новых виджетов посредников. Реализация по умолчанию возвращает посредника, созданного с помощью конструктора QGraphicsProxyWidget() с этим виджтом посредника в качестве родителя. Эта функция была введена в Qt 4.5. Смотрите также createProxyForChildWidget(). void QGraphicsProxyWidget::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget ) [virtual]Переопределено из QGraphicsItem::paint(). void QGraphicsProxyWidget::resizeEvent ( QGraphicsSceneResizeEvent * event ) [virtual protected]Переопределено из QGraphicsWidget::resizeEvent(). void QGraphicsProxyWidget::setGeometry ( const QRectF & rect ) [virtual]Переопределено из QGraphicsLayoutItem::setGeometry(). void QGraphicsProxyWidget::setWidget ( QWidget * widget )Встраивает виджет widget в этот виджет посредника. Встроенный виджет должен находиться исключительно или внутри или снаружи графического вида. Вы не сможете встроить виджет если он в тоже время видим где-то в пользовательском интерфейсе. widget должен быть виджетом верхнего уровня чей родитель равен 0. Когда виджет встраивается, его состояние (например, видимый, доступный, геометрия, подсказки о размерах) копируются в виджет посредника. Если встроенный виджет явно спрятан или отключён, виджет посредника будет явно спрятан или отключён после того как встраивание будет завершено. Документация класса содержит полный обзор разделяемого состояния. Флаги окна QGraphicsProxyWidget определяют должен ли виджет после встраивания использовать заданное обрамление окон или нет. После того как эта функция возвратит управление, QGraphicsProxyWidget будет синхронизировать своё состояние с виджетом widget как только появится такая возможность. Если виджет уже встроен этим посредником при вызове этой функции, тогда этот виджет сначала будет автоматически извлечён. Передача 0 в аргументе widget только извлечёт виджет и владение над встроенным виджетом перейдёт к вызывающему. Каждый встраиваемый дочерний виджет будет также встроен и их виджеты посредники будут разрушены. Заметьте, что виджеты с установленным свойством Qt::WA_PaintOnScreen и виджеты, которые оборачивают внешнее приложение или контролёр, не могут быть встроены. Примерами являются QGLWidget и QAxWidget. Смотрите также widget(). void QGraphicsProxyWidget::showEvent ( QShowEvent * event ) [virtual protected]Переопределено из QGraphicsWidget::showEvent(). QSizeF QGraphicsProxyWidget::sizeHint ( Qt::SizeHint which, const QSizeF & constraint = QSizeF() ) const [virtual protected]Переопределено из QGraphicsLayoutItem::sizeHint(). QRectF QGraphicsProxyWidget::subWidgetRect ( const QWidget * widget ) constВозвращает прямоугольник для виджета widget, который должен быть потомком widget(), или самого виджета widget() в локальных координатах этого посредника. Если нет встроенного виджета, widget равен 0, или widget не является потомком встроенного виджета, то эта функция вернёт пустой QRectF. Смотрите также widget(). int QGraphicsProxyWidget::type () const [virtual]Переопределено из QGraphicsItem::type(). void QGraphicsProxyWidget::ungrabMouseEvent ( QEvent * event ) [virtual protected]Переопределено из QGraphicsWidget::ungrabMouseEvent(). void QGraphicsProxyWidget::wheelEvent ( QGraphicsSceneWheelEvent * event ) [virtual protected]Переопределено из QGraphicsItem::wheelEvent(). QWidget * QGraphicsProxyWidget::widget () constВозвращает указатель на встроенный виджет. Смотрите также setWidget(). |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |