2014-03-14 110 views
0

我創建了一個類,繼承自QGraphicsTextItem。此類的對象必須是可移動的,並且必須在MouseButton啓動時發送信號。QGraphicsTextItem繼承。奇怪的行爲

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); 

然後,我創建對象:

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

,一切都OK。但是,當我加入:

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); 

我的測試開始切斷(字體較大,但對象的寬度沒有變化)!爲什麼?。當我使用QGraphicsTextItem而不是MyTextItem時,一切正常。

如何在字體增加後更新項目大小?
謝謝!

enter image description here enter image description here

+0

如果我從QObject刪除繼承 - 所有顯示正確..但我不能發送信號沒有它.. – Ilya

回答

0

哇!一個寫

class PolygonLabel: public QGraphicsTextItem, public QObject 

代替

class PolygonLabel: public QObject, public QGraphicsTextItem 

和問題做!

0

首先,從QGraphicsObject繼承,而不是多重怠惰。 QGraphicsObject類爲所有需要信號,插槽和屬性的圖形項目提供基類。

您的文本被切斷的原因也可能是由於您尚未覆蓋boundingRect函數,該函數返回您正在繪製區域的邊界矩形。請參閱here