0

我创建了一个类,继承自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一切都很好。

字体增加后如何更新项目大小?
谢谢!

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

0

哇!一个写的

class PolygonLabel: public QGraphicsTextItem, public QObject

代替

class PolygonLabel: public QObject, public QGraphicsTextItem

问题就解决了!

于 2014-03-14T11:01:41.163 回答
0

首先,继承自,而不是多重继承QGraphicsObject。该类QGraphicsObject为所有需要信号、槽和属性的图形项提供了一个基类。

您的文本被截断的原因也可能是由于您没有覆盖该boundingRect函数,该函数返回您正在绘制的区域的边界矩形。请参见此处

于 2014-03-14T11:01:55.390 回答