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
  опции профиля:
сообщение 20.11.2011, 19:28
Сообщение #2


Студент
*

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

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




Репутация:   0  


В версии 0.1.4 добавилась функция печати:
void ElectronicLibrary::slotPrint()
{
    QPrinter printer;
    QPrintDialog *pPrintDialog = new QPrintDialog(&printer);

    if(pPrintDialog->exec() == QDialog::Accepted)
    {
        QPainter painter(&printer);
        QRect r(painter.viewport());

        if(ListPages.count() > 0)
        {

            for(int i = 0; i < ListPages.count(); i++)
            {
                TextBook->setHtml(ListPages.at(i));
                painter.drawText(r, TextBook->toPlainText());
                printer.newPage();
            }

            painter.end();
        }

        TextBook->setHtml(ListPages.at(0));
        sbNumberPage.setValue(1);
    }

    delete pPrintDialog;
}
Такой вариант печатает простой текст, без форматирования и изображений.

Все изменения:
Цитата
- Добавлен модуль тестирования "LabFreeTech Тест", для проверки знаний;
- Добавлена функция печати книги;
- Добавлена возможность выравнивания и изменения регистра текста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




RSS Текстовая версия Сейчас: 28.3.2024, 21:24