QGraphicsProxyWidget Class
QGraphicsProxyWidget 클래스는 QGraphicsScene 에 QWidget 을 임베드하기 위한 프록시 계층을 제공합니다.. ..
헤더: | #include <QGraphicsProxyWidget> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
상속합니다: | QGraphicsWidget |
공용 타입
enum | anonymous { Type } |
공용 함수
QGraphicsProxyWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags()) | |
virtual | ~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) override |
virtual void | setGeometry(const QRectF &rect) override |
virtual int | type() const override |
재구현된 보호 함수
virtual void | contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override |
virtual void | dragEnterEvent(QGraphicsSceneDragDropEvent *event) override |
virtual void | dragLeaveEvent(QGraphicsSceneDragDropEvent *event) override |
virtual void | dragMoveEvent(QGraphicsSceneDragDropEvent *event) override |
virtual void | dropEvent(QGraphicsSceneDragDropEvent *event) override |
virtual bool | event(QEvent *event) override |
virtual bool | eventFilter(QObject *object, QEvent *event) override |
virtual void | focusInEvent(QFocusEvent *event) override |
virtual bool | focusNextPrevChild(bool next) override |
virtual void | focusOutEvent(QFocusEvent *event) override |
virtual void | grabMouseEvent(QEvent *event) override |
virtual void | hideEvent(QHideEvent *event) override |
virtual void | hoverEnterEvent(QGraphicsSceneHoverEvent *event) override |
virtual void | hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override |
virtual void | hoverMoveEvent(QGraphicsSceneHoverEvent *event) override |
virtual void | inputMethodEvent(QInputMethodEvent *event) override |
virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const override |
virtual QVariant | itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override |
virtual void | keyPressEvent(QKeyEvent *event) override |
virtual void | keyReleaseEvent(QKeyEvent *event) override |
virtual void | mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override |
virtual void | mouseMoveEvent(QGraphicsSceneMouseEvent *event) override |
virtual void | mousePressEvent(QGraphicsSceneMouseEvent *event) override |
virtual void | mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override |
virtual void | resizeEvent(QGraphicsSceneResizeEvent *event) override |
virtual void | showEvent(QShowEvent *event) override |
virtual QSizeF | sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override |
virtual void | ungrabMouseEvent(QEvent *event) override |
virtual void | wheelEvent(QGraphicsSceneWheelEvent *event) override |
보호된 슬롯
QGraphicsProxyWidget * | newProxyWidget(const QWidget *child) |
상세 설명
QGraphicsProxyWidget은 QPushButton, QFontComboBox, 또는 QFileDialog 와 같은 QWidget-기반 위젯을 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으로 위젯 임베드하기
위젯을 임베드하는 방법은 두 가지가 있습니다. 가장 일반적인 방법은 관련 Qt::WindowFlags 과 함께 QGraphicsScene::addWidget()에 위젯 포인터를 전달하는 것입니다. 이 함수는 QGraphicsProxyWidget에 대한 포인터를 반환합니다. 그런 다음 프록시 또는 임베드된 위젯 자체의 부모를 다시 지정하거나 위치를 지정할 수 있습니다.
예를 들어 아래 코드 스니펫에서는 프록시에 그룹 상자를 임베드합니다:
QGroupBox *groupBox = new QGroupBox("Contact Details"); QLabel *numberLabel = new QLabel("Telephone number"); QLineEdit *numberEdit = new QLineEdit; QFormLayout *layout = new QFormLayout(groupBox); layout->addRow(numberLabel, numberEdit); QGraphicsScene scene; QGraphicsProxyWidget *proxy = scene.addWidget(groupBox); QGraphicsView view(&scene); view.show();
아래 이미지는 콘텐츠 여백과 콘텐츠 직사각형 레이블이 적용된 출력입니다.
또는 새 QGraphicsProxyWidget 항목을 만든 다음 setWidget()를 호출하여 QWidget 을 나중에 임베드할 수 있습니다. widget () 함수는 임베드된 위젯에 대한 포인터를 반환합니다. QGraphicsProxyWidget은 QWidget 와 소유권을 공유하므로 두 위젯 중 하나가 소멸되면 다른 위젯도 자동으로 소멸됩니다.
위젯 상태 동기화
QGraphicsProxyWidget은 그 상태를 임베디드 위젯과 동기화 상태로 유지합니다. 예를 들어 프록시가 숨겨지거나 비활성화되면 임베드된 위젯도 숨겨지거나 비활성화되며, 그 반대의 경우도 마찬가지입니다. 추가 위젯()을 호출하여 위젯을 임베드하면 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 state | QGraphicsProxyWidget 상태 | 참고 |
---|---|---|
QWidget::enabled | QGraphicsProxyWidget::enabled | |
QWidget::visible | QGraphicsProxyWidget::visible | 명시적 상태도 대칭입니다. |
QWidget::geometry | QGraphicsProxyWidget::지오메트리 | 지오메트리는 임베디드 위젯이 표시되는 동안에만 대칭이 보장됩니다. |
QWidget::layoutDirection | QGraphicsProxyWidget::layoutDirection | |
QWidget::style | QGraphicsProxyWidget::스타일 | |
QWidget::palette | QGraphicsProxyWidget::팔레트 | |
QWidget::font | QGraphicsProxyWidget::font | |
QWidget::cursor | QGraphicsProxyWidget::커서 | 임베디드 위젯이 프록시 위젯 커서를 재정의합니다. 프록시 커서는 현재 마우스 아래에 있는 임베디드 하위 위젯에 따라 변경됩니다. |
QWidget::sizeHint() | QGraphicsProxyWidget::sizeHint() | 임베디드 위젯의 모든 크기 힌트 기능은 프록시에 의해 전달됩니다. |
QWidget::getContentsMargins() | QGraphicsProxyWidget::getContentsMargins() | setWidget()에 의해 한 번 업데이트됩니다. |
QWidget::windowTitle | QGraphicsProxyWidget::windowTitle | setWidget()에 의해 한 번 업데이트되었습니다. |
참고: QGraphicsScene 은 위젯이 임베드된 동안 다른 위젯(임베드된 위젯과 임베드되지 않은 위젯 모두)을 방해하지 않도록 임베드된 위젯을 특수 상태로 유지합니다. 이 상태에서는 위젯이 임베드되지 않았을 때와 동작이 약간 다를 수 있습니다.
경고: 이 클래스는 QWidgets와 QGraphicsItems를 연결할 때 편의를 위해 제공되며, 고성능 시나리오에는 사용해서는 안 됩니다. 특히 OpenGL 뷰포트를 사용하는 QGraphicsView 을 통해 표시되는 장면에 위젯을 임베드하는 경우 모든 조합에서 작동하지 않을 수 있습니다.
QGraphicsScene::addWidget() 및 QGraphicsWidget 을참조하세요 .
멤버 유형 문서
enum QGraphicsProxyWidget::anonymous
가상 type() 함수가 반환하는 값입니다.
상수 | Value | 설명 |
---|---|---|
QGraphicsProxyWidget::Type | 12 | 그래픽 프록시 위젯 |
멤버 함수 문서
QGraphicsProxyWidget::QGraphicsProxyWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags())
parent 및 wFlags 을 QGraphicsItem 의 생성자에 전달합니다.
[virtual noexcept]
QGraphicsProxyWidget::~QGraphicsProxyWidget()
프록시 위젯과 임베드된 위젯을 모두 삭제합니다.
[override virtual protected]
void QGraphicsProxyWidget::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
다시 구현합니다: QGraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * 이벤트).
QGraphicsProxyWidget *QGraphicsProxyWidget::createProxyForChildWidget(QWidget *child)
이 프록시에 포함된 위젯의 지정된 child 에 대한 프록시 위젯을 생성합니다.
이 함수를 사용하면 최상위 위젯이 아닌 위젯에 대한 프록시를 획득할 수 있습니다. 예를 들어 대화 상자를 임베드한 다음 해당 위젯 중 하나만 변환할 수 있습니다.
위젯이 이미 임베드된 경우 기존 프록시 위젯을 반환합니다.
newProxyWidget() 및 QGraphicsScene::addWidget()도 참조하세요 .
[override virtual protected]
void QGraphicsProxyWidget::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
다시 구현합니다: QGraphicsItem::dragEnterEvent(QGraphicsSceneDragDropEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
다시 구현합니다: QGraphicsItem::dragLeaveEvent(QGraphicsSceneDragDropEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
다시 구현합니다: QGraphicsItem::dragMoveEvent(QGraphicsSceneDragDropEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::dropEvent(QGraphicsSceneDragDropEvent *event)
다시 구현합니다: QGraphicsItem::dropEvent(QGraphicsSceneDragDropEvent * 이벤트).
[override virtual protected]
bool QGraphicsProxyWidget::event(QEvent *event)
다시 구현합니다: QGraphicsWidget::event(QEvent * 이벤트).
[override virtual protected]
bool QGraphicsProxyWidget::eventFilter(QObject *object, QEvent *event)
다시 구현합니다: QObject::eventFilter(QObject *watched, QEvent *event).
[override virtual protected]
void QGraphicsProxyWidget::focusInEvent(QFocusEvent *event)
다시 구현합니다: QGraphicsWidget::focusInEvent(QFocusEvent * 이벤트).
[override virtual protected]
bool QGraphicsProxyWidget::focusNextPrevChild(bool next)
다시 구현합니다: QGraphicsWidget::focusNextPrevChild(다음 부울).
[override virtual protected]
void QGraphicsProxyWidget::focusOutEvent(QFocusEvent *event)
다시 구현합니다: QGraphicsWidget::focusOutEvent(QFocusEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::grabMouseEvent(QEvent *event)
다시 구현합니다: QGraphicsWidget::grabMouseEvent(QEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::hideEvent(QHideEvent *event)
다시 구현합니다: QGraphicsWidget::hideEvent(QHideEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
다시 구현합니다: QGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
다시 구현합니다: QGraphicsWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
다시 구현합니다: QGraphicsWidget::hoverMoveEvent(QGraphicsSceneHoverEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::inputMethodEvent(QInputMethodEvent *event)
다시 구현합니다: QGraphicsItem::inputMethodEvent(Q입력메소드이벤트 *이벤트).
[override virtual protected]
QVariant QGraphicsProxyWidget::inputMethodQuery(Qt::InputMethodQuery query) const
재구현합니다: QGraphicsItem::inputMethodQuery(Qt::InputMethodQuery 쿼리) const.
[override virtual protected]
QVariant QGraphicsProxyWidget::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
재구현합니다: QGraphicsWidget::itemChange(QGraphicsItem::GraphicsItemChange 변경, const QVariant &value).
[override virtual protected]
void QGraphicsProxyWidget::keyPressEvent(QKeyEvent *event)
다시 구현합니다: QGraphicsItem::keyPressEvent(QKeyEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::keyReleaseEvent(QKeyEvent *event)
다시 구현합니다: QGraphicsItem::keyReleaseEvent(QKeyEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
다시 구현합니다: QGraphicsItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
다시 구현합니다: QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
다시 구현합니다: QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
다시 구현합니다: QGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * 이벤트).
[protected slot]
QGraphicsProxyWidget *QGraphicsProxyWidget::newProxyWidget(const QWidget *child)
이 프록시에 포함된 위젯의 지정된 child 에 대한 프록시 위젯을 생성합니다.
이 함수를 직접 호출하지 말고 QGraphicsProxyWidget::createProxyForChildWidget()를 대신 사용하세요.
이 함수는 새 프록시 위젯이 생성되는 방식을 제어하기 위해 서브클래스에서 재구현할 수 있는 가짜 가상 슬롯입니다. 기본 구현은 이 프록시 위젯을 부모로 하여 QGraphicsProxyWidget() 생성자를 사용하여 생성된 프록시를 반환합니다.
createProxyForChildWidget()도 참조하세요 .
[override virtual]
void QGraphicsProxyWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
재구현합니다: QGraphicsWidget::paint(QPainter *페인터, const Q스타일옵션그래픽아이템 *옵션, Q위젯 *위젯).
[override virtual protected]
void QGraphicsProxyWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
다시 구현합니다: QGraphicsWidget::resizeEvent(QGraphicsSceneResizeEvent * 이벤트).
[override virtual]
void QGraphicsProxyWidget::setGeometry(const QRectF &rect)
재구현합니다: QGraphicsLayoutItem::setGeometry(const QRectF &rect).
void QGraphicsProxyWidget::setWidget(QWidget *widget)
이 프록시 위젯에 widget 을 임베드합니다. 임베드된 위젯은 그래픽 보기의 내부 또는 외부에만 있어야 합니다. 위젯이 UI의 다른 곳에 동시에 표시되는 한 위젯을 임베드할 수 없습니다.
widget 부모가 nullptr
인 최상위 위젯이어야 합니다.
위젯이 임베드되면 해당 상태(예: 표시됨, 활성화됨, 지오메트리, 크기 힌트)가 프록시 위젯에 복사됩니다. 임베드된 위젯이 명시적으로 숨겨지거나 비활성화되어 있으면 임베딩이 완료된 후 프록시 위젯이 명시적으로 숨겨지거나 비활성화됩니다. 클래스 문서에 공유 상태에 대한 전체 개요가 나와 있습니다.
QGraphicsProxyWidget의 창 플래그에 따라 임베드 후 위젯에 창 장식을 적용할지 여부가 결정됩니다.
이 함수가 반환된 후 QGraphicsProxyWidget 는 가능한 한 widget 의 상태와 동기화된 상태로 유지됩니다.
이 함수가 호출될 때 이 프록시에 의해 위젯이 이미 임베드되어 있는 경우 해당 위젯은 먼저 자동으로 임베드 해제됩니다. widget 인자로 nullptr
을 전달하면 위젯만 임베드 해제되며, 현재 임베드된 위젯의 소유권은 호출자에게 전달됩니다. 임베드된 모든 자식 위젯도 임베드되고 해당 프록시 위젯은 삭제됩니다.
Qt::WA_PaintOnScreen 위젯 속성이 설정된 위젯과 외부 애플리케이션 또는 컨트롤러를 래핑하는 위젯은 임베드할 수 없다는 점에 유의하세요. 예를 들어 QOpenGLWidget 및 QAxWidget이 있습니다.
widget()도 참조하세요 .
[override virtual protected]
void QGraphicsProxyWidget::showEvent(QShowEvent *event)
다시 구현합니다: QGraphicsWidget::showEvent(QShowEvent * 이벤트).
[override virtual protected]
QSizeF QGraphicsProxyWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
재구현합니다: QGraphicsWidget::sizeHint(Qt::SizeHint 어느, const QSizeF &constraint) const.
QRectF QGraphicsProxyWidget::subWidgetRect(const QWidget *widget) const
이 프록시 항목의 로컬 좌표에서 widget() 또는 widget() 자체의 하위 항목이어야 하는 widget 에 대한 사각형을 반환합니다.
위젯이 임베드되지 않았거나 widget 가 nullptr
이거나 widget 가 임베드된 위젯의 하위 항목이 아닌 경우 이 함수는 빈 QRectF 을 반환합니다.
widget()도 참조하세요 .
[override virtual]
int QGraphicsProxyWidget::type() const
재구현합니다: QGraphicsWidget::type() const.
[override virtual protected]
void QGraphicsProxyWidget::ungrabMouseEvent(QEvent *event)
다시 구현합니다: QGraphicsWidget::ungrabMouseEvent(QEvent * 이벤트).
[override virtual protected]
void QGraphicsProxyWidget::wheelEvent(QGraphicsSceneWheelEvent *event)
다시 구현합니다: QGraphicsItem::wheelEvent(QGraphicsSceneWheelEvent * 이벤트).
QWidget *QGraphicsProxyWidget::widget() const
임베드된 위젯에 대한 포인터를 반환합니다.
setWidget()도 참조하세요 .
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.