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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT4. QtextBrowser игнорирует впередистоящие пробелы, редиска!  (Прочитано 5747 раз)
Пытон
Гость
« : Декабрь 04, 2011, 11:57 »

Код
Python
mywindow.mytextbrowser.insertHtml("       I need spaces!!!")
выкинет пробелы вначале и вставит только "I need spaces!!!"

Как побороть такое мерзопакостное поведение? Мне нужны эти пробелы!
Записан
BuRn
Гость
« Ответ #1 : Декабрь 04, 2011, 12:03 »

char *pstr;
for(pstr=str;*pstr==' ';pstr++);
for(;*pstr;pstr++,str++)
   *str=*pstr;
str[1]='\0';
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #2 : Декабрь 04, 2011, 12:46 »

Код
Python
mywindow.mytextbrowser.insertHtml("       I need spaces!!!")
выкинет пробелы вначале и вставит только "I need spaces!!!"

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

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Странник
Гость
« Ответ #3 : Декабрь 04, 2011, 13:40 »

это все фишки HTML. помимо приведенного выше совета можете попробовать поместить ваш текст в тэг <pre> - тогда форматирование будет сохранено. не помню, правда, поддерживается ли этот тэг в QTextBrowser, но по логике вещей должен.
Записан
Пытон
Гость
« Ответ #4 : Декабрь 04, 2011, 14:27 »

Дело в том, что строка текста вставляется в QtextBrowser из текстового файла. Строки берутся из него порциями. Так надо. И я не могу заранее знать сколько там пробелов в начале порции может оказаться, а может и не оказаться. Вариант с nbsp не очень-то подходит. Как-то не радует высчитывать сколько там пробелов в начале и подставлять нужное кол-во nbsp во вставляемую строку.

Попробую <pre>.
Записан
Пытон
Гость
« Ответ #5 : Декабрь 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" будет отображено без начального пробела!

Вот, блин, засада!
« Последнее редактирование: Декабрь 04, 2011, 17:18 от Пытон » Записан
Bepec
Гость
« Ответ #6 : Декабрь 05, 2011, 07:28 »

Простое решение - заменяй в считанной из файла строке все пробелы на &nbsp;

Функция replace тебе поможет.
Записан
andrew.k
Гость
« Ответ #7 : Декабрь 05, 2011, 09:25 »

Похоже на баг QTextBrowser. Решил проверить, сначала не заметил даже, что реально глюк)
С тегом <b> такого нет.

Я делал подобное в QTextEdit. Таких проблем у меня не было. Может в нем нет этого косяка.
« Последнее редактирование: Декабрь 05, 2011, 09:30 от andrew.k » Записан
andrew.k
Гость
« Ответ #8 : Декабрь 05, 2011, 09:29 »

Если после закрывающего тега </font> вставить что-нибудь нейтральное, например пробел. То баг вылечивается.

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

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

Таким образом можешь поочередно использовать insertHtml и insertPlainText.
« Последнее редактирование: Декабрь 05, 2011, 09:31 от andrew.k » Записан
andrew.k
Гость
« Ответ #9 : Декабрь 05, 2011, 10:23 »

Стоит отметить, что "\n" в HTML заменяется на пробел, я это забыл.
Если не устраивает надо искать какой-то другой невидимый символ.
Записан
Пытон
Гость
« Ответ #10 : Декабрь 05, 2011, 16:46 »

Видимо, буду использовать &nbsp и replace. Тексты у меня небольшие, лишняя обработка строк не будет заметна для скорости вывода.

Спасибо ответившим. А если кто-нибудь что-нибудь ещё интересное знает по этому поводу, сообщайте.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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