![]() |
*Теория*| храним форматируемый текст
вопрос такой: как можно быстро и удобно держать в памяти строчку форматированного текста (для последующей многократной отрисовки на DC), Строчек много, желательно экономить память. Подскажите варианты, плз.. Примеры:
1. включать в строчку управляющие символы, напр.: void <u>foo</u>(int); 2. хранить отдельно текст и его форматирование с указателями на диапазон символов. 3. хранить текст как что-то вроде метафайла (примитивами) |
Я бы выбрал первый вариант хранения. Список возможных тегов конечен и весьма не велик. Один раз написать библиотеку для отображения и дальше можно спокойно пользоваться.
Для более полного ответа нужно знать для чего это будет использоваться и с какой частотой будет изменяться текст. |
pva
Pango (отрисовщик gtk) применяет 1 и 2. То есть на вход ему можно подать текст с разметкой а-ля html, а он уже создаст внутри список атрибутов вида "символ с индексом x - символ с индексом y - атрибут такой-то". Либо можно дать неформатированный текст и самому задать список атрибутов. Отрисовывает соответственно по этому списку. Форматирование внутри строки неудобно по той причине, что при каждой отрисовке всё равно придётся парсить текст в аналог списка атрибутов. Так зачем делать одну и ту же работу дважды? |
pva
Хранить "на каком" уровне? Если Вы пишете, к примеру, "разукрашивальщик синтаксиса", то форматирование и текст хранятся отдельно. Но если Вы уже имеете такой компонент, а важно лишь хранить сам текст "вообще", то... XML-лизация рулит в последнее время. Кстати. Посмотрите, если будет время и желание, QSyntaxHightlighter (кажется так) в QT >3.1 |
Цель: разукрасить (как в QT, Swing) текст на контролах. Например, в статус баре написать: Итого: <b>1 024,768</b> (цифра - жирным) или построить дерево классов/методов с подсветкой названий методов: void <b>function</b>(arg_type) - чтобы было лучше видно, причём использовать один и тот же подход в обоих случаях. По поводу частоты изменения текста, всё-таки думаю, что текст будет меняться не часто (т.е. это не редактор с подсветкой), но часто отрисовываться. Количество таких "строчек" может достигать 10^6. Больше - вряд ли.
Код:
// для пояснения - пример варианта №1 |
pva
Я имел в виду "посмотрите, как огранизован" :-) Коды открыты |
Извиняюсь, стормозил. Где можно коды посмотреть? А ещё я не понял, как контрол в Qt 4.0 узнаёт, что на экране рисовать? Например QTreeView: ссылается на QAbstractItemModel, а дальше - не понятно..
|
>> Где можно коды посмотреть?
Можно скачать опен-сурс У них сейчас как раз 4.2 вышла. http://www.trolltech.com/developer/downloads/qt/windows Для линукса - рядом Там \src\qt3support\text\q3syntaxhighlighter*.* AFAIK >> А ещё я не понял, как контрол в Qt 4.0 узнаёт, что на экране рисовать? Ух, это в двух словах не скажешь. |
Спасибо, проверим :)
|
Время: 17:50. |
Время: 17:50.
© OSzone.net 2001-