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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как лучше всего проеобразовать HTML текст в обычный  (Прочитано 7945 раз)
Hort
Гость
« : Июль 08, 2008, 17:44 »

Есть у меня база данных с полями QString (в них HTML текст). Собираюсь просматривать содержимое базы в QTreeView, но только надо чтобы текст отображался в нем без тегов, т.е. как обычный текст (типа для быстрой навигации, а при нажатии - в соседнем окне можно было бы расширенно редактировать HTML в QTextEdit). Так вот возникает вопрос каким способом преобразовать HTML данные в обычный текст.
- Создать буфер QTextDocument* в классе, в методе QVariant data() в него записывать строку через setHtml() и читать через toPlainText(), получившийся текст возвращать в QTreeView.
Вороде както сильно громоздко и наверно ресурсоемко.
- Или может сразу создавать два поля QString в базе данных, в одно записывать HTML текст, а в другое обычный для QTreeView (сохраняться они будут сразу из QTextEdit при редактировании через toPlainText() и toHtml())
- Или может сразу при открытии базы создавать второе поле для простого текста через тотже самый QTextDocument*, чтобы не хранить в базе лишние данный.

Может ктонибуть знает менее ресурсоемкий способ и более экономичный. Напрмиер может фукцию какуюто, которая сразу на лету преобразует QString с HTML в QString с обычным текстом?
« Последнее редактирование: Июль 08, 2008, 17:47 от Hort » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июль 08, 2008, 18:07 »

Как вариант написать делегат.

см. QAbstractItemView::setItemDelegate, а также examples
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Hort
Гость
« Ответ #2 : Июль 08, 2008, 18:20 »

Как вариант написать делегат.

см. QAbstractItemView::setItemDelegate, а также examples
надо несовсем это. данные в QTreeView будут представляться только в формате обычного текста. HTML нужен будет только при редактировании. и все равно както надо ж будет его преобразовывать в обычный.  можно былоб попытаться отрисовывать HTML с помощью делегата, но для компактности лучше если там будет обычный текст
Записан
ритт
Гость
« Ответ #3 : Июль 08, 2008, 20:05 »

а как насчёт удаления регэкспом кусков текста между < и > (включительно) и замены <br> на \n ? - получится самый настоящий текст Улыбающийся
Записан
Hort
Гость
« Ответ #4 : Июль 08, 2008, 20:29 »

а как насчёт удаления регэкспом кусков текста между < и > (включительно) и замены <br> на \n ? - получится самый настоящий текст Улыбающийся
а можно поподробнее? ато у меня много чево еще не на слуху, и что такое регэксп я честно говоря не знаю Смеющийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Июль 09, 2008, 09:58 »

QRegExp в ассистенте почитай, там все легко и просто, если приложить немного усилий.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #6 : Июль 10, 2008, 01:58 »

QTextEdit text;
text.setHtml("<br>asdfasdf<b>asdfasdf</b><br>");
QMessageBox::warning(this,"Asdf",text.toPlainText());
Записан
Hort
Гость
« Ответ #7 : Июль 10, 2008, 02:21 »

QTextEdit text;
text.setHtml("<br>asdfasdf<b>asdfasdf</b><br>");
QMessageBox::warning(this,"Asdf",text.toPlainText());
все это надо делать в фоновом режиме. поэтому QTextEdit не очень подходит.
Записан
crocus
Гость
« Ответ #8 : Июль 10, 2008, 02:42 »

Попробуй может данные считывать в QByteArray сначала (как в /demos/textedit). И посмотри на QTextDocument.
Записан
Hort
Гость
« Ответ #9 : Июль 10, 2008, 02:46 »

Попробуй может данные считывать в QByteArray сначала (как в /demos/textedit). И посмотри на QTextDocument.
я так понимаю QTextDocument этож не виджет. т.е. я могу например создать статически в конструкторе своего класса QTextDocument (чтобы после выхода из конструктора он разрушился как обычная переменная)?
Записан
crocus
Гость
« Ответ #10 : Июль 10, 2008, 02:57 »

Конечно.
Цитировать
The QTextDocument class holds formatted text ...
Записан
Alexandr Az
Гость
« Ответ #11 : Июль 10, 2008, 11:54 »

А в HTML строго определена структура?.

Я бы рассматривал HTML как XML и через дом модель грепал что мне нужно.
Правда есть недостаток, сам HTML должен быть до ужаса "правильным"
Записан
Hort
Гость
« Ответ #12 : Июль 10, 2008, 13:39 »

А в HTML строго определена структура?.

Я бы рассматривал HTML как XML и через дом модель грепал что мне нужно.
Правда есть недостаток, сам HTML должен быть до ужаса "правильным"
сделал модель, в которой два текстовых поля - одно полное HTML, второе сокращенное до 1 строки с обычным текстом. когда сохраняется из QTextEdit то записываются сразу два поля. В файл на диске будет сохраняться только HTML а читаться и заноситься при открытии файла во второе поле будет через QTextDocument. Как мне показалось, это наиболее оптимальный вариант в плане быстродействия БД.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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