LINUX.ORG.RU

Отрисовка фонтов при масштабировании на QGraphicsView

 


0

3

У меня проблемма при увеличении масштаба на представлении QGraphicsView, некоторые фонты перестают отрисовываться. Т.е. я создал объект FomtItem наследуемый от QGraphicsItem добавил его на сцену, он нормально отрисовался. Я начинаю увеличивать масштаб предсталения, все элементы сцены увеличиваются в соответствии с ним, но по достижения определенного размера перестают отрисовываться фонты. Если я используя вертикальный скрол смещу пердставление вниз то они появляются, если используя скрол подниму на верх то опять пропадают? С чем это связанно и что мне делать?

Ответ на: комментарий от Stil

Код функции отрисовки фонтов

/*Перегрузка функции отрисовки*/ void FontItem::paint(QPainter *painter, const StyleOptionGraphicsItem *option, QWidget *widget) { /*Метрические характеристики фонта*/ QFontMetricsF fm(f);

painter->setRenderHint(QPainter::HighQualityAntialiasing, true); painter->setFont(f); qreal delta = 0;

/*Кореция координаты x зависит от от флага, начало координаты может быть заданно * от середины текста или его конца */ if (middle == 1) { /*Координата x середины текста*/ delta = fm.width(text) / 2; } else if (middle == 2) { /*Координата конца текста*/ delta = fm.width(text);

} /*if (middle == 1)*/

painter->setPen(pen); painter->drawText( QPointF(x - delta , y + (1 * (PoinSize - 10) / 2)), text); }

/*Область графического объекта*/ QRectF FontItem::boundingRect() const { /*Метрические характеристики фонта*/ QFontMetricsF fm(f);

QRectF rect = fm.boundingRect(text);

return rect; }

philipp_b
() автор топика
/* Перегрузка функции отрисовки */ 
void FontItem::paint(QPainter *painter, const StyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    /* Метрические характеристики фонта */ 
    QFontMetricsF fm(f);
    
    painter->setRenderHint(QPainter::HighQualityAntialiasing, true); 
    painter->setFont(f); 
    
    qreal delta = 0;

    /* Кореция координаты x зависит от от флага, начало координаты может быть заданно 
     * от середины текста или его конца */ 
    if (middle == 1) 
    { 
        /* Координата x середины текста */ 
        delta = fm.width(text) / 2; 
    } 
    else if (middle == 2) 
    { 
        /* Координата конца текста */ 
        delta = fm.width(text);
    }

    painter->setPen(pen); 
    painter->drawText( QPointF(x - delta , y + (1 * (PoinSize - 10) / 2)), text); 
}

/* Область графического объекта */ 
QRectF FontItem::boundingRect() const 
{ 
    /* Метрические характеристики фонта */ 
    QFontMetricsF fm(f);
    
    QRectF rect = fm.boundingRect(text);
    
    return rect; 
}
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.