В принципе, несложно. Большинство форматов делалось просто copy-paste с формата bgl (bgl.hh и bgl.cc). Проще всего стартовать так: берёте исходники того формата, который по сути ближе всего к желаемому, или знакомому вам (хотя это не так важно). Дальше просто копируете их в новые .hh и .cc и переписываете всё, переименовывая и меняя всё в процессе. По крайней мере, личн мне так удобнее всего. Последний раз я так делал dictd, ушло часа 4.
Конечно, там с непривычки не сразу разобраться
Сразу несколько пояснений:
1) Словари создает функция makeDictionaries(), которая для каждого формата своя. Ей дается список путей, где надо искать словари. На выходе она дает список указателей (sptr) на готовые объекты словарей (базовый класс Dictionary). Если надо произвести индексацию, она дергает в процессе специальный объект, информируя об этом программу, чтобы та нарисовала об этом окошко скучающему пользователю.
2) Сейчас все словари используют один и тот же базовый класс индексации. Я рекомендую продолжать так делать, потому что часть проблем он берет на себя и обеспечивает корректное сворачивание при поиске.
3) Большинство запросов к словарям реализовано асинхронно. Там создается специальный объект (Request), который испускает сигналы, когда данные в нём появляются. Обычно создание этих данных происходит в другом треде. На практике это означает, что часть структур словаря надо защитить mutex'ами. Обычно это индексный файл и файл данных.
4) В словарях много кода написано не на Qt-шных класссах, а просто с STL или и вовсе libc. Просто когда-то планировался порт на симбиан, в будущем он может и состояться, как может состояться и порт на winmobile и тп. Сейчас Qt туда понемногу проникла, но все-таки она там больше гость до сих пор. Тут вам виднее, делайте, как вам удобнее. В принципе, желательно делать так же, как и другие словари реализованы, но они не всегда идеальны.
5) wstring. Отдельная история, но думаю, об этом надо упомянуть. Во всех системах размер wchar_t равен 4 байтам (UCS-4), кроме windows, в которой используется UTF-16. Весь код работы с wstring был изначально написан в расчете на UCS-4. При портировании на Windows в этом оказалась проблема, потому что UCS это не UTF. Полная эпопея описана в wstring.hh. Краткая версия: под Windows используется собственный wstring и wchar, под все остальные системы используются стандартные. При этом надо использовать gd::wstring и gd::wchar. Конец истории про wstring.
5) Подключение формата (вызов makeDictionaries()) находится в loaddictionaries.cc.
6) В коде, особенно в хедерах, множество комментариев - читайте их.
7) Задавайте любые вопросы.