2013-08-15 3 views
3

나는 텍스트가있는 QGraphicsItem입니다. 이 텍스트를 편집 가능한 상태로 두어 사용자가 두 번 클릭하면 편집 모드로 들어갑니다. 가장 쉬운 방법은 텍스트를 QLineEdit으로 변경하고 사용자가 포커스를 클릭하거나 입력이 끝나면 엔터 키를 누르는 것입니다.QLabel을 QGraphicsItem에 추가하는 방법

QLineEdit을 어떻게 추가 할 수 있습니까? QGraphicsItem을 서브 클래 싱 했으므로 내부 구조에 액세스 할 수 있습니다.

답변

8

QGraphicsScene 어떤 QWidget 기반 객체를 추가하려면 QGraphicsProxyWidget이 필요합니다.

이 기능 QGraphicsSceneaddWidget 전화

, 그것은 QGraphicsProxyWidget에 위젯을 내장하고 반환 호출자에게 다시 QGraphicsProxyWidget.

QGraphicsProxyWidget은 위젯에 이벤트를 전달하고 다른 좌표계 간의 변환을 처리합니다.

QGraphicsScene* pScene = new QGraphicsScene; 
QLineEdit* pLineEdit = new QLineEdit("Some Text"); 

// add the widget - internally, the QGraphicsProxyWidget is created and returned 
QGraphicsProxyWidget* pProxyWidget = pScene->AddWidget(pLineEdit); 

을하거나 현재 QGraphicsItem에 추가 : 당신이 직접 추가 할 경우

은 이제 QGraphicsSceneQLineEdit를 사용하여보고 있다는 것을, 당신은 결정해야합니다. 여기 , 당신은 QGraphicsItem의 자식으로 추가 할 수 있습니다 :

MyQGraphicsItem* pMyItem = new MyQGraphicsItem; 
QGraphicsProxyWidget* pMyProxy = new QGraphicsProxyWidget(pMyItem); // the proxy's parent is pMyItem 
pMyProxy->setWidget(pLineEdit); // adding the QWidget based object to the proxy 

또는 당신이 당신의 클래스의 구성원으로 QGraphicsProxyWidget을 추가하고 관련 함수를 호출 할 수 있지만 아이로 추가하면 아마 훨씬 간단 .

2

특정 동작이 필요한 경우에만 QGraphicsProxyWidget을 확장하여 프록시 위젯을 만들거나 QGraphicsProxyWidget을 사용해야합니다. Qt SDK의 "Embedded Dialogs"예제와 QGraphicsProxyWidget 설명서를 살펴보십시오. 오랫동안 거기에 있었기 때문에 버전에 적합해야합니다. 이게 도움이 되길 바란다.

5
QGraphicsTextItem::setTextInteractionFlags (Qt::TextInteractionFlags flags) 

API를 사용할 수 있습니다. 하지만 그 안에 QGraphicsTextItem을 만들어야합니다.

자세한 내용은 다음 링크를 확인하십시오 : Implementation details

+0

@Freedom_Ben QLineEdit은 QWidget이므로 QGraphicsTextItem 대신 QLineEdit를 원한다면. 그런 다음 "mhcuervo"가 이미 답변 한 다른 방법을 사용하십시오. – Ashif

+0

이 기능은 대부분이 기능을 간과하기 때문에 실제로 좋은 대답이었으며 QWidgets 및 관련 프록시 항목을 추가하는 것은 전반적인 성능은 말할 것도없이 단순함을 찾고 있다면 원치 않는 전체 웜 수 있습니다. – osirisgothra

관련 문제