Russian Qt Forum
Ноябрь 26, 2024, 10:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: непонятки с QFontMetrics::size()  (Прочитано 6942 раз)
Exception13
Гость
« : Октябрь 06, 2009, 10:32 »

Надо узнать длину строки в пикселях.
делаю следующее:

данный код работеат в рамках объекта унаследованного от QWidget:

Код
C++ (Qt)
  QSize sz = fontMetrics().size(  Qt::TextSingleLine | Qt::TextExpandTabs,
                                                tr("\t\t\t\t") ,
                                                8 );
 

В результате он мне выдает sz.width() = 320, что характерно, изменение величины tabStops не приводит к какому - либо изменению конечного результата.
Почему то функция полностью игнорирует значение tabStops и всегда использует значение по умолчанию = 80 пикселам ?

В документации сказано следующее:

Цитировать
If Qt::TextExpandTabs is set in flags, then: if tabArray is non-null, it specifies a 0-terminated sequence of pixel-positions for tabs; otherwise if tabStops is non-zero, it is used as the tab spacing (in pixels).

Т.е. как я понял: если установлен флаг Qt::TextExpandTabs и значение tabArray = 0, и если значение tabStops отлично от 0, то оно используется в качестве размера для символа табуляции.
И пАчиму же оно не используется тогда ? это баг или фича такая ?
Записан
Makss
Гость
« Ответ #1 : Октябрь 06, 2009, 11:36 »

баг ето или фича - я незнаю, но длину текста узнаю так
QFontMetrics fm(font());
int len_px = fm.width("qwerty");
Записан
Exception13
Гость
« Ответ #2 : Октябрь 06, 2009, 11:53 »

а как тому же самому QFontMetrics::width дать понять что ширина символа '\t' составляет n пикселов ?

Посмотрел по исходам - все вызовы boundingRect, size, ведут к qt_format_text, в котором некоторые строчки кода, как мне показались - вообще ни о чем. Так, напрмер, при расчете длины с ранее указанными флагами, параметр tabStops - вообще не используется.
Записан
Makss
Гость
« Ответ #3 : Октябрь 06, 2009, 12:41 »

ну если я не ошибаюсь то \t или по другому просто табуляция зависит от настроек того же самого редактора в котором текст редактируется, ну и возможно от системы...
Все ведь видели и знают что если редактировать сначала в одном редакторе а потом тот же самый файл открыть в другом - получим разные по размерам табуляции или отступы от начала...
Записан
Exception13
Гость
« Ответ #4 : Октябрь 07, 2009, 09:01 »

Все ведь видели и знают что если редактировать сначала в одном редакторе а потом тот же самый файл открыть в другом - получим разные по размерам табуляции или отступы от начала...

ииии Непонимающий Улыбающийся

Что то мне другого способа пока не видится кроме как тупо глупо:
Код
C++ (Qt)
QString str = tr("\t\t\t\t");            // исходная строка
int tabCount = str_.count( QLatin1Char('\t') ); // узнаем количество табов в строчке
int myTabWidth = 8;                     // ширина моего таба в пикселях
int strWidth = fontMetrics().width( str ) -
  tabCount * ( fontMetrics().width(QString(QLatin1Char('\t'))) - myTabWidth );
 
Самое забавное:
fontMetrics().width(QLatin1Char('\t')) = 13, а
fontMetrics().width(QString(QLatin1Char('\t'))) = 80
Непонимающий вообще бредняк какой то Непонимающий
« Последнее редактирование: Октябрь 07, 2009, 09:55 от Exception13 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 20.