Russian Qt Forum

Qt => Общие вопросы => Тема начата: spectre71 от Август 24, 2009, 09:15



Название: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: spectre71 от Август 24, 2009, 09:15
В данном режиме, текст должен переноситься посимвольно, однако пробелы не перносятся!
Ошибка разработчиков?


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: ритт от Август 24, 2009, 11:34
> однако пробелы не перносятся

уточни проблему


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: spectre71 от Август 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();
 


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: ритт от Август 24, 2009, 15:31
сейчас посмотрю...


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: ритт от Август 24, 2009, 15:52
...что-то нашёл
выкладывай компилябельный пример - проверю.
кстати, версия какая?


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: spectre71 от Август 24, 2009, 16:30
...что-то нашёл
выкладывай компилябельный пример - проверю.
кстати, версия какая?
4.5.2
Пример во вложении.


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: spectre71 от Август 24, 2009, 16:47
1) Возможно нужен еще один флаг типа
QTextOption::WrapAnyPosition
а
QTextOption::WrapAnywhere - сохранить как есть и правильно документировать.

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



Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: ритт от Август 24, 2009, 17:08
т.е. сам уже разобрался?
а то я обнаружил, что мне нужно qt полностью пересобрать - заскочил сюда сообщить об этом...


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: spectre71 от Август 24, 2009, 17:17
т.е. сам уже разобрался?
Не, QTextOption::WrapAnyPosition такого флага нет, это я для примера написал что не плохо бы добавить.
QTextOption::WrapAnywhere - если я правильно понял доку и должен работать как перенос по позициям, но возможно стоит оставить его как есть и соответственно документировать + добавить новый флаг QTextOption::WrapAnyPosition.


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: ритт от Август 24, 2009, 19:08
в общем, дрыхнуть пойду - оставлю пересобираться кутэ, а завтра посмотрю внимательно.
предварительно скажу, что очень похоже на багу. можешь пока отрапортовать троллям - если подтвердят багу, это сильно увеличит шансы на исправление в 4.6...


Название: Re: QTextOption::setWrapMode(QTextOption::WrapAnywhere) - не правильно работает
Отправлено: ритт от Август 25, 2009, 19:09
помучал-помучал...и бросил - надоело...
нашёл где конкретно неправильно обрабатываются разрывы, но как исправить сходу не понял - там _такая_ каша...
с лайнбриком мне уже доводилось сталкиваться, но тут что-то совсем уфф...

рапортуй, приложи данный testcase (но добавь в него коммент о том, *что* ожидается увидеть при правильной работе)