Russian Qt Forum

Разное => Объявления => Тема начата: xwicked от Июль 03, 2011, 16:11



Название: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Июль 03, 2011, 16:11
Здравствуйте! Вот вторая моя программа, написанная на C++(Qt). Выношу на обсуждение её и исходник - 0.0.7 (http://sourceforge.net/projects/klen-library/files/0.0.7/xwel-0.0.7-lin-src.tar.gz/download?use_mirror=citylan).

Ссылка (http://sourceforge.net/projects/klen-library) на SourceForge.net. Код под GNU GPL v2 - OpenSource.

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

Этот код публикуется впервые. Его не было нигде, включая репозиторий программ Sisyphus от дистрибутива AltLinux. Там был только Клёст-кроссворд(0.1.9, 0.2.0). Комментируем Windows-версия (http://sourceforge.net/projects/klen-library/files/0.0.7/electronic-library-beta-0.0.7-win-x86.exe/download?use_mirror=citylan).

Описание:
Страница книги представляет собой одну переменную 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;
 }


Название: RPM-дистрибутивы ОС Linux. Сборка программы
Отправлено: xwicked от Июль 11, 2011, 23:46
Пользователи ОС Linux на RPM-основе, которые захотят сделать свою сборку программы для размещения на собственном сайте или сервере, то вот спекфайл:
Цитировать
Summary: Qt program for creating and reading electronic books.

Summary(ru): Qt программа для создания и чтения электронных книг.

%define version 0.0.7

Group: Education

Name: klen-library

BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3

BuildArch: %ix86

Provides: klen-library

Release: alt1

Source: klen-library-%{version}.tar.gz

Url: http://labfreetech.org/index_e.html

Version: %{version}

License: GPLv2

Packager: LabFreeTech.org admin@labfreetech.org

%description
Qt program for creating and reading electronic books.
Supported features: - Creation of a textbook; - Editing of the textbook; - Reading the textbook; - Adding / removing books from the database; - Editing the font of the textbook; - Export and import of books in the file.

%description -l ru
Qt программа для создания и чтения электронных книг.
Поддерживаемые функции: - Создание учебника; - Редактирование учебника; - Чтение учебника; - Добавление/удаление учебников из базы данных; - Редактирование шрифта учебника; - Экспорт и импорт учебников в файл.

%prep

%setup -q

%build
%make_build
#cp -f klen-library debian/klen/opt/klen-library/

%install

cp -Rv klen/ %buildroot/

#rm -rf $RPM_BUILD_ROOT


%clean

rm -rf $RPM_BUILD_ROOT

%files

/usr/bin/*
/usr/share/*

%post

test -e /usr/bin/xwel-0.0.7 || ln -s /usr/bin/xwel-0.0.7 /usr/bin/klen-library-0.0.7
test -e $HOME/Desktop/xwel.desktop || cp -r /usr/share/applications/xwel.desktop $HOME/Desktop/klen-library.desktop

%postun

test -L /usr/bin/klen-library-0.0.7 && rm -r /usr/bin/klen-library-0.0.7
test -e $HOME/Desktop/klen-library.desktop && rm -r $HOME/Desktop/klen-library.desktop
Он находится в архиве (http://sourceforge.net/projects/klen-library/files/0.0.7/klen-library-0.0.7.tar.gz/download?use_mirror=citylan), который специально подготовлен. Постараюсь ответить на все возникающие вопросы. Команда для сборки двоичного пакета:
Цитировать
$rpmbuild -bb /home/username/RPM/SPECS/xwel-0.0.7-alt.spec
Предварительно необходимо установить пакет rpm-build. 


Название: Клён-библиотека 0.0.8
Отправлено: xwicked от Июль 17, 2011, 21:38
Здравствуйте!

Следующая версия программы 0.0.8 (http://sourceforge.net/projects/klen-library/files/0.0.8/xwel-0.0.8-lin-src.tar.gz/download?use_mirror=citylan), 0.0.8-rpm (http://sourceforge.net/projects/klen-library/files/0.0.8/klen-library-0.0.8-rpm.tar.gz/download?use_mirror=citylan). Её ключевой особенностью является импорт html-файла. Вот функция:
Код
C++ (Qt)
void ElectronicLibrary::OpenHTMLFile()
{
    QString FileNameBook, str, sHTML;
    FileNameBook = QFileDialog::getOpenFileName(0, tr("Book import"), "", "*.html");
 
        if(FileNameBook == "") return;
        else
            {
                QFile ifile(FileNameBook);
                QTextStream istream(&ifile);
                float i = 0;//Величина %
                float ipt,//Численное значние "pt"
              iptc;//Отвечает за таблицу
                iptc = 0;
                ipt = 0;
                ifile.open(QIODevice::ReadOnly);
 
                    while(!ifile.atEnd())
                        {
                            str.append(istream.readLine());
                            str.append(" ");
                            sHTML.append(str);
 
                                if(str.indexOf("<TABLE") != -1) iptc = 1;//Начало таблицы
                                if(str.indexOf("/TABLE>") != -1) iptc = 2;//Конец таблицы
 
                            int j, iptc2;
                            QString s1,s2;
                            s1.clear();
                            s2.clear();
                            iptc2 = 0;
 
               //Поиск элемента обозначения шрифта
                            j = str.indexOf("font-size:");
 
//Если элемент найден и найдено вхождение "pt", то
                                if(j != -1 && str.indexOf("pt", j) != -1)
                                    {
                     //Добавление одной цифры, стоящей за "pt"
                                         s1.append(str.at(str.indexOf("pt", j) - 1));
 
//Если второй символ стоящий за первым числом не пробел, то
                                             if(str.at(str.indexOf("pt", j) - 2) != ' ')
                     //Добавить его как вторую цифру числа шрифта(ex. "14pt")
                         s2.append(str.at(str.indexOf("pt", j) - 2));
 
             //Соединить с первой цифрой в s1. Образовать число.
                                             if(s2 != "") s1.append(s2);
 
                                         bool bOk;
                                         ipt = s1.toFloat(&bOk);
//6pt = 113 = 0.885% от страницы
//16pt = 42 = 2.380% от страницы
//0.1375 - условный средний коэффициент % занимаемого значения 6pt на одной странице, формата A4
//Усреднённая формула нахождения % текущей строки от страницы, формата A4, относительно 6pt
                                         ipt = (ipt / 6) * 0.1375;
                                    }
 
//Поиск элемента обозначения шрифта другой формы
                                if(j == -1)
                                    {
                                        if(str.indexOf("FONT SIZE=1") != -1) j = 1 ;
                                        if(str.indexOf("FONT SIZE=2") != -1) j = 2 ;
                                        if(str.indexOf("FONT SIZE=3") != -1) j = 3 ;
                                        if(str.indexOf("FONT SIZE=4") != -1) j = 4 ;
                                        if(str.indexOf("FONT SIZE=5") != -1) j = 5 ;
                                        if(str.indexOf("FONT SIZE=6") != -1) j = 6 ;
                                        if(str.indexOf("FONT SIZE=7") != -1) j = 7 ;
 
                                            switch(j)//Вычисление процента
                                                {
                                                     case 1:
                                                         ipt = (8 / 6) * 0.1375;
                                                     case 2:
                                                         ipt = (10 / 6) * 0.1375;
                                                     case 3:
                                                         ipt = (12 / 6) * 0.1375;
                                                     case 4:
                                                         ipt = (14 / 6) * 0.1375;
                                                     case 5:
                                                         ipt = (18 / 6) * 0.1375;
                                                     case 6:
                                                         ipt = (24 / 6) * 0.1375;
                                                     case 7:
                                                         ipt = (36 / 6) * 0.1375;
                                                }
                                    }
 
                            i += ipt;//Суммирование процента
 
                                if(i >= 100)//Если набралось 100%
                                    {
                                        if(iptc == 0)//Если нет таблицы в конце страницы
                                            {
                                                 sHTML.append("</body></html>");
                                                 ListPages << sHTML;
                                                 sHTML.clear();
                                                 sHTML.append("<html><body>");
                                                 i = 0;
                                            }
                                        else
                                            {
       //Если таблица была закрыта на данной странице
                                                 if(iptc == 2)
                                                     {
                                                          sHTML.append("</body></html>");
                                                          ListPages << sHTML;
                                                          sHTML.clear();
                                                          sHTML.append("<html><body>");
                                                          i = 0;
                                                          iptc = 0;//Значение = таблиц нет
                                                     }
                                            }
                                    }
 
                            str.clear();
                        }
 
                    if(sHTML != "") ListPages << sHTML << "</body></html>";
 
                ifile.close();
 
                    if(gRegimeViewing == true) return;
}
Она производит разбивку на страницы, подсчитывая условное значение количества строк располагаемых на странице, формата A4. Была ещё задумка подсчитать количество символов в строке но, пока решил остановиться на таком варианте.

Разбивая страницы, она переносит всю таблицу на одну страницу до конца, даже, если таблица физически должна быть на 2-х или более страницах.

Импортируются пока только html-страницы, созданные в OpenOffice. Это делалось для того, чтобы преподаватели, у которых имеются методички в формате MSWord(*.doc) могли наиболее быстро перегнать своё пособие в мою программу.

Как Вам эта функция и есть ли возможность всё это максимально упростить? Благодарю за ответ.

P.S. Следующим сообщением я выложу архив для сборки deb-пакетов, дистрибутивов ОС Linux Debian, Ubuntu. :)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: m_ax от Июль 17, 2011, 21:44
Интересно)
Лично мне если нужно что-либо такое написать, использую LaTeX.
Ничего лучше для написания статей, книг и т.п. имхо, пока не придумали.


Название: Немножко не так :)
Отправлено: xwicked от Июль 22, 2011, 16:06
Интересно)
Лично мне если нужно что-либо такое написать, использую LaTeX.
Ничего лучше для написания статей, книг и т.п. имхо, пока не придумали.
При поверхностном обзоре моей программы может сложиться данная иллюзия.
Назначение программ далеко не одинаковое.

P.S. Благодарю за попытку сравнения Клён-библиотеки с LaTex. Ещё одна хорошая новость в адрес моей программы :)


Название: Re: Немножко не так :)
Отправлено: m_ax от Июль 22, 2011, 17:07
Интересно)
Лично мне если нужно что-либо такое написать, использую LaTeX.
Ничего лучше для написания статей, книг и т.п. имхо, пока не придумали.
При поверхностном обзоре моей программы может сложиться данная иллюзия.
Назначение программ далеко не одинаковое.

P.S. Благодарю за попытку сравнения Клён-библиотеки с LaTex. Ещё одна хорошая новость в адрес моей программы :)
Я не чего не имею против этого проекта, напротив)

Просто если мне нужно написать, скажем методичку, где будет куча формул, ссылок на литературу и т.п. то какие приимущества я получу от использования Вашей программы в сравнении с LaTeX?
Цели, как мне видятся у этих двух инструментов одни? Или я ошибаюсь?


Название: Re: Немножко не так :)
Отправлено: xwicked от Июль 22, 2011, 17:32
...
Я не чего не имею против этого проекта, напротив)

Просто если мне нужно написать, скажем методичку, где будет куча формул, ссылок на литературу и т.п. то какие приимущества я получу от использования Вашей программы в сравнении с LaTeX?
Цели, как мне видятся у этих двух инструментов одни? Или я ошибаюсь?
Думаю, в Вашем случае никаких преимуществ не будет, если Вы не преподаватель в образовательном учреждении.
В первую очередь нужно обратить внимание на использование базы данных для хранения методичек.


Название: Re: Немножко не так :)
Отправлено: m_ax от Июль 22, 2011, 17:43
...
Я не чего не имею против этого проекта, напротив)

Просто если мне нужно написать, скажем методичку, где будет куча формул, ссылок на литературу и т.п. то какие приимущества я получу от использования Вашей программы в сравнении с LaTeX?
Цели, как мне видятся у этих двух инструментов одни? Или я ошибаюсь?
Думаю, в Вашем случае никаких преимуществ не будет, если Вы не преподаватель в образовательном учреждении.
В первую очередь нужно обратить внимание на использование базы данных для хранения методичек.
Предположим, я преподователь в образовательном учереждении. И мне постоянно нужно писать всякие там методички и прочие учебн. пособия.
Вот я по привычке пишу всё в техе и сохраняю это всё на диске.
Зачем мне база данных? Я и так знаю где что лежит)
Ваша фишка, как я понял, в консолидированном управлении всеми документами и возможностью тут-же что-то в них править из одной программы?


Название: Совершенно верно
Отправлено: xwicked от Июль 22, 2011, 18:31
...
Предположим, я преподователь в образовательном учереждении. И мне постоянно нужно писать всякие там методички и прочие учебн. пособия.
Вот я по привычке пишу всё в техе и сохраняю это всё на диске.
Зачем мне база данных? Я и так знаю где что лежит)
Ваша фишка, как я понял, в консолидированном управлении всеми документами и возможностью тут-же что-то в них править из одной программы?
Именно. Вы знаете, где что лежит. Я сам видел работу преподавателей в колледже. Тут дело не в способностях, а в учебной нагрузке, при которой забываются достаточно простые вещи. Она призвана минимизировать работу по нахождению, правке и дальнейшем совершенствовании пособия; Чтобы избежать ситуаций по двойной работе или потере уже сделанной.

В MSWord не используются более 50% функций.
OOWrite на ненастроенной java - работает дольше двоичного исполняемого файла без виртуальных машин.
Клён-библиотека собирает минимум необходимых функций, которые будут абсолютно платформенно-независимы, чтобы не править ни строчки кода при переносе на другие платформы.


Название: Re: Совершенно верно
Отправлено: m_ax от Июль 22, 2011, 18:50
...
Предположим, я преподователь в образовательном учереждении. И мне постоянно нужно писать всякие там методички и прочие учебн. пособия.
Вот я по привычке пишу всё в техе и сохраняю это всё на диске.
Зачем мне база данных? Я и так знаю где что лежит)
Ваша фишка, как я понял, в консолидированном управлении всеми документами и возможностью тут-же что-то в них править из одной программы?
Именно. Вы знаете, где что лежит. Я сам видел работу преподавателей в колледже. Тут дело не в способностях, а в учебной нагрузке, при которой забываются достаточно простые вещи. Она призвана минимизировать работу по нахождению, правке и дальнейшем совершенствовании пособия; Чтобы избежать ситуаций по двойной работе или потере уже сделанной.

В MSWord не используются более 50% функций.
OOWrite на ненастроенной java - работает дольше двоичного исполняемого файла без виртуальных машин.
Клён-библиотека собирает минимум необходимых функций, которые будут абсолютно платформенно-независимы, чтобы не править ни строчки кода при переносе на другие платформы.
Идея хорошая)
Но мне не нравится, что Вы, фактически, навязываете свой редактор. Почему бы не дать возможность пользователю самому выбирать при этом ту программу для отображения и редактирования к которой он привык?
Сделать нечто подобное Git, в смысле) Некий менеджер по контролю документов)
А так, едва ли Клён-библиотека заинтересует массы)   


Название: Re: Совершенно верно
Отправлено: brankovic от Июль 22, 2011, 19:08
Сделать нечто подобное Git, в смысле) Некий менеджер по контролю документов)

тогда чем проводник + гуи клиент гита + любимый редактор не устраивают?


Название: Re: Совершенно верно
Отправлено: m_ax от Июль 22, 2011, 19:11
Сделать нечто подобное Git, в смысле) Некий менеджер по контролю документов)

тогда чем проводник + гуи клиент гита + любимый редактор не устраивают?
;D Да, тоже вот сейчас об этом подумал)

Хотя Git это несколько не совсем то.
Здесь имеется ввиду контроль множества различных дукументов, не связанных между собой. 


Название: Re: Совершенно верно
Отправлено: xwicked от Июль 22, 2011, 20:05
...
Идея хорошая)
Но мне не нравится, что Вы, фактически, навязываете свой редактор. Почему бы не дать возможность пользователю самому выбирать при этом ту программу для отображения и редактирования к которой он привык?
Сделать нечто подобное Git, в смысле) Некий менеджер по контролю документов)
А так, едва ли Клён-библиотека заинтересует массы)   
Самодостаточность - важный фактор.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: m_ax от Июль 22, 2011, 20:19
Цитировать
Самодостаточность - важный фактор.
Весьма сомнительный аргумент в отношении Вашей задумки)
Да и никакой самодостаточности никогда не хватит) Прогресс не стоит на месте.
Рискуете что Ваша программа будет востребована очень узким кругом лиц.



Название: Клён-библиотека 0.0.9
Отправлено: xwicked от Июль 24, 2011, 21:44
Теперь и счастливым обладателям дистрибутивов GNU / Linux Debian и его производным(Ubuntu), предоставилась возможность попробовать себя в качестве разработчиков ПО.

Новая версия электронной библиотеки 0.0.9 (http://sourceforge.net/projects/klen-library/files/0.0.9/xwel-0.0.9-lin-src.tar.gz/download?use_mirror=citylan), 0.0.9-rpm (http://sourceforge.net/projects/klen-library/files/0.0.9/klen-library-0.0.9-rpm.tar.gz/download?use_mirror=citylan), 0.0.9-deb (http://sourceforge.net/projects/klen-library/files/0.0.9/klen-library-0.0.9-deb.tar.gz/download?use_mirror=citylan).

Серьёзным изменением в данной версии является ускорение загрузки книги из базы данных. Это связано с выгрузкой изображений из базы на диск в папку. Сначала я не знал, как сделать лучше, поэтому сделал выгрузку по одному байту, что занимало большой промежуток времени.

При использовании объекта QImage - этот процесс уcкорился на моей тестовой машине раз в 20(!). Код ниже:
Код
C++ (Qt)
             for(int i = 0; i < 75; i++)
                 if(ListImages[i].count() != 0)
                     {
                         QString sNumImage;
                         QByteArray sByteImage;
                         sByteImage.clear();
                         sNumImage.setNum(i);
 
                             if(i >= 0 && i <= 9) sNumImage.insert(0,"0");
 
                         ifile.setFileName("/tmp/xwel/temp/Image" + sNumImage + ".png");
                         QDataStream sifile(&ifile);
                         uchar cdata;
                         ifile.open(QIODevice::WriteOnly);
                         sByteImage.append(ListImages[i]);
 
                             while(sByteImage.count() != 0)
                                 {
                                     cdata = uchar(sByteImage.at(0));
                                     sifile << cdata;
                                     sByteImage.remove(0, 1);
                                 }
 
                             if(i > SelectWordDialog->value()) SelectWordDialog->setValue(i);
 
                         QApplication::processEvents();
 
                             if(SelectWordDialog->wasCanceled()) break;
                     }
Код
C++ (Qt)
           for(int i = 0; i < CountImages; i++)
               if(ListImages[i].count() != 0)
                   {
                       QString sNumImage;
                       QByteArray sByteImage;
                       sByteImage.clear();
                       sNumImage.setNum(i);
 
                           if(i >= 0 && i <= 9) sNumImage.insert(0,"0");
 
                       sByteImage.append(ListImages[i]);
                       QImage ImageSave;
                       ImageSave.loadFromData(sByteImage);
                       ImageSave.save("/tmp/xwel/temp/Image" + sNumImage, "PNG");
 
                           if(i > SelectWordDialog->value()) SelectWordDialog->setValue(i);
 
                       QApplication::processEvents();
 
                           if(SelectWordDialog->wasCanceled()) break;
                   }
Для сборки deb-пакета необходимо наличие установленных пакетов: autotools-dev, dh-make, fakeroot и другие.
Команда сборки:
Цитировать
user@pc:/klen-library-0.0.9-deb$ dpkg-buildpackage -rfakeroot
ЗЫ: Возможно скоро напишу краткое руководство по сборке deb-пакетов и выложу на своём сайте.  Это будет частичный перевод данного руководства начинающего мейнтейнера (http://www.debian.org/doc/manuals/maint-guide/). :)


Название: Клён-библиотека 0.1.0
Отправлено: xwicked от Июль 29, 2011, 22:03
Здравствуйте!

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

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

Исходный код + сборки (http://sourceforge.net/projects/klen-library/files/0.1.0/).

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


Название: Клён-библиотека 0.1.1
Отправлено: xwicked от Август 12, 2011, 21:04
Здравствуйте! Вот новая версия 0.1.1 - исходный код + сборки (http://sourceforge.net/projects/klen-library/files/0.1.1/).

Внешний вид:
(http://i077.radikal.ru/1108/21/8ca3afbf8ffbt.jpg) (http://radikal.ru/F/i077.radikal.ru/1108/21/8ca3afbf8ffb.jpg.html)

Одно из добавлений - это функция поиска текста по книге:
Код:
           while(iNumberPage < ListPages.count())
               {
                 lFind:
                    if(TextBook->find(sFindText) == false)
                        {
                            slotNextPage(); //iNumberPage++

                                if(iNumberPage == ListPages.count() - 1) break;

                            goto lFind;
                        }
                    else break;
               }

QString sFindText - искомый текст;
int iNumberPage - текущая страница
QStringList ListPages - список страниц с текстом.

Для поиска используется "TextBook->find(sFindText)" - будет ли выгода, если использовать функцию поиска в QString непосредственно или использовать контейнер для ускорения? Предполагаю, что сейчас тратится дополнительное время для прорисовки QTextEdit TextBook.

Все новинки:
Цитировать
- Добавлена возможность импорта / экспорта простого кодированного текста в формате utf-8;
- Добавлена функция поиска слов по книге;
- Добавлена возможность расширенного редактирования вставленного простого текста;
- Исправлена ошибка, при ответе "Отмена", вопроса о сохранении, при выходе;
- Добавлена панель поиска, с дубликатами команд из меню "Поиск";
- Исправлено несколько ошибок с кнопками панелей;
- Исправлены несколько ошибок при импорте файлов.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: SeverusSnape от Август 15, 2011, 14:00
Не совсем ясно зачем в принципе нужна такая программа, но хотел бы заметить кое-что.
Во-первых слишком мало поддерживаемых сторонних форматов (внутренний, html и txt - это даже не смешно). Добавить поддержку ms word doc (хотя бы под вин с использованием ActiveQt, под лин antidoc(или как он там)...) и OpenOffice odt - труда не должно составить.

Во-вторых, при импорте из html неплохо было бы и кодировочку определять входного файла (читать тег либо использовать внешние библиотеки, ту же enca, например)

Добавить возможности изменения позиции изображений в тексте.

Да и вообще целесообразнее было бы написать визуальный редактор книг в формате fb2 (FictionBook).


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: SeverusSnape от Август 15, 2011, 14:03
А так в целом, очередной текстовый редактор


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: panAlexey от Август 26, 2011, 01:04
Честно говоря интерфейс абсолютно не интуитивный.
Эта переключалка режимов абсолютно ни к селу ни к городу.
Еще раз говорю мне бы за такой софт просто руки отстрелили..


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

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

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


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Октябрь 16, 2011, 12:14
Здравствуйте! Версия 0.1.3 (http://"http://sourceforge.net/projects/klen-library/files/0.1.3/") содержит добавление защиты документов дополнительной информации от случайного изменения в режиме просмотра:
Код:
              connect(ListAdditionallyWidget, SIGNAL(doubleClicked(QModelIndex)), SLOT(slotRunFile()));
       
          void ListAdditionally::slotRunFile()
          {
              if(*sItem == tr("Documents") && gRegime == true)
                  {
                      QString sTmp;
                      sTmp = ListAdditionallyWidget->item(ListAdditionallyWidget->currentRow())->text();
                      int ipos = sTmp.lastIndexOf("/") + 1;
                      sTmp.remove(0, ipos);
                      QFile ifile(ListAdditionallyWidget->item(ListAdditionallyWidget->currentRow())->text());
                      QDataStream idata(&ifile);
                      QByteArray bfile;
                      ifile.open(QIODevice::ReadOnly);
                      bfile = ifile.readAll();
                      QFile ofile("/tmp/xwel/tempfile/" + sTmp);
                      QDataStream odata(&ofile);
                      ofile.open(QIODevice::WriteOnly);
                      ofile.write(bfile);
                      ifile.close();
                      ofile.close();
                      QDesktopServices::openUrl(QUrl::fromLocalFile("/tmp/xwel/tempfile/" + sTmp));//Открытие копии документа
                  }
               else
      //Открытие оригинала документа
               QDesktopServices::openUrl(QUrl::fromLocalFile(ListAdditionallyWidget->item(ListAdditionallyWidget->currentRow())->text()));
          }
То бишь, происходит простое копирование во временный файл документа и его запуск. Но, есть одно небольшое ограничение, при использовании такого подхода(bfile = ifile.readAll();) - файл читается в переменную полностью и он не должен быть слишком большим. А все изменения выглядят вот так:
Цитировать
- Исправлена ошибка возможной потери пароля, при экспорте;
- Добавлена защита документов дополнительной информации в режиме просмотра от случайного изменения;
- Появилась функция экспорта всех книг;
- Исправлена ошибка неполного показа длинных названий книг или издательств в списке книг;
- В окне "О программе" все ссылки, для удобного поиска, изменили цвет на синий;
- Исправлена ошибка возможности редактирования списка книг в режиме просмотра;
- В таблицу списка книг добавлены пункты: "Категория", "Подкатегория";
- Исправлена ошибка неудаления книги из базы, при удалении её из списка книг;
- В меню "Помощь" добавились пункты: "Пожертвовать" и "Получить исходный код".


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: panAlexey от Октябрь 16, 2011, 17:39
нарвался недавно:
http://code.google.com/p/sigil/
Sigil is a multi-platform WYSIWYG ebook editor. It is designed to edit books in ePub format.
прикольная вещуха...


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Октябрь 17, 2011, 10:18
panAlexey, первый раз видел давно. Из изменений:
- возможно был изменён компонент на webkit(из-за этого  появление некоторых функциональных ограничений);
- добавлено несколько возможностей;
Из недостатков:
- немножко не интуитивный интерфейс;
- "Now what does it have to offer" -
Цитировать
... # Native C++ application
# Bugs :)
# And a lot more...
- про bugs  :o особенно убийственная тема;
- плохая отладка;
- код ООП - использовать не смогу, так как я новичок в этом деле и не смогу разобраться с форматом ePub(пока ;) )
- совсем другая направленность;
- главное, что кнопочка donate есть на сайте - остальное не важно  :D
Вопрос: что сказать-то хотел????
ЗЫ: Яплакал...  ;D


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: panAlexey от Октябрь 18, 2011, 22:44
panAlexey, первый раз видел давно. Из изменений:
- возможно был изменён компонент на webkit(из-за этого  появление некоторых функциональных ограничений);
зафигач лучше нормальный html редактор.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Ноябрь 20, 2011, 19:27
В версии 0.1.4 добавилась (http://sourceforge.net/projects/klen-library/files/0.1.4/) функция печати:
Код
C++ (Qt)
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 Тест", для проверки знаний;
- Добавлена функция печати книги;
- Добавлена возможность выравнивания и изменения регистра текста.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: andrew.k от Ноябрь 20, 2011, 20:00
Мне любопытно,сколько активных пользователей у этой программы?
Тоже не пойму, зачем нужна эта программа?
Так как тема для комментов, добавлю.
Там на скринах было вроде как окошко добавления новой книги или чего-то, там были поля для категории добавляемой книги.
Было бы логично сделать их комбобоксами. Понятно почему.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Ноябрь 20, 2011, 21:11
Мне любопытно,сколько активных пользователей у этой программы?
...
Версия 0.1.4. Чисто теоретически - это 14% от запланированного кода. Москва тоже не сразу строилась...  ::)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: andrew.k от Ноябрь 20, 2011, 21:24
Мне любопытно,сколько активных пользователей у этой программы?
...
Версия 0.1.4. Чисто теоретически - это 14% от запланированного кода. Москва тоже не сразу строилась...  ::)
Москва строится до сих пор. Но в ней уже живут люди. И не с версии 0.1.4) А с основания.
Я к тому, нужна ли кому-то программа? Может все зря?
Я так понимаю это курсач или диплом)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Ноябрь 20, 2011, 21:36
... Может все зря?
А когда начнут пользоваться - будете кричать: "Я же говорил, что зря, надо было бросать!!!" Я не вижу завтра потопа -> буду пилить дальше. Код же открыт. Подключатся другие - и всё будет путём. А подобные вопросы я теперь полностью буду игнорировать ;)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Ноябрь 20, 2011, 21:51
Подключатся другие - и всё будет путём.
надежда умирает последней ;)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: andrew.k от Ноябрь 20, 2011, 21:57
... Может все зря?
А когда начнут пользоваться - будете кричать: "Я же говорил, что зря, надо было бросать!!!" Я не вижу завтра потопа -> буду пилить дальше. Код же открыт. Подключатся другие - и всё будет путём. А подобные вопросы я теперь полностью буду игнорировать ;)
Чтобы подключились другие нужно, чтобы были пользователи, и желательно не один.
Только пользователи подскажут, куда должна развиваться программа.
Или ты ожидаешь, что когда выкатишь версию 1.0.0 все спохватятся и бросят уже существующие решения и используемые сейчас и перейдут на твое?
Просто тема похожа на блог или твиттер)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: Igors от Ноябрь 20, 2011, 23:41
надежда умирает последней ;)
(сказала Вера опуская топор на шею Любви)

2xwicked Я неск раз пробовал "public beta" - и пришел к выводам что этого делать не стоит, результат получается отрицательный. Помощи и конструктивной критики мало, все равно работают неск человек (и это лучше делать внутри "creative lab"). Зато с избытком вкусовщины типа "а мой папа может здесь полочку приструячить". А главное - продукт теряет "'эффект новизны", мол "та мы это уже знаем/слышали" - и это очень плохо.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Ноябрь 20, 2011, 23:53
Пока, что плюются только наши. На западе моим программам дают награды за полную бесполезность и бесперспективность - они же в этом дольше нас варятся неправда ли?  ;)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: andrew.k от Ноябрь 21, 2011, 00:07
Пока, что плюются только наши. На западе моим программам дают награды за полную бесполезность и бесперспективность - они же в этом дольше нас варятся неправда ли?  ;)
Ты осознаешь бесполезность и бесперспективность своей программы, но продолжаешь над ней работать?   :o


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: Igors от Ноябрь 21, 2011, 00:13
Пока, что плюются только наши. На западе моим программам дают награды за полную бесполезность и бесперспективность - они же в этом дольше нас варятся неправда ли?  ;)
Пожалуйста поймите меня правильно - я вовсе не хочу играть роль "бывалого" и "хлопающего по плечу". Но по этой дорожке я ходил и могу сказать что "много звездочек на форумах" (увы) никак не наполнили мой карман.

Ты осознаешь бесполезность и бесперспективность своей программы, но продолжаешь над ней работать?   :o
А вот это не Ваше дело, хочет человек - работает. По крайней мере он начал проект, а не сидит как таракан в конторе


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: andrew.k от Ноябрь 21, 2011, 00:51
Ты осознаешь бесполезность и бесперспективность своей программы, но продолжаешь над ней работать?   :o
А вот это не Ваше дело, хочет человек - работает. По крайней мере он начал проект, а не сидит как таракан в конторе
Что значит не мое? Тема называется обсуждение (хотя и исходников).
У меня есть мнение. Я его высказываю.
Есть такое понятие Сизифов труд. Поэтому было бы обидно однажды утром это осознать.
Я очень рад за награды программ, я говорю конкретно об этой.
Поэтому я спрашивал, сколько потенциальных пользователей или реальных.

Возможно я просто совершенно не понимаю, какие программа дает преимущества.
Мне интересны цели, которые преследуются, при разработке программы.

Я надеюсь это не я подразумевался под офисным тараканом?
У Сизифа тоже был проект, он не был офисным тараканом.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: andrew.k от Ноябрь 21, 2011, 00:59
Цитировать
включая репозиторий программ Sisyphus
Забавно, только что обратил внимание ))


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: BRE от Ноябрь 21, 2011, 09:02
Сейчас есть много проектов тех же текстовых редакторов и наверное каждый день появляются новые. Со всех сторон авторам кричать: "не нужно" или "пилил бы ты лучше редактор X, зачем новое поделие" или ...
По мне пусть делают, если автор хотя-бы одного редактора из миллиона придумает какой-то новый режим или возможность, которой еще не было и эта фича будет востребована в других проектах, то это уже большое дело. А придумать что-то новое можно только когда подходишь к делу "с душой", процесс должно нравиться.
Раз автор темы этим занимается, значит ему это нравиться.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: andrew.k от Ноябрь 21, 2011, 09:56
Сейчас есть много проектов тех же текстовых редакторов и наверное каждый день появляются новые. Со всех сторон авторам кричать: "не нужно" или "пилил бы ты лучше редактор X, зачем новое поделие" или ...
По мне пусть делают, если автор хотя-бы одного редактора из миллиона придумает какой-то новый режим или возможность, которой еще не было и эта фича будет востребована в других проектах, то это уже большое дело. А придумать что-то новое можно только когда подходишь к делу "с душой", процесс должно нравиться.
Раз автор темы этим занимается, значит ему это нравиться.

Соглашусь)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: panAlexey от Ноябрь 21, 2011, 23:36
Сейчас есть много проектов тех же текстовых редакторов и наверное каждый день появляются новые.
а мне все-равно хочется html редактор на Qt ))))
Хотя-бы каркас, остальное допилю )))


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Январь 31, 2012, 21:50
Здравствуйте! Версия 0.1.8 (http://sourceforge.net/projects/klen-library/files/0.1.8/)
Код
C++ (Qt)
//Изменение таблицы
void KlenLibrary::slotResizeTable()
{
   if(gRegimeViewing == true) return;
 
   InputParametrTable FormInputParametrTable;
   FormInputParametrTable.setWindowTitle(tr("Change table parametrs"));
 
   if(FormInputParametrTable.exec() == QDialog::Accepted)
   {
       if(FormInputParametrTable.SpinColumnCount->value() > 0
               && FormInputParametrTable.SpinColumnCount->value() > 0)
       {
           TextBook->textCursor().currentTable()->resize(FormInputParametrTable.SpinRowCount->value(),
                                                         FormInputParametrTable.SpinColumnCount->value());
       }
   }
}
currentTable() позволяет работать с таблицей, по текущей позиции курсора в тексте.
Все изменения:
Цитировать
- Добавилась возможность создания и редактирования таблиц;
- Исправлена ошибка, не позволяющая сохранять дополнительную информацию, при редактировании;
- Добавлена возможность ввода имени пользователя;
- Добавлен учёт времени работы пользователя с книгой;
- Добавились горячие клавиши;
- Модуль "LabFreeTech Тест" изменил своё название на "Шёлковый тест" и обновился до версии 0.4.1;
- Добавился пункт меню "Сервис", в котором теперь находятся элементы: "Статистика", "Дополнительно", "Тест";
Хочу сообщить о том, что начиная с версии >1.0.0, 30% работы будет сосредоточено на оптимизацию под ООП стандарты :) для лучшей поддержки другими программистами.

P.S. Ещё один очень важный момент: версии 0.1.8 и 0.1.9 - сборки являются минимальными. То есть, чтобы посмотреть на все функции, необходимо программу собрать из исходника . Это делалось для проверки аудитории пользователей на заинтересованность в программе, путем отправки мне запроса на получение исходного кода. Что было не очень удачной идеей и, с версии 0.2.5, сборки программы уже снова полнофункциональны. Прошу извинить меня за данное неудобство  ::) .


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Февраль 11, 2012, 22:52
В версии 0.1.9 добавлена работа с несколькими библиотеками-базами(как и в тесте  ;) ) и возможность резервировать со сжатием:
Код
C++ (Qt)
void KlenLibrary::slotBackupLibrary()
{
   QString sNameBackupLibrary = QFileDialog::getSaveFileName(0, tr("Backup library"), "", "*.xwlbz");
 
   if(sNameBackupLibrary == "") return;
   if(sNameBackupLibrary.indexOf(".xwlbz") == -1) sNameBackupLibrary += ".xwlbz";
 
   QFile ifile(sNameLibrary);
   ifile.open(QIODevice::ReadOnly);
   QByteArray baExport;
   baExport = ifile.readAll();
   ifile.close();
   baExport = qCompress(baExport, 9);//Сжатие данных - 9-ая степень
   QFile ofile(sNameBackupLibrary);
   ofile.open(QIODevice::WriteOnly);
   ofile.write(baExport);
   ofile.close();
}
 
void KlenLibrary::slotRestoreLibrary()
{
   QString sNameBackupLibrary = QFileDialog::getOpenFileName(0, tr("Open backup"), "", "*.xwlbz");
 
   if(sNameBackupLibrary == "") return;
 
   QFile ifile(sNameBackupLibrary);
   ifile.open(QIODevice::ReadOnly);
   QByteArray baImport;
   baImport = ifile.readAll();
   ifile.close();
   baImport = qUncompress(baImport);//Извлечение данных из архива
 
   sNameBackupLibrary = QFileDialog::getSaveFileName(0, tr("Restore library"), "", "*.xwlb");
 
   if(sNameBackupLibrary.indexOf(".xwlb") == -1) sNameBackupLibrary += ".xwlb";
   if(sNameBackupLibrary == "") return;
 
   QFile ofile(sNameBackupLibrary);
   ofile.open(QIODevice::WriteOnly);
   ofile.write(baImport);
   ofile.close();
}
Несколько изменений:
Цитировать
      - Добавилась возможность резервировать базу данных библиотеки(со сжатием до 5-ти раз(!));
      - Добавлена возможность работы с несколькими библиотеками;
      - Добавлена поддержка полного форматирования текста при печати книги;
      - Добавлено cжатие(до 5-ти раз(!)) импортированной книги в формате xwb.
      - Изменились несколько элементов меню;
Скачать (http://sourceforge.net/projects/klen-library/files/0.1.9/)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Февраль 17, 2012, 21:40
Здравствуйте! Оптимизирована функция изменения шрифта:
Код
C++ (Qt)
       bool Accept;
       QFont TextFont;
       TextFont = TextQuestion->textCursor().charFormat().font();
       TextFont = QFontDialog::getFont(&Accept, TextFont);
 
       if(Accept)
       {
           QTextCharFormat tcf;
           tcf.setFont(TextFont);
           TextQuestion->textCursor().setCharFormat(tcf);
           cbFont.setCurrentFont(TextFont);
       }
       else return 1;
и другие изменения.
Скачать (http://sourceforge.net/projects/klen-library/files/0.2.5)
Это последняя версия. В Git создана ветка current  (http://sourceforge.net/scm/?type=git&group_id=556926)теперь, все свежие изменения будут там.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Апрель 03, 2012, 20:10
Здравствуйте! Новый код. Версия 1.0.0 - это первая версия, в которой можно нормально работать с изображениями. Их количество теперь будет ровно таким, каким и должно быть, не больше.
Повышена безопасность программы перемещением некоторых переменных в секцию private: Теперь доступ к ним осуществляется из методов:
Код
C++ (Qt)
...
 
int TTextBook::isCountPages() const
{
   return ListPages.count();
}
 
int TTextBook::isNumberBook() const
{
   return i_NumberBook;
}
 
void TTextBook::setNumberBook(int iNumberBook)
{
   i_NumberBook = iNumberBook;
}
 
int TTextBook::isYear() const
{
   return i_Year;
}
 
void TTextBook::setYear(int iYear)
{
   i_Year = iYear;
   sYear.setNum(iYear);
}
 
int TTextBook::isCurrentPage() const
{
   return i_CurrentPage;
}
 
void TTextBook::setCurrentPage(int iCurrentPage)
{
   i_CurrentPage = iCurrentPage;
}
 
int TTextBook::isModeWork() const
{
   return b_ModeWork;
}
 
void TTextBook::setModeWork(bool bModeWork)
{
   b_ModeWork = bModeWork;
}
 
QByteArray TTextBook::isPassword() const
{
   return ba_Password;
}
 
void TTextBook::setPassword(QByteArray baPassword)
{
   ba_Password = baPassword;
}
...
 
//Исправлена печать - печатается весь текст :)
void TTextBook::slotPrint()
{
   QPrinter printer;
   QPrintDialog *pPrintDialog = new QPrintDialog(&printer);
   QTextDocument *textDoc = new QTextDocument;
   QString sPrint;
 
   if(pPrintDialog->exec() == QDialog::Accepted)
   {
       sPrint = makeOneHTML();
 
       QImage textImage;
 
       for (int i = 0; i < ListImages.count(); i++)
       {
           textImage.loadFromData(ListImages.at(i));
           textDoc->addResource(QTextDocument::ImageResource, QUrl(slNumberImages.at(i)), textImage);
       }
 
       textDoc->setHtml(sPrint);
       textDoc->print(&printer);
   }
 
   delete textDoc;
   delete pPrintDialog;
}
Цитировать
- Оптимизирована скорость загрузки книги до 10 раз;
- Исправлена невозможность нормальной работы с изображениями в книге;
- Добавлен экспорт книги в PDF, PostScript, RTF;
- Исправлена печать книги, теперь печатается весь текст;
- Добавлено шифрование файла книги в формате xwb;
- Модуль Шёлковый тест обновился до версии 1.0.0;
- Добавлена возможность проверки наличия новой версии через интернет
Всего 27 изменений. Скачать: (http://"http://sourceforge.net/projects/klen-library/files/1.0.0/")
Теперь исходник одним файлом. Вся информация по сборке rpm и deb-пакетов находится внутри.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Апрель 03, 2012, 20:54
принято называть методы на is* если они возвращают bool. в твоем же случае методы лучше называть на get*


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Апрель 03, 2012, 22:01
принято называть методы на is* если они возвращают bool. в твоем же случае методы лучше называть на get*
Я посмотрю, как сделаны похожие методы в сорцах самого Qt, потом буду думать.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Апрель 03, 2012, 22:06
такие методы назвали геттерами и сеттерами не просто так ;)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: LisandreL от Апрель 03, 2012, 23:30
такие методы назвали геттерами и сеттерами не просто так
В самом Qt геттеры именуются без get (или какого либо другого слова), например setFont( ... ) - сеттер, font() - геттер.
То есть в если следовать именованию Qt названия будут: pagesCount(), bookNumber(), year() т.п.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Апрель 04, 2012, 00:44
да, это тоже хороший вариант, даже более удобный. но я исходил из предположения, что автор хочет использовать приставки в именах методов.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Апрель 04, 2012, 01:02
... То есть в если следовать именованию Qt названия будут: pagesCount(), bookNumber(), year() т.п.
да, это тоже хороший вариант, даже более удобный. но я исходил из предположения, что автор хочет использовать приставки в именах методов.
Я хотел сделать как в Qt, поэтому скорее всего геттеры будут безымянными.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Декабрь 31, 2012, 18:54
Вот есть тема:http://www.prog.org.ru/index.php?PHPSESSID=6f7dc8780d19e9d7afc3e5109301dff2&topic=6275.15 (http://www.prog.org.ru/index.php?PHPSESSID=6f7dc8780d19e9d7afc3e5109301dff2&topic=6275.15)
А если по теме, то для того чтобы обрабатывать исключения в гуёвой кутэшной программе, надо оверрайднуть метод QApplication::notify.

Код
C++ (Qt)
bool MyApplication::notify ( QObject * o, QEvent * e )
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);
   }
   catch(...)
   {
       QMessageBox::error(activeWindow(), tr("Error"), tr("Unhandled exception"), QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
 
Как мне это использовать в моём коде?
Пытался в main.cpp сделать и в класс TKlenLibrary, пока безуспешно.
Благодарю!


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Декабрь 31, 2012, 19:21
наследуешься от QApplication и вперед


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Декабрь 31, 2012, 19:48
наследуешься от QApplication и вперед
KlenLibrary.h
Код
C++ (Qt)
#include <QtGui/QApplication>
 
protected:
      bool notify ( QObject * o, QEvent * e );
      void closeEvent(QCloseEvent *event);//Событие закрытия окна
KlenLibrary.cpp
Код
C++ (Qt)
bool QApplication::notify ( QObject * o, QEvent * e )
//bool KlenLibrary::notify ( QObject * o, QEvent * e )//Так даже не собирается
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);//<---- Сегфолт :(
   }
   catch(...)
   {
       QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"), QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
Если так, то сегфолтится на указанной строке.
Думаю, это не такой простой вопрос, чтобы односложно отвечать, как 100500-му школьнику.
Что мне наследовать от QApplication? Что за объект и как он должен выглядеть?
А строка
Код
C++ (Qt)
catch(...)
сто пудово не будет работать с компилятором собранным без исключений, сам проверял. Последние сборки дистрябов GNU / Linux без исключений собираются.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Декабрь 31, 2012, 20:13
Код
C++ (Qt)
class Application : public QApplication
{
public:
   bool notify(QObject *receiver, QEvent *event)
   {
       // ...
   }
}
 
int main(/*ясно что*/)
{
   Application app(argc, argv);
   // ...
   return app.exec();
}


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Декабрь 31, 2012, 22:35
Создал класс.
KlenApplication.h
Код
C++ (Qt)
#ifndef KLENAPPLICATION_H
#define KLENAPPLICATION_H
 
#include <QApplication>
#include <QtCore/QObject>
#include <QtCore/QEvent>
#include <QtGui/QMessageBox>
 
class KlenApplication : public QApplication
{
public:
   KlenApplication();
 
   bool notify ( QObject * o, QEvent * e );
};
 
#endif // KLENAPPLICATION_H
KlenApplication.cpp
Код
C++ (Qt)
#include "klenapplication.h"
 
KlenApplication::KlenApplication()
{
}
 
bool KlenApplication::notify ( QObject * o, QEvent * e )
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);
   }
   catch(...)
   {
       QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"),
                             QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
 
main.cpp
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   KlenApplication app(argc, argv);//<---ошибка
 
   if (argc > 1)
   {...
Цитировать
main.cpp: In function 'int main(int, char**)':
main.cpp:30: error: no matching function for call to 'KlenApplication::KlenApplication(int&, char**&)'
KlenApplication/klenapplication.h:12: note: candidates are: KlenApplication::KlenApplication()
KlenApplication/klenapplication.h:10: note:                 KlenApplication::KlenApplication(const KlenApplication&)
*** Error code 1
А это уже наверное базовый вопрос. Как мне всё остальное унаследовать от QApplication?
Код
C++ (Qt)
#ifndef qdoc
   QApplication(int &argc, char **argv, int = ApplicationFlags);
   QApplication(int &argc, char **argv, bool GUIenabled, int = ApplicationFlags);
   QApplication(int &argc, char **argv, Type, int = ApplicationFlags);
#if defined(Q_WS_X11)
   QApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0, int = ApplicationFlags);
   QApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0, int = ApplicationFlags);
#endif
#if defined(Q_OS_SYMBIAN)
   QApplication(QApplication::QS60MainApplicationFactory factory, int &argc, char **argv, int = ApplicationFlags);
#endif
#endif
Такую ерунду писать в новом классе у себя радости нету. Благодарю и с наступающим Новым Годом!!!  ;D


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Декабрь 31, 2012, 22:53
а всю «ерунду» писать в производном классе и не нужно — достаточно лишь того конструктора, который ты собираешься вызывать, т.е.
Код
C++ (Qt)
KlenApplication(int &argc, char **argv) : QApplication(argc, argv) {}


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Январь 01, 2013, 00:21
а всю «ерунду» писать в производном классе и не нужно — достаточно лишь того конструктора, который ты собираешься вызывать, т.е.
Код
C++ (Qt)
KlenApplication(int &argc, char **argv) : QApplication(argc, argv) {}
Код
C++ (Qt)
#ifndef KLENAPPLICATION_H
#define KLENAPPLICATION_H
 
#include <QApplication>
#include <QtCore/QObject>
#include <QtCore/QEvent>
#include <QtGui/QMessageBox>
 
class KlenApplication : public QApplication
{
public:
 
   bool notify ( QObject * o, QEvent * e );
};
 
#endif // KLENAPPLICATION_H
 
#include "klenapplication.h"
 
bool KlenApplication::notify ( QObject * o, QEvent * e )
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);
   }
   catch(...)
   {
       QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"),
                             QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
 
int main(int argc, char *argv[])
{
   KlenApplication app();
 
   if (argc > 1)
   {
Цитировать
main.cpp: In function 'int main(int, char**)':
main.cpp:98: error: request for member 'setWindowIcon' in 'app', which is of non-class type 'KlenApplication ()()'
main.cpp:117: error: request for member 'installTranslator' in 'app', which is of non-class type 'KlenApplication ()()'
main.cpp:118: error: request for member 'installTranslator' in 'app', which is of non-class type 'KlenApplication ()()'
main.cpp:151: error: request for member 'exec' in 'app', which is of non-class type 'KlenApplication ()()'
*** Error code 1
Удалил переопределение конструктора и увидел, что новый класс чист - ничего не унаследовалось. В Delphi вроде бы есть одно слово, которое позволят наследовать "inherited" или что-то типо того. Как здесь ВСЁ унаследовать, кроме одного метода, который переопределяем???


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Январь 01, 2013, 00:37
зачем ты конструктор удалил? вот так всё работает и с параметрами (специально проверял):
Код
C++ (Qt)
class KlenApplication : public QApplication
{
public:
   KlenApplication(int &argc, char **argv) : QApplication(argc, argv) {}
 
   bool notify ( QObject * o, QEvent * e )
   {
       bool res = false;
       try
       {
           res = QApplication::notify(o, e);
       }
       catch(...)
       {
           QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"), QMessageBox::Ok, QMessageBox::Ok);
       }
       return res;
   }
};
 
int main(int argc, char **argv)
{
   KlenApplication app(argc, argv);
   ...
}

P.S. С Новым Годом! :)


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Январь 01, 2013, 01:46
зачем ты конструктор удалил? вот так всё работает и с параметрами (специально проверял):
...
Этот вариант заработал, но что мне это дало?
Код
C++ (Qt)
uchar bvar;//bool bvar;
   try
   {
       ifile.read(reinterpret_cast<char*>(bvar), 10);//2, 100
       bvar = 9999999999999;//Даже это проглотил
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
 
//        if (sappVersion != QCoreApplication::applicationVersion()) throw TError::WrongFileFormat();
   }
   catch(TError::WrongFileFormat)
   {
       QMessageBox::warning(0, tr("Detection warning"), tr("Wrong file format!"));
       emit slotClose();
       return 1;
   }
   catch(...)
   {
       QMessageBox::critical(0, tr("Detection error"), tr("An unknown error occurred!"));
       emit slotClose();
       return 1;
   }
 
   istream >> sNameBook;
Если тот код касается только GUI, то он будет отлавливать ошибки самого Qt? Мне от этого не жарко не холодно. Да и во FreeBSD 9.0 amd64 он молчит, при чтении PNG-изображения в образе XWB-книги. Это полный провал...
Прочитал это (http://www.prog.org.ru/topic_16956_0.html) и значит проблема действительно серьёзная. Если Windows 64 бит msvc++ не сможет отловить эти исключения, то поможет ли мне это (http://doc.crossplatform.ru/qt/4.7.x/qtconcurrent-exception.html#details)?


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Январь 03, 2013, 20:51
Вообщем сейчас нет времени разбираться с другими вариантами, вместо исключений.
На MSVC++ собранный Qt без исключений не заработал. На FreeBSD тоже не заработал, но после наследования QApplication она перестала в релизе вообще ошибки обрабатывать. Съел "Out of range" у вектора и ничего не сказал, :( а должен был вылететь. Убрал KlenApplication  и стал вылетать нормально. На этой весёлой ноте я решил закончить эксперименты и буду дополнительными проверками снабжать критические процессы чтения / передачи / записи данных на диск или в сеть.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Январь 06, 2013, 15:12
Здравствуйте!
Сохраняю положение окна и панелей:
Код
C++ (Qt)
   FileOptions->setSizeMainWindow(geometry());
   FileOptions->setSizeStandardToolbar(QSize(ui->tbStandard->x(), ui->tbStandard->y()));
Геометрия окна с его положением сохраняются, а геометрия панели нет.
Пробую сохранить положение координат и вот так восстановить:
Код
C++ (Qt)
   FormKlenLibrary.setGeometry(FileOptions->sizeMainWindow());
   FormKlenLibrary.ui->tbStandard->move(FileOptions->sizeStandardToolbar().rheight(),
                                               FileOptions->sizeStandardToolbar().rwidth());
move для панели не работает. Нужно восстановить вот такое положение панели, после запуска программы:
(http://s.neepic.net/preview/ddacdccc274b0e196e7ff937c1dd7b1e.jpg) (http://neepic.net/347)
Для чего? Чтобы было как в труЪ профессиональных программах типа Apache OpenOffice Writer например.
Благодарю!
[Добавлено]
Мою скромную тему ещё не успели посетить здешние гуру, как я самостоятельно нашёл ответ.
Жасмин Бланшет рулит. Страница 181 - Прикрепляемые виджеты и панели инструментов.
Код
C++ (Qt)
FileOptions->setStateMainWindow(saveState());
FormKlenLibrary.restoreState(FileOptions->stateMainWindow());
Сохраняется информация сразу обо всех панелях инструментов. Как мне нравится этот тулкит!  ;D


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Февраль 02, 2013, 22:23
Здравствуйте!

Новая версия. 1.0.5. Тут прошу особо протестировать Mac- и Linux-установщики, так как Linux-пакетов больше нет. Скачать (http://sourceforge.net/projects/klen-library/files/1.0.5/)
Цитата: Изменения
- Исправлена ошибка исчезновения всех изображений, при вставке новой страницы;
- Исправлена ошибка когда, при повторном открытии книги, страницы книг объединялись;
- Исправлена ошибка невозможности создания новой книги из списка книг;
- Добавлен пакетный импорт всех книг из указанной папки в базу библиотеки;
- Добавлено сохранение положений панелей инструментов при выходе из программы;
- Удалена совместимость с базами библиотеки версий 0.1.9 и 0.2.5;
- Из сборки удалён модуль «Шёлковый тест». Его теперь нужно скачивать отдельно;
Благодарю!


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: panAlexey от Февраль 04, 2013, 10:25
Здравствуйте!
Правильная ссылка (https://sourceforge.net/projects/klen-library/files/1.0.5/).


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: kambala от Февраль 04, 2013, 12:52
а что неправильного в той? хром нормально открывает обе.


Название: Re: Программа для создания электронных книг[Обсуждение исходника]
Отправлено: xwicked от Февраль 04, 2013, 17:51
Да я поправил уже...