crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Программа для создания электронных книг, Обсуждение программы и кода
xwicked
  опции профиля:
сообщение 8.8.2011, 20:36
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте! Вот вторая моя программа, написанная на C++(Qt). Выношу на обсуждение её и исходник - 0.0.7.

Ссылка на SourceForge.net. Код под GNU GPL v2 - OpenSource.

Она предназначена для создания электронных книг, с централизованным хранением в базе данных SQLite3.

Этот код публикуется впервые. Его не было нигде, включая репозиторий программ Sisyphus от дистрибутива AltLinux. Там был только Клёст-кроссворд(0.1.9, 0.2.0). Комментируем Windows-версия.

Описание:
Страница книги представляет собой одну переменную QString Page.
Текст книги отображается в компоненте QTextEdit TextBook.
Текст в компоненте TextBook имеет форматирование документа HTML. Поэтому редактирование текста страницы осуществляется редактированием html-кода.

Стандартное сохранение идёт в базу данных. Но есть и возможность экспорта в файл.

Изображения хранятся, как в обычной html-странице - отдельно от текста в папке "temp". В тексте указывается путь.
При загрузке книги - во всех страницах происходит перезапись тегов изображения "<img src=":
      QString str1;
      int iFirst,
          iLast,
          iLength,
          iSearch;
          for(int i = 0; i < ListPages.count(); i++)
              {
                  str1 = ListPages.at(i);
                      if(str1.indexOf("<img src=\"") != -1)
                          {
                               int z = 1;
                               iSearch = 0;
                                   while(str1.indexOf("<img src=\"", iSearch) != -1)
                                       {
                                                if(z == 1) iSearch = -1;
                                                if(iSearch == -1)
                                                    {
                                                         iFirst = str1.indexOf("<img src=\"", 0);
                                                         iLast = str1.indexOf("/temp/Image", 0);
                                                         z++;
                                                    }
                                                else
                                                    {
                                                         iFirst = str1.indexOf("<img src=\"", iSearch);
                                                         iLast = str1.indexOf("/temp/Image", iFirst);
                                                    }
                                            iFirst += 10;
                                            iLength = iLast - iFirst;
                                            str1.remove(iFirst, iLength);
                                            str1.insert(iFirst, "/tmp/xwel");
                                            ListPages.replace(i, str1);
                                            iSearch = iLast;
                                       }
                          }
              }
Это актуально для переносимой версии. В этом случае необходимо будет поменять строку:
str1.insert(iFirst, "/tmp/xwel");
на
str1.insert(iFirst, QApplication::applicationDirPath());//Текущая папка, из которой запущено приложение
Пароль книги хранится в открытом виде в переменной QString Password.
Список страниц хранится в списке строк QStringList ListPages.
Изображения хранятся в массиве QByteArray ListImages[255]. Здесь видно, что изображений на всю книгу 255.

Сохранение в базу происходит обычными SQL-запросами:
      strBook = "DROP TABLE Table" + sNumBook + ";";
      QueryBook.exec(strBook);
      strBook = "CREATE TABLE Table" + sNumBook + " (Pages VARCHAR, Images BLOB);";
      QueryBook.exec(strBook);
      ...
      //Сохранение страниц
      if(ListPages.count() != 0)
          for(int i = 0; i < ListPages.count(); i++)
              {
                 QueryBook.prepare("INSERT INTO Table" + sNumBook + " (Pages) VALUES (?);");
                 QueryBook.bindValue(0, ListPages.at(i));
                 QueryBook.exec(/*strBook*/);
              }
      //Сохранение изображений
          for(int i = 0; i < 75; i++)//Здесь видно - что сохраняются только 75 изображений(!) из 255 :(
              {
                    if(ListImages[i].count() != 0)
                       {
                          QueryBook.prepare("INSERT INTO Table" + sNumBook + " (Images) VALUES (?);");
                          QueryBook.bindValue(0, ListImages[i]);
                          QueryBook.exec(/*strBook*/);
                       }
                   else break;
       }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
xwicked
  опции профиля:
сообщение 17.8.2011, 21:42
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте!

В этой версии я сделал одно важное изменение, на которое хотел бы обратить Ваше особое внимание. Это функция "int slotChangeFont()". Там я копирую в переменную QString sText всё выделение:
sText = TextBook->textCursor().selection().toHtml();
Потом заменяю все вхождения модификаторов шрифта: "font-family:", "font-size:", "font-style:", "font-weight:" на значения из диалога шрифта.

Так вот, там должен быть способ в одну единственную строчку. Я даже нашёл его - записал в свою амбарную тетрадь, а сейчас найти не могу sad.gif . Прошу помочь в нахождении этого способа, так как "int slotChangeFont()" занимает не много не мало, аж 195 строк(!). Буду благодарен.

Исходный код + сборки.

Что изменилось:
Цитата
- Добавлены значки "Oxygen", распространяемые по лицензии GNU GPL;
- При редактировании шрифта, он изменяется теперь, не для всего текста страницы, а по частям(словам, предложениям, абзацами и т. д.);
- Улучшен импорт HTML-документов, включая копирование изображений, которые преобразуются в формат PNG;
- Изменена стандартная панель - добавлены несколько новых действий;
- Добавлена панель редактирования, в которой продублированы действия из меню "Редактирование", для более удобной работы.
- Счётчик страниц переместился со стандартной панели в строку состояния.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 27.8.2011, 20:49
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(xwicked @ 17.8.2011, 22:42) *
...
Так вот, там должен быть способ в одну единственную строчку. Я даже нашёл его ...
Вот он:
         QFont TextFont;
         TextFont = QFontDialog::getFont(&Accept, TextFont);
         QTextCharFormat tcf;
         tcf.setFont(TextFont);
         TextBook->textCursor().setCharFormat(tcf);
--------------------------
В версии 0.1.2, была реализована возможность добавления в базу данных библиотеки произвольной информации, в виде ссылок на отдельные файлы. Что представляет собой достаточно хорошее улучшение, так как преподавателю можно будет совершать меньше движений, при создании учебника.

Эта возможность позволит не только сократить время создания учебника, но и послужит отличным расширением возможностей программы, при использовании материалов, содержащихся в отдельных ссылках на файлы, как дополнение к создаваемому учебнику. Например, к книге о художнике, можно будет хранить галерею с изображениями(его работами) в разделе "Фотографии".

Все изменения:
Цитата
- Появилась возможность добавления дополнительной информации произвольного содержания, в виде ссылок на отдельные файлы;
- Добавлена возможность выбора пользователем варианта сохранения книги с паролем или без него;
- Добавлена защита режима редактирования программы отдельным паролем, с возможностью его будущего изменения;
- Добавлена возможность сохранения состояния показа инструментальных панелей после выхода из программы;
- Исправлена ошибка отсутствия изображений, при импорте книги из формата XWB;
- Исправлена ошибка неэкспортирования в форматы XWB, HTML, импортированной книги;
- Исправлена ошибка отсутствия расширения .txt, когда оно явно не указано, при экспорте в текстовый формат.
Исходник + сборки. Дабы быть уверенным в том, что файлы не побились, при закачке, я добавил текстовик с md5-контрольными суммами.
Git-репозиторий:
Цитата
git://klen-library.git.sourceforge.net/gitroot/klen-library/klen-library (read-only)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- xwicked   Программа для создания электронных книг   8.8.2011, 20:36
- - Алексей1153   лично я просел на фразе "Этот код публикуется...   8.8.2011, 21:32
|- - xwicked   Цитата(Алексей1153 @ 8.8.2011, 21:32) ......   9.8.2011, 22:27
- - xwicked   Вот спекфайл, по которому можно собрать rpm-пакет ...   10.8.2011, 9:00
- - xwicked   Здравствуйте! Следующая версия программы 0.0....   12.8.2011, 21:11
- - xwicked   Теперь и счастливым обладателям дистрибутивов GNU ...   15.8.2011, 6:31
- - xwicked   Здравствуйте! В этой версии я сделал одно важ...   17.8.2011, 21:42
|- - xwicked   Цитата(xwicked @ 17.8.2011, 22:42) ... Та...   27.8.2011, 20:49
- - xwicked   Здравствуйте! Вот новая версия 0.1.1 - исходны...   18.8.2011, 21:08
- - xwicked   Здравствуйте! Версия 0.1.3 содержит добавление...   16.10.2011, 12:14
- - xwicked   В версии 0.1.4 добавилась функция печати: void Ele...   20.11.2011, 19:28
- - xwicked   Здравствуйте! Версия 0.1.8 //Изменение таблицы...   31.1.2012, 21:52
- - xwicked   В версии 0.1.9 добавлена работа с несколькими библ...   11.2.2012, 23:05
- - xwicked   Здравствуйте! Оптимизирована функция изменения...   17.2.2012, 21:40
- - xwicked   Здравствуйте! Новый код. Версия 1.0.0 - это пе...   3.4.2012, 20:10
- - xwicked   Здравствуйте! Новая версия. 1.0.5. Тут прошу ...   2.2.2013, 22:17


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 5:27