Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: numlock от Август 13, 2010, 10:58



Название: QFontMetricsF::boundingRect() работает неверно
Отправлено: numlock от Август 13, 2010, 10:58
Здравствуйте.

Я пытаюсь вычислить высоту прямоугольника определенной ширины в который вписан текст, перенесенный по словам. Текст пишется шрифтом font на QGraphicsItem. Я использую QFontMetricsF::boundingRect, в который передаю прямоугольник QRectF(0, 0, width, 0), переменную int flags = Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap и сам текст (см. код внизу поста). Текст точно не влезает в заданную ширину, но функция, почему-то всегда возвращает прямогуольник высотой в одну строку. В чем может быть дело?

Код
C++ (Qt)
QFontMetricsF metrics = QFontMetricsF(font);
int flags = Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap;
qreal height = metrics.boundingRect(QRectF(0, 0, width, 0), flags, text()).height();
 

P.S. Текст точно можно перенести. Там есть пробелы, по которым это можно сделать.


Название: Re: QFontMetricsF::boundingRect() работает неверно
Отправлено: BRE от Август 13, 2010, 11:18
Код
C++ (Qt)
#include <QApplication>
#include <QFontMetrics>
#include <QStringList>
#include <QDebug>
 
int main(int argc, char** argv)
{
   QApplication app( argc, argv );
 
   QStringList args = app.arguments();
   if( args.size() < 2 )
   {
       qDebug() << "Allo";
       return -1;
   }
 
   QString text = args.join( " " );
   QFont font( app.font() );
   QFontMetricsF metrics = QFontMetricsF( font );
   int flags = Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap;
   qreal height = metrics.boundingRect( QRectF(0, 0, 100, 0), flags, text ).height();
 
   qDebug() << height;
 
   return 0;
}
 

Цитировать
[...]$ ./test asdasdasd
14
[...]$ ./test asdasdasd asdasdasdasdasdasd
27
[...]$ ./test asdasdasd asdasdasdasdasdasd asdasdasd asd asd asd asdasdasdas asd asd
79