Наследование 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 Все хорошо.

Как обновить размер элемента после увеличения шрифта?
Спасибо!

2 ответа

Решение

Вот Это Да! А написал

class PolygonLabel: public QGraphicsTextItem, public QObject

вместо

class PolygonLabel: public QObject, public QGraphicsTextItem

и проблема была сделана!

Для начала, а не множественное наследование, наследовать от QGraphicsObject, QGraphicsObject Класс обеспечивает базовый класс для всех графических элементов, которые требуют сигналов, слотов и свойств.

Причина, по которой ваш текст обрезается, также может быть связана с тем, что вы не изменили boundingRect функция, которая возвращает ограничивающий прямоугольник области, в которой вы рисуете. Смотрите здесь.

Другие вопросы по тегам