Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Hort от Июль 08, 2008, 17:44



Название: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: 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 с обычным текстом?


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: pastor от Июль 08, 2008, 18:07
Как вариант написать делегат.

см. QAbstractItemView::setItemDelegate, а также examples


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: Hort от Июль 08, 2008, 18:20
Как вариант написать делегат.

см. QAbstractItemView::setItemDelegate, а также examples
надо несовсем это. данные в QTreeView будут представляться только в формате обычного текста. HTML нужен будет только при редактировании. и все равно както надо ж будет его преобразовывать в обычный.  можно былоб попытаться отрисовывать HTML с помощью делегата, но для компактности лучше если там будет обычный текст


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: ритт от Июль 08, 2008, 20:05
а как насчёт удаления регэкспом кусков текста между < и > (включительно) и замены <br> на \n ? - получится самый настоящий текст :)


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: Hort от Июль 08, 2008, 20:29
а как насчёт удаления регэкспом кусков текста между < и > (включительно) и замены <br> на \n ? - получится самый настоящий текст :)
а можно поподробнее? ато у меня много чево еще не на слуху, и что такое регэксп я честно говоря не знаю ;D


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: Пантер от Июль 09, 2008, 09:58
QRegExp в ассистенте почитай, там все легко и просто, если приложить немного усилий.


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: IGHOR от Июль 10, 2008, 01:58
QTextEdit text;
text.setHtml("<br>asdfasdf<b>asdfasdf</b><br>");
QMessageBox::warning(this,"Asdf",text.toPlainText());


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: Hort от Июль 10, 2008, 02:21
QTextEdit text;
text.setHtml("<br>asdfasdf<b>asdfasdf</b><br>");
QMessageBox::warning(this,"Asdf",text.toPlainText());
все это надо делать в фоновом режиме. поэтому QTextEdit не очень подходит.


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: crocus от Июль 10, 2008, 02:42
Попробуй может данные считывать в QByteArray сначала (как в /demos/textedit). И посмотри на QTextDocument.


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: Hort от Июль 10, 2008, 02:46
Попробуй может данные считывать в QByteArray сначала (как в /demos/textedit). И посмотри на QTextDocument.
я так понимаю QTextDocument этож не виджет. т.е. я могу например создать статически в конструкторе своего класса QTextDocument (чтобы после выхода из конструктора он разрушился как обычная переменная)?


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: crocus от Июль 10, 2008, 02:57
Конечно.
Цитировать
The QTextDocument class holds formatted text ...


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: Alexandr Az от Июль 10, 2008, 11:54
А в HTML строго определена структура?.

Я бы рассматривал HTML как XML и через дом модель грепал что мне нужно.
Правда есть недостаток, сам HTML должен быть до ужаса "правильным"


Название: Re: Как лучше всего проеобразовать HTML текст в обычный
Отправлено: Hort от Июль 10, 2008, 13:39
А в HTML строго определена структура?.

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