Привет, ЛОР.
В прошлой теме я делился своим огорчением о том, как реализован список форматов в QTextDocumentWriter (напомню, что имена форматов – это такая отдельная сущность, не расширения, и не MIME-типы). В частности, прозвучало предложение @Saakx вынести сопоставление в отдельный конфиг. Сама по себе идея хорошая, но некоторые соображения сводят её полезность к нулю.
Первое. Пользователь всё равно свой формат не сможет добавить, они захардкожены в QTextDocumentWriter, это даже не плагины. Смогут добавить либо разработчики Qt, либо те, кто её патчат. Соответственно, и в мой код тоже можно патчик на одну строку внести, я постарался сделать это место как можно более прозрачным.
Второе. За обозримое время существования QTextDocumentWriter список форматов практически не поменялся. Только markdown добавился.
Третье и самое интересное. С точки зрения содержимого QTextDocument, которое создаётся в программе, нельзя просто так взять и заменить один формат на другой (картинку с Боромиром дорисуйте сами). Особенно в том, что касается таблиц. К примеру, в plaintext таблицы с более чем одним столбцом выдаются просто как мешанина из строк (как я понял, одна ячейка – одна строка, и пофиг, сколько там было столбцов и строк в таблице).
Программисты, заставшие DOS, конечно, умеют и в plaintext таблицы форматировать, но разработчики Qt то ли не овладели древней магией, то ли просто не захотели заморачиваться (такое форматирование и впрямь создаёт разные противные ограничения, самое безобидное из которых – привязка к фиксированной максимальной ширине документа в символах). Поэтому если создаваемый отчёт завязан на таблицы – plaintext надо либо исключать из списка поддерживаемых форматов, либо делать для TXT собственную реализацию, не завязанную на QTextDocumentWriter.
Не столь фатальный, но противный нюанс представляет собой отличие HTML от ODF. Ширину столбцов можно задавать либо в пикселях, либо в процентах от общей ширины таблицы. Так вот, в HTML уродливо выглядит первый вариант, в ODF – второй. Не перепутайте. Для себя я сделал вывод, что при создании документа сначала надо запросить у пользователя выбор формата, а потом уже заполнять QTextDocument, в нужных местах оглядываясь на формат. В исходнике я эту подстройку пока не сделал, но планирую.