2014-03-14 1 views
0

QGraphicsTextItem에서 상속 한 클래스를 만들었습니다. 이 클래스의 객체는 이동 가능해야하며 MouseButton이 작동 중일 때 신호를 보내야합니다.QGraphicsTextItem 상속입니다. 이상한 행동

MyTextItem* label = new MyTextItem(NULL, "QwertyuiopAsdfghjkl"); 
label->setPos(p); 
label->setFlag(QGraphicsItem::ItemIsMovable, true); 

그리고 모두 OK입니다 :

class MyTextItem: public QObject, public QGraphicsTextItem 
{ 
    Q_OBJECT 
public: 
    MyTextItem(QObject* Object, QString str1): QGraphicsTextItem(str1), mRef(Object){} 
    virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent* event); 
    QObject* mRef; 
signals: 
    void sendSignal(int x, int y); 

은 그 때 나는 개체를 만듭니다. 그러나, 나는 추가 할 때 :

QFont f; 
f.setBold(false); 
f.setItalic(false); 
f.setPixelSize(16); 
f.setFamily("Arial"); 
f.setLetterSpacing(QFont::AbsoluteSpacing, 0.1); 
label->setFont(f); 
// 
scene()->addItem(label); 

내 시험 (글꼴 더 큰이지만, 객체의 폭이 변경없이) 오프의 cutted되었다! 왜?. MyTextItem 대신 QGraphicsTextItem을 사용하면 모두 문제가 없습니다.

글꼴을 늘린 후 항목 크기를 업데이트하는 방법은 무엇입니까?
감사합니다.

enter image description here enter image description here

+0

내가 QObject에서 상속을 삭제하면 - 모두 올바르게 표시되지만 .. 신호가 없으면 신호를 보낼 수 없습니다. – Ilya

답변

0

와우! A는 대신

class PolygonLabel: public QObject, public QGraphicsTextItem 

class PolygonLabel: public QGraphicsTextItem, public QObject 

을 쓰고 문제는 이루어졌다!

0

여러 상속이 아니라 시작하려면 QGraphicsObject에서 상속하십시오. QGraphicsObject 클래스는 신호, 슬롯 및 속성이 필요한 모든 그래픽 항목에 대한 기본 클래스를 제공합니다.

텍스트가 잘리는 이유는 입력 한 영역의 경계 사각형을 반환하는 boundingRect 함수를 재정의하지 않았기 때문일 수도 있습니다. here을 참조하십시오.