Ссылка на 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;
}