Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Пытон от Декабрь 04, 2011, 11:57



Название: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: Пытон от Декабрь 04, 2011, 11:57
Код
Python
mywindow.mytextbrowser.insertHtml("       I need spaces!!!")
выкинет пробелы вначале и вставит только "I need spaces!!!"

Как побороть такое мерзопакостное поведение? Мне нужны эти пробелы!


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: BuRn от Декабрь 04, 2011, 12:03
char *pstr;
for(pstr=str;*pstr==' ';pstr++);
for(;*pstr;pstr++,str++)
   *str=*pstr;
str[1]='\0';


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: panAlexey от Декабрь 04, 2011, 12:46
Код
Python
mywindow.mytextbrowser.insertHtml("       I need spaces!!!")
выкинет пробелы вначале и вставит только "I need spaces!!!"

Как побороть такое мерзопакостное поведение? Мне нужны эти пробелы!
Код
Python
mywindow.mytextbrowser.insertHtml("       I need spaces!!!")


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: Странник от Декабрь 04, 2011, 13:40
это все фишки HTML. помимо приведенного выше совета можете попробовать поместить ваш текст в тэг <pre> - тогда форматирование будет сохранено. не помню, правда, поддерживается ли этот тэг в QTextBrowser, но по логике вещей должен.


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: Пытон от Декабрь 04, 2011, 14:27
Дело в том, что строка текста вставляется в QtextBrowser из текстового файла. Строки берутся из него порциями. Так надо. И я не могу заранее знать сколько там пробелов в начале порции может оказаться, а может и не оказаться. Вариант с nbsp не очень-то подходит. Как-то не радует высчитывать сколько там пробелов в начале и подставлять нужное кол-во nbsp во вставляемую строку.

Попробую <pre>.


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: Пытон от Декабрь 04, 2011, 16:56
С прискорбием вынужден сообщить, что тег <pre> не подходит. При его использовании виджет перестаёт делать выравнивание текста по собственным границам. Весь текст выстраивается в одну строку и появляется горизонтальный бегунок. Не пойдёт!

Можно было бы использовать insertPlainText, но мне нужно вставлять определённые отрывки текста другим цветом. Если часть текста вставлять insertPlainText, а часть insertHtml, то они друг с другом не дружат.

Допустим, так:
Код
Python
mylist=["one", "-two", "three", " four"]
for x in mylist:
   if x[0] == "-": myform.MytextBrowser.insertHtml("<font color = red>"+x+"</font>")
   else: myform.MytextBrowser.insertPlainText(x)
 

В данном случае слово " four" напечатается с пробелом, но после первого срабатывания insertHtml ВЕСЬ последующий текст, не взирая на закрывающий тег, какого-то лешего, станет красным.

Если вместо insertPlainText использовать тоже insertHtml, то всё будет как надо: красным будет только слово "-two". Но слово " four" будет отображено без начального пробела!

Вот, блин, засада!


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: Bepec от Декабрь 05, 2011, 07:28
Простое решение - заменяй в считанной из файла строке все пробелы на &nbsp;

Функция replace тебе поможет.


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: andrew.k от Декабрь 05, 2011, 09:25
Похоже на баг QTextBrowser. Решил проверить, сначала не заметил даже, что реально глюк)
С тегом <b> такого нет.

Я делал подобное в QTextEdit. Таких проблем у меня не было. Может в нем нет этого косяка.


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: andrew.k от Декабрь 05, 2011, 09:29
Если после закрывающего тега </font> вставить что-нибудь нейтральное, например пробел. То баг вылечивается.

Думаю тебя устроит вставка \n. В хтмл перенос строки не обрабатывается, никак не повлияет на результат.
Зато пофиксит баг)

Т.е. вот таким образом.
Код
C++ (Qt)
ui->textBrowser->insertHtml("<font color=red>red text</font>\n");

Таким образом можешь поочередно использовать insertHtml и insertPlainText.


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: andrew.k от Декабрь 05, 2011, 10:23
Стоит отметить, что "\n" в HTML заменяется на пробел, я это забыл.
Если не устраивает надо искать какой-то другой невидимый символ.


Название: Re: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!
Отправлено: Пытон от Декабрь 05, 2011, 16:46
Видимо, буду использовать &nbsp и replace. Тексты у меня небольшие, лишняя обработка строк не будет заметна для скорости вывода.

Спасибо ответившим. А если кто-нибудь что-нибудь ещё интересное знает по этому поводу, сообщайте.