Используя QFontMetrics класс и его boundingRect класс, получить прямоугольник, используемый в строке при условии
// assumes myFont has been instantiated
QFontMetrics fm(myFont);
QRect bounds = fm.boundingRect("Some text here");
Сравните размер границ с областью, с которой, чтобы проверить, если строка будет соответствовать.
Если строка не подходит, я хотел бы знать длину подстроки, которая вписывается в этот прямоугольник
Если границы возвращенного прямоугольнику из boundingRect слишком велики, рекурсивно удалить символов до тех пор, пока ширина не окажется в вашем целевом прямоугольнике.
bool bFits = false;
QString str = "String to test boundary";
QFontMetrics fm(myFont);
QRect bounds;
do
{
bounds = fm.boundingRect(str);
// Assume testBoundary is the defined QRect of the area to hold the text
if(!testBoundary.contains(bounds) && (!str.isEmpty()) )
str.chop(1);
else
bFits = true;
}while(!bFits);
если строка делает нужным, то я хотел бы знать, ограничивающей высоту прямоугольника
Это просто высота возвращенного прямоугольнику от вызова boundingRect.
int height = bounds.height();
'QFontMetrics :: boundingRect' и эвристика? – peppe
Я могу создать бинарный поиск, подобный алгоритму, чтобы найти подстроку, которая подходит для использования boundingRect(), но я предполагаю, что она может быть очень неэффективной. – Borzh