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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает  (Прочитано 7414 раз)
spectre71
Гость
« : Август 24, 2009, 09:15 »

В данном режиме, текст должен переноситься посимвольно, однако пробелы не перносятся!
Ошибка разработчиков?
Записан
ритт
Гость
« Ответ #1 : Август 24, 2009, 11:34 »

> однако пробелы не перносятся

уточни проблему
Записан
spectre71
Гость
« Ответ #2 : Август 24, 2009, 14:49 »

> однако пробелы не перносятся
уточни проблему
  opt.setWrapMode(QTextOption::WrapAnywhere); !!!

На картинках последовательный ресайз. Красным обведены 4 пробела.
1) Они не переносятся посимвольно
2) В этом режиме, при переносе, они не могут появится в начале строки, только после видимого символа(видно на ресайзе от 3 к 4)

Код
C++ (Qt)
...
 QFont font1 = font();
 font1.setFamily(QString::fromUtf8("Courier New"));
 setFont(font1);
...
...
...
 
 QFontMetrics FM(font(), pixmap);
 int TabWidth = FM.width('0')*8;
 QRect r = rect();
 QTextOption opt;
 String text = "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789    123456789\n\n 123\t1  23\t123\t123123456789 123456789 123456789\t123456789\t\t123456789\t\t\t\t123456789 123456789";
...
...
 painter.begin(pixmap);
 painter.fillRect(r, Qt::white);
 painter.setPen(Qt::black);
 painter.setFont(font());
 opt.setAlignment(Qt::AlignLeft);
 opt.setWrapMode(QTextOption::WrapAnywhere);
 opt.setFlags(QTextOption::ShowTabsAndSpaces);
 opt.setTabStop(TabWidth);
 painter.drawText(r, text, opt);
 r.setHeight(INT_MAX);
 r = FM.boundingRect(r, Qt::TextExpandTabs|Qt::TextWrapAnywhere, text, TabWidth);
 painter.drawRect(r);
 painter.end();
 
Записан
ритт
Гость
« Ответ #3 : Август 24, 2009, 15:31 »

сейчас посмотрю...
Записан
ритт
Гость
« Ответ #4 : Август 24, 2009, 15:52 »

...что-то нашёл
выкладывай компилябельный пример - проверю.
кстати, версия какая?
Записан
spectre71
Гость
« Ответ #5 : Август 24, 2009, 16:30 »

...что-то нашёл
выкладывай компилябельный пример - проверю.
кстати, версия какая?
4.5.2
Пример во вложении.
Записан
spectre71
Гость
« Ответ #6 : Август 24, 2009, 16:47 »

1) Возможно нужен еще один флаг типа
QTextOption::WrapAnyPosition
а
QTextOption::WrapAnywhere - сохранить как есть и правильно документировать.

2) В QTextOption не хватает существенной моды:
Интерпритировать Tab как Spaces соответственно методы:
void setTabStopSpaces(int count)
void setTabSpacesArray (QList<int> tabSpaces)
итд...
В этом случае можно делать частичный перенос табуляций (как по пробелам).
Это очень важно при отображении текстовых данных в виде таблиц выровненных через табуляции.
Тогда при врапинге сохраняется колоночное выравнивание, естественно только для моношеринных шрифтов.

Записан
ритт
Гость
« Ответ #7 : Август 24, 2009, 17:08 »

т.е. сам уже разобрался?
а то я обнаружил, что мне нужно qt полностью пересобрать - заскочил сюда сообщить об этом...
Записан
spectre71
Гость
« Ответ #8 : Август 24, 2009, 17:17 »

т.е. сам уже разобрался?
Не, QTextOption::WrapAnyPosition такого флага нет, это я для примера написал что не плохо бы добавить.
QTextOption::WrapAnywhere - если я правильно понял доку и должен работать как перенос по позициям, но возможно стоит оставить его как есть и соответственно документировать + добавить новый флаг QTextOption::WrapAnyPosition.
Записан
ритт
Гость
« Ответ #9 : Август 24, 2009, 19:08 »

в общем, дрыхнуть пойду - оставлю пересобираться кутэ, а завтра посмотрю внимательно.
предварительно скажу, что очень похоже на багу. можешь пока отрапортовать троллям - если подтвердят багу, это сильно увеличит шансы на исправление в 4.6...
Записан
ритт
Гость
« Ответ #10 : Август 25, 2009, 19:09 »

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

рапортуй, приложи данный testcase (но добавь в него коммент о том, *что* ожидается увидеть при правильной работе)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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