Название: QGraphicsItem. Вывод текста в несколько линий. Отправлено: kamil от Ноябрь 03, 2015, 21:38 Задача: есть некоторая точка, около которой нужно вывести текст. Текст должен быть разделен на несколько линий (QString, места переноса строки \n, например: QString("line one\nline two\n...")).
По вертикали текст должен быть выровнен по точке. По горизонтали должен быть выровнен слева и располагаться немного справа, например: (http://zaripov.net/Untitled-1.png) Как это можно сделать средствами Qt? Наиболее близкое что можно сделать: Код: painter->drawText( rect, Qt::TextWordWrap | Qt::AlignVCenter, string ); Но проблема в rect. Как задать ей ширину и, самое главное, высоту, чтобы выровнялось по вертикали нормально? Название: Re: QGraphicsItem. Вывод текста в несколько линий. Отправлено: PimenS от Ноябрь 03, 2015, 22:12 Можно попробовать QRectF QFontMetricsF::boundingRect(const QString & text) const
Название: Re: QGraphicsItem. Вывод текста в несколько линий. Отправлено: Racheengel от Ноябрь 03, 2015, 23:54 Отцентрировать рект относительно точки и задать ему заведемо большие высоту и ширину. Тогда сработает.
Название: Re: QGraphicsItem. Вывод текста в несколько линий. Отправлено: kamil от Ноябрь 04, 2015, 11:56 Да, точно, тогда все норм.
Только сразу же возник еще один вопрос - с можно ли узнать еще до отрисовки, какая ширина-высота будет у текста? Там просто надо будет еще на фоне текста отрисовать полупрозрачный прямоугольник по размеру теста: (http://zaripov.net/2.png) Сейчас размер занимаемого текста можно узнать только после её отрисовки из последнего параметра функции: Код: painter->drawText( QRectF(10, -500, 1000, 1000), Qt::TextWordWrap | Qt::AlignVCenter, label, &labelRect ); (http://zaripov.net/1.png) Можно, конечно, просто еще раз сверху отрисовать текст, но зачем лишний раз отрисовывать, то, что можно отрисовать только раз. Или можно было бы использовать z-index, но тогда прямоугольник на фоне и текст придется разнести по разным QGraphicsItem, а этого не хотелось бы делать. Название: Re: QGraphicsItem. Вывод текста в несколько линий. Отправлено: RovingStone от Декабрь 04, 2015, 11:46 Если ещё актуально, можно использовать QFontMetrics, чтобы узнать размеры текста.
|