QGraphicsTextItem继承。奇怪的行为

时间:2014-03-14 07:43:31

标签: qt qgraphicstextitem

我创建了一个继承自QGraphicsTextItem的类。此类的对象必须是可移动的,并且必须在MouseButton启动时发送信号。

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

一切都好。但是,当我补充说:

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

2 个答案:

答案 0 :(得分:0)

哇!写了

class PolygonLabel: public QGraphicsTextItem, public QObject

而不是

class PolygonLabel: public QObject, public QGraphicsTextItem

问题已经完成!

答案 1 :(得分:0)

首先,从QGraphicsObject继承,而不是多次入侵。 QGraphicsObject类为需要信号,槽和属性的所有图形项提供基类。

文本被切断的原因也可能是因为您没有覆盖boundingRect函数,该函数返回您正在绘制的区域的边界矩形。请参阅{{3} }。