我创建了一个继承自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
时,一切都很好。
如何在字体增加后更新项目大小?
谢谢!
答案 0 :(得分:0)
哇!写了
class PolygonLabel: public QGraphicsTextItem, public QObject
而不是
class PolygonLabel: public QObject, public QGraphicsTextItem
问题已经完成!
答案 1 :(得分:0)
首先,从QGraphicsObject
继承,而不是多次入侵。 QGraphicsObject
类为需要信号,槽和属性的所有图形项提供基类。
文本被切断的原因也可能是因为您没有覆盖boundingRect
函数,该函数返回您正在绘制的区域的边界矩形。请参阅{{3} }。