#1 13.08.2011 19:02:09

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

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

Третья моя программа написана по наработкам второй(для создания электронных книг), поэтому содержит некоторые методы такого же названия например "openBookBase", что в последующих версиях будет исправлено на "openTestBase" :D

Программа представляет собой миникомплекс, включающий: создание, тестирование, отчёт(статистика). Версия 0.3.1 - исходник + сборки.

Скрин последней версии:


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

Обсуждаем.

#2 13.08.2011 19:45:40

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Не совсем в тему.
мое личное имхо: вы слишком распыляетесь по программам. Доведите до красивого состояния тот же кроссворд.

#3 13.08.2011 20:09:22

Michail_Ul
Administrator
Зарегистрирован: 20.09.2010
Сообщений: 626
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Не совсем в тему.
мое личное имхо: вы слишком распыляетесь по программам. Доведите до красивого состояния тот же кроссворд.

Полностью согласен. Грамотного программиста отличают красивый код, логичность и продуманность ПО, ну и конечно же завершенность ПО.
Бесмысленно расплываться между проектами, так и не доведя ни один из них до конца.

#4 14.08.2011 03:31:23

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Не совсем в тему.
мое личное имхо: вы слишком распыляетесь по программам. Доведите до красивого состояния тот же кроссворд.

Полностью согласен. Грамотного программиста отличают красивый код, логичность и продуманность ПО, ну и конечно же завершенность ПО.
Бесмысленно расплываться между проектами, так и не доведя ни один из них до конца.

Я здесь не для того, чтобы себя показать, а найти помощников в лице всего Свободного Сообщества. Ну а темы я думаю неплохие. wink :P :rolleyes:

ЗЫ: Sun StarOffice -> Sun OpenOffice -> Sun ??? -> Oracle! Так что, всё нужно делать вовремя...

#5 14.08.2011 16:30:39

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Я здесь не для того, чтобы себя показать, а найти помощников в лице всего Свободного Сообщества. Ну а темы я думаю неплохие

Да только видя не серьёзное отношение автора к проекту, особо даже и смотреть желание пропадает.

При чем тут офис и его исторический путь?

#6 14.08.2011 17:47:57

Michail_Ul
Administrator
Зарегистрирован: 20.09.2010
Сообщений: 626
IP-адрес

Программа для создания тестов. Обсуждение программы и кода


Да только видя не серьёзное отношение автора к проекту, особо даже и смотреть желание пропадает.

При чем тут офис и его исторический путь?


В сети множество похожих проектов. Автор набросал свои идеи, выложил в сеть и надеется, что люди тут-же объединятся и напишут программу.
Если и вы на это надеетесь, то вам нужно идти в руководители проектов, но никак не в программисты.
Поймите простую вещь, у большинства людей семьи, дети. Много работы и других забот. При этом свободного времени нехватает,
и они не станут его тратить на столь несерьезные вещи.
Час работы хорошего и толкового программиста стоит дорого. И этот программист знает себе цену.
Все хорошие специалисты работают на крупные проекты, я сомневаюсь что столь несерьезный подход их заинтересует.

#7 14.08.2011 18:16:04

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Не стоит так убиваться, пожалуйста, Ваши чисто субъективные мнения понятны.
Всё же будем использовать дедукцию, без намёков на денежный интерес, свободный-таки проект wink

ЗЫ: Последняя текущая версия 0.4.4 - потом будут Ваши серьёзные комментарии.

#8 14.08.2011 20:25:11

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

xwicked, а как вы подсчитываете оценку? (пару месяцев назад на одно форуме по программированию была целая тема этому вопросу посвящена) - если нужно попробую найти. Там много "интересного" всплыло.


Если и вы на это надеетесь, то вам нужно идти в руководители проектов, но никак не в программисты.

Как то странно ваш пост построен - вроде бы ответ мне, вроде против, хотя и в том же духе :) Ну да ладно не о том сейчас.

#9 15.08.2011 04:11:02

Michail_Ul
Administrator
Зарегистрирован: 20.09.2010
Сообщений: 626
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

xwicked, а как вы подсчитываете оценку? (пару месяцев назад на одно форуме по программированию была целая тема этому вопросу посвящена) - если нужно попробую найти. Там много "интересного" всплыло.


Если и вы на это надеетесь, то вам нужно идти в руководители проектов, но никак не в программисты.

Как то странно ваш пост построен - вроде бы ответ мне, вроде против, хотя и в том же духе :) Ну да ладно не о том сейчас.


Voral Это ответ не тебе а xwicked. Видимо не очень понятно у меня получилось. :D

#10 15.08.2011 06:57:19

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Описание: кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием.
Её могут использовать все, кому понадобиться быстро создать тест и проверить знания. Можно будет создать вопрос типа "Что показано на изображении" и использовать как в школе так и на предприятии, для сдачи квалификационных экзаменов. Все тесты хранятся в базе данных SQLite3. Это позволяет располагать файл базы на любом сервере(Windows, GNU / Linux, и т. д.), без необходимости установки сервера баз данных.

Всё находится в одном исполняемом файле. Для редактирования / тестирования, необходимо переключить соответствующий пункт из меню "Режим". Отчёт о протестировавшихся представлен статистикой.

Внутренняя архитектура: список вопросов хранится в QStringList ListQuestions, список правильных ответов в QStringList ListRightAnswer, варианты ответа при тестировании в QStringList ListCheckRightAnswer. Изображения к тесту находятся в QByteArray ListImages[100000]. Режим редактирования защищён паролем, который пока что, хранится в открытом виде.

#11 29.08.2011 20:19:53

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

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

Вот новая версия 0.3.5.

Теперь программа предоставляет возможность создавать тесты, используя 4-е новых типа вопроса: много ответов, ввод слова(предложения) с клавиатуры, ввод числа с клавиатуры, установка последовательности ответов.

Хочу обратить Ваше внимание на то, что в данной версии я сделал вот так:

         if(slotSelectTypeQuestion() == false) return;

         if(sTypeQuestion == tr("One answer")) setOneAnswerType();

         if(sTypeQuestion == tr("Many answers")) setManyAnswerType();

         if(sTypeQuestion == tr("Installation sequence")) setInstallSequenceType();

         if(sTypeQuestion == tr("Enter number")) setEnterNumberType();

         if(sTypeQuestion == tr("Enter word (sentence)")) setEnterWordType();

         slQuestionType << sTypeQuestion;
         SaveState = false;

Функция slotSelectTypeQuestion() отвечает за вывод списка, из которого можно будет выбрать соответствующий тип вопроса.
Далее идёт проверка типа и его применение - функция начинается на "set<Тип_вопроса>". Потом выбранный вариант загоняется в список типов QStringList slQuestionType. Но, здесь есть одно "но":
sTypeQuestion == tr("One answer")
- тип вопроса взят в "tr()", так что тест, составленный на русском языке не будет работать при использовании английского языка интерфейса программы и наоборот :( . Просьба, перед сборкой устранить эту ошибку, так как мной она будет устранена в последующий версиях :) .

Дабы быть уверенным в том, что файлы не побились, при закачке, я добавил текстовик с md5-контрольными суммами.
Git-репозиторий:
git://shelk-test.git.sourceforge.net/gitroot/shelk-test/shelk-test (read-only)


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

#12 30.08.2011 05:31:00

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода


 if(sTypeQuestion == tr("Enter word (sentence)")) setEnterWordType();

Имхо. Это ужос.
- тип вопроса взят в "tr()", так что тест, составленный на русском языке не будет работать при использовании английского языка интерфейса программы и наоборот sad . Просьба, перед сборкой устранить эту ошибку, так как мной она будет устранена в последующий версиях smile .

Имхо. Здесь гораздо больше потенциальных проблем.

Вы сравниваете строковые переменные, которые могут быть автоматически заменены на перевод. При переводе это будут две разных строки (в разных местах) и если переводчику покажется логичным перевести чуть чуть, но по разному. Или сделает лишний пробел, или опечатку, или вместо круглых скобок поставит, что то другое..... Короче слишком много если.
Опять же, на сколько я понял ваш подход "sTypeQuestion" и остальные переменные считываются из конфига. Т.е. могут быть исправлены руками в конфиге, на непонятно, что. Более того, если англоязычный поделится своим конфигом с русскоязычный до будет все плохо...
Если, вдруг, лет через 10 вы решите, что есть более логичная фраза нежели "Enter word (sentence)", то вы окажетесь заложником совместимости.... Мешать интерфейс и логику - это жуть.

#13 30.08.2011 11:16:20

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

... Опять же, на сколько я понял ваш подход "sTypeQuestion" и остальные переменные считываются из конфига. ...
sTypeQuestion - это переменная, которая является частью одного создаваемого теста. То бишь, сколько тестов в базе данных будет, столько раз будет сохранено содержимое данной переменной в базу. При этом текст из переменной sTypeQuestion используется и для отображения данного типа в метке
lTypeQuestion.setText(sTypeQuestion);


ЗЫ: На этом наглядном примере, я понял, что такое смешать интерфейс с логикой oO :lol: А хотел я, всего лишь, сэкономить время...

#14 24.10.2011 11:24:46

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Для распространения программы между RPM-дистрибутивами, воспользуйтесь следующим спекфайлом:

Summary: On Qt-based, cross-platform software is designed for creating and editing tests, followed by tests of knowledge.

Summary(ru): Кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием. Основана на Qt.

%define version 0.3.5

Group: Education

Name: shelk-test

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

Provides: shelk-test

Release: alt1

Source: shelk-test-%{version}.tar.gz

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

Version: %{version}

License: GPLv2

Packager: LabFreeTech.org admin@labfreetech.org

%description
On Qt-based, cross-platform software is designed for creating and editing tests, followed by tests of knowledge.
Supported features: - Creation of a test; - Editing of the test; - Testing; - Adding / removing tests from the database; - Rich editing the test of the tests; - Password protection regime editing;

%description -l ru
Кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием. Основана на Qt.
Поддерживаемые функции: - Создание теста; - Редактирование теста; - Тестирование; - Добавление / удаление тестов из базы данных; - Расширенное редактирование текста вопросов теста; - Защита паролем режима редактирования;

%prep

%setup -q

%build
%make_build

%install

cp -Rv shelk/ %buildroot/

%clean

rm -rf $RPM_BUILD_ROOT

%files

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

%post

test -e /usr/bin/xwts-0.3.5 || ln -s /usr/bin/xwts-0.3.5 /usr/bin/shelk-test-0.3.5

if (test -d $HOME/Desktop) then
test -e $HOME/Desktop/xwts.desktop || cp -r /usr/share/applications/xwts.desktop $HOME/Desktop/shelk-test.desktop
else
echo "Use command \"/usr/bin/xwts-0.3.5\""
fi

%postun

test -L /usr/bin/shelk-test-0.3.5 && rm -r /usr/bin/shelk-test-0.3.5
test -e $HOME/Desktop/shelk-test.desktop && rm -r $HOME/Desktop/shelk-test.desktop
Но, в нём есть небольшая ошибка или, даже скорей недочёт:
BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3
Непонятно почему при установке собранного пакета с этим спекфайлом, происходит игнорирование выделенной библиотеки :( , но libqt4-sql устанавливается, хотя явного указания её нет. Кто знает причину, прошу ответить.
Этот спекфайл находится в архиве shelk-test-0.3.5-rpm, расположенный по ссылке в предыдущем посте. Там же находится архив исходного кода и для дитрибутивов GNU / Linux Debian(/Ubuntu), с пометкой "deb".

#15 06.11.2011 21:48:44

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

#16 07.11.2011 11:03:09

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Есть что-нибудь проще или для начала сойдёт?

На безрыбье.
Гибче: внешний файл - шаблон, свои теги при формировании заменяешь. В итоге каждый может нарисовать под себя.

#17 07.11.2011 14:48:58

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

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

#18 22.11.2011 19:29:58

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Здравствуйте! Программа продолжает совершенствоваться и версия 0.4.2 включает 25 изменений. Было изменено отображение картинки в тесте. Теперь используется рисование непосредственно на виджите:

//WidgetImage.cpp

//Передаётся в конструктор вторым параметром путь к загружаемому изображению
WidgetImage::WidgetImage(QWidget* pwgt/*=0*/, QString sFileName) : QWidget(pwgt)
{
//Копирование пути в глобальную переменную, 
//для использования в обработчике события рисования
    str1 = sFileName;
}


/*virtual*/ void WidgetImage::paintEvent(QPaintEvent*)
{
    QImage   img(str1);//Загрузка изображения
    QPainter painter;

    painter.begin(this);
//На img2 рисуется изображение из img масштабируемо по высоте
    QImage img2 = img.scaledToHeight(height());
    painter.drawImage(0, 0, img2);//Отрисовка на виджите
    painter.end();
}

//TestSystem.cpp
TestSystem::TestSystem(QMainWindow *pwgt /* = 0*/): QMainWindow(pwgt)
{
    setupUi(this);
...
    QSplitter* splitEditHV;//Объявление разделителя
...
    splitEditHV = new QSplitter(Qt::Vertical);//Создание разделителя вертикально
...
//Создание виджита в разделителе с передачей загружаемого изображения
    widgetImage = new WidgetImage(splitEditHV, "/tmp/shelk-test-0.4.2/temp/tempimage");
    widgetImage->resize(300, 300);//Изменение размера виджета
...
}
Как я предполагаю, что есть проще и правильнее способ, но времени найти его нет :( прошу помочь.

Ещё интересует вопрос по отлавливанию ошибок try catch. Это первая реализация. Что кроме вынесения в один метод обработчиков, во избежании наличия копированного кода, там можно сделать? Благодарю! :)

Ещё изменения:

- Добавлен учёт времени тестируемого;
- Добавилась возможность ручного запуска теста, по нажатию на клавишу;
- Добавлена возможность остановки теста, с занесением информации о тестируемом в статистику;
- Добавилась возможность экспорта в файл XWT;
- Добавилась возможность импорта из файла XWT;

#19 26.01.2012 17:15:37

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

0.4.3 - это новая версия программы.

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

- Добавлено шифрование и сжатие экспортируемого файла теста в формате xwt;
- Исправлена ошибка, когда пароль режима программы хранился и проверялся в открытом виде;
- Добавлена возможность работать с несколькими хранилищами тестов;
- Добавлена возможность резервировать хранилище тестов(со сжатием до 5-ти раз(!));
- Добавлена возможность запроса на сохранение теста, при его закрытии;

    QString RegimePassword;//Пароль режима
    QByteArray  baPassword;//Хеш пароля;
    RegimePassword = "Password";
    baPassword.append(RegimePassword);
    baPassword = baPassword.toBase64();
    baPassword = qCompress(baPassword, 9);
    baPassword = baPassword.toBase64();
    baPassword = qCompress(baPassword, 9);
    baPassword = baPassword.toBase64();
    RegimePassword.clear();
    RegimePassword.append(baPassword);
Для шифрования используется алгоритм Base64, для сжатия функция qCompress. Этот код может быть реверсирован и получен изначальный пароль фактически в 100%-ом виде. В будущем он будет заменён на md5 хеш или похожий.

А вот следующая проблема - это шифрование самого теста. Алгоритмы те же. При наличии у студента(/пользователя) кода все тесты предстают в абсолютно первозданном виде :( .
Шифрование по ключу думаю будет слишком хорошая защита, которую мне одному не реализовать. Найти другой вариант за ~2-а месяца у меня не получилось.

Какие есть варианты? Благодарю!
ЗЫ: Всего 25 изменений.

#20 05.02.2012 22:56:21

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

#21 14.02.2012 20:05:17

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Здравствуйте! Представляю новую версию программы 0.4.7. Добавился файл с константами:

//const.h
//Определение путей констант, в соответствии с системой
#if defined(Q_WS_WIN)

    #define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwst"
    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()
    #define PATH_TMP QApplication::applicationDirPath()


#elif defined(Q_WS_X11)

    #define PATH_TMP_SET "/tmp/shelk-test-0.4.7/settings.xwst"
    #define PATH_SHARE_DOC "/usr/share/doc/shelk-test-0.4.7"
    #define PATH_SHARE_APP "/usr/share/shelk-test-0.4.7"
    #define PATH_TMP "/tmp/shelk-test-0.4.7"

#elif defined(Q_WS_MAC)

    #define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwst"
    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()
    #define PATH_TMP QApplication::applicationDirPath()


#endif

#define MODE_VIEW true
#define MODE_EDIT false

#define LANGUAGE_RUSSIAN true
#define LANGUAGE_ENGLISH false

#define TOOLBAR_SHOW true
#define TOOLBAR_HIDE false

#define STATISTICS_FIELD_SHOW true
#define STATISTICS_FIELD_HIDE false

#define VIEW_RUSSIAN 0
#define VIEW_ENGLISH 1
#define EDIT_RUSSIAN 2
#define EDIT_ENGLISH 3

//Типы вопросов
#define TYPE_ONE_ANSWER "1"
#define TYPE_MANY_ANSWERS "2"
#define TYPE_ENTER_WORD "3"
#define TYPE_ENTER_NUMBER "4"
#define TYPE_INSTALLATION_SEQUENCE "5"

Добавилась новая структура, но в коде она пока не задействована:
//Структура показа полей статистики
struct TStateFieldStatistics
{
     bool bUserName,//Имя пользователя
          bNameTest,//Название теста
          bTotalQuestions,//Всего вопросов
          bCorrectAnswers,//Правильных ответов
          bWrongAnswers,//Неправильных ответов
          bTotalPoints,//Всего баллов
          bScore,//Оценка
          bDate,//Дата
          bTimeBegin,//Время начала
          bTimeEnd,//Время окончания
          bElapsedTime;//Прошедшее время
};
Оптимизирована функция изменения шрифта(была 195 строк):
        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;
Скачать

#22 15.02.2012 07:36:32

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода


    #define PATH_TMP_SET "/tmp/shelk-test-0.4.7/settings.xwst"
    #define PATH_SHARE_DOC "/usr/share/doc/shelk-test-0.4.7"
    #define PATH_SHARE_APP "/usr/share/shelk-test-0.4.7"
    #define PATH_TMP "/tmp/shelk-test-0.4.7"

Мало того, что "зашитые" пути в коде это..... некрасиво (ИМХО)
Так еще и править надо из версии в версию.

#23 15.02.2012 07:54:29

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода


    #define PATH_TMP_SET "/tmp/shelk-test-0.4.7/settings.xwst"
    #define PATH_SHARE_DOC "/usr/share/doc/shelk-test-0.4.7"
    #define PATH_SHARE_APP "/usr/share/shelk-test-0.4.7"
    #define PATH_TMP "/tmp/shelk-test-0.4.7"

Мало того, что "зашитые" пути в коде это..... некрасиво (ИМХО)
Так еще и править надо из версии в версию.
Пруфлинк?

#24 15.02.2012 08:40:59

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

На что?
На то что зашитые пути плохо? oO
Это мое имхо я ж сказал.

То что править версии надо.... Ну, а как если у вас текущая версия программы указанна в 100500 строках кода?

Заодно про винду:


Application::applicationDirPath()

Судя по использованию "temp" в имени. Вы туда собираетесь что то писать. Вопрос на засыпку: в правильно настроенной системе можно ли писать в Application::applicationDirPath()?

Кроме того уж для временного каталога можно нормально и кросплатформенно получить: QDir::tempPath ()
А еще temp(), currentPath(), homePath() и rootPath(); QCoreApplication::libraryPaths (); QTemporaryFile ()

#25 15.02.2012 20:53:26

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

#./configure
# installation paths
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/ffmpeg'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
Нашёл информацию но, ближайшие полгода я этим заниматься не буду :o .
В приведённом выше коде возможна только одна установка, у меня же можно установить несколько разных версий, которые абсолютно не будут друг другу мешать, это не unix-way, поэтому я крепко над этим задумаюсь.

#26 18.02.2012 22:19:24

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Новая и последняя на данный момент версия 1.0.0. Здесь я постарался конкретно. Изменения:

- Добавились новые возможности: проверка наличия новой версии через интернет; печать теста; печать статистики; экспорт тестов в HTML, RTF, PDF, PostScript, простой текстовый формат;
- Добавлено использование системных временных каталогов для размещения временных файлов;
- Изменилось расположение файла статистики по-умолчанию на домашний каталог пользователя;
- Изменилась кодировка файла статистики на UTF-8:
- Изменилась кодировка импортируемого текстового файла на UTF-8;
//Новые константы
//Типы вопросов для определения содержимого переменной QVariant
#define V_TYPE_ONE_ANSWER QVariant::Int
#define V_TYPE_MANY_ANSWERS QVariant::ByteArray
#define V_TYPE_ENTER_WORD QVariant::String
#define V_TYPE_ENTER_NUMBER QVariant::Double
#define V_TYPE_INSTALLATION_SEQUENCE QVariant::StringList

//Перевод слов в rtf-unicode
QString ShelkTest::WordToUnicode(QString sWord)
{
    QString sTemp,
            sNum;
    sTemp.clear();
    for (int i = 0; i < sWord.length(); i++)
    {
        sNum.setNum(sWord.at(i).unicode());
        sTemp.append("\\u" + sNum + "?");
    }
    return sTemp;
}


Далее, задействовал webkit:
private: QWebView *wvUpdate;//Для обновления и печати :)
, так как QTextEdit и QTextBrowser не могут отображать элементы ввода(текст, переключатель, флажок), для формирования правильной html-ки. Раз уж было принято решение добавить новую зависимость от библиотеки QtWebkit, то на его же основе я сделал проверку наличия новой версии через интернет, смотрим:
void ShelkTest::slotCheckForUpdates()
{
    connect(wvUpdate, SIGNAL(loadFinished(bool)), SLOT(slotMakeCheckUpdates(bool)));
    wvUpdate->load(QUrl("http://labfreetech.org/shelk_1.0.0.html"));
}

void ShelkTest::slotMakeCheckUpdates(bool bError)
{
    if (bError && wvUpdate->page()->findText("new_version")) QMessageBox::information(0, tr("Information"), tr("On the official website available a new version!"));
    else QMessageBox::information(0, tr("Information"), tr("You have the latest version!"));
    disconnect(wvUpdate, SIGNAL(loadFinished(bool)), 0, 0);
}
Как видно - всё просто. Если текст "new_version" найден в загруженной html-ке, то есть новая версия :)
Чтобы сделать всё так, как я задумал - пришлось использовать новый метод disconnect, который я ранее не использовал и всё получилось.

Теперь за кодом можно наблюдать не дожидаясь релиза. В git создана новая ветка current. Скачать.

#27 18.02.2012 22:38:52

Fat-Zer
Administrator
Зарегистрирован: 14.10.2010
Сообщений: 4 977
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

по поводу путей и версий: очень советую освоить для этих целей утилиты сборки в частности cmake. можно и autotools, но ИМХО - это каторжный труд...
На крайний, случай дефайнов у вас не так много, можно всю логику и в qmake'е уместить...

#28 19.02.2012 19:30:46

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

, так как QTextEdit и QTextBrowser не могут отображать элементы ввода(текст, переключатель, флажок), для формирования правильной html-ки. Раз уж было принято решение добавить новую зависимость от библиотеки QtWebkit, то на его же основе я сделал проверку наличия новой версии через интернет, смотрим:

Гуевый класс для проверки последней версии???? Это типа как микроскопом гвозди.

я бы на вашем месте создал отдельный поток, в нем объект класса QNetworkAccessManager (еще лучше унаследуйтесь от него)..... Эта задача с ГУИ вообще ни как не связана, а вы QWebView припахали. Наследника от этого же класса можно припахать и к скачиванию новой версии. Тут уж объеденять это в одном классе или нет вам решать. Я в одном проекте такое делал, но оно было разделено по классам, т.к. первый кроме проверки версий еще много каких сетевых функций делал.

#29 19.02.2012 19:52:10

xwicked
Administrator
Зарегистрирован: 02.08.2011
Сообщений: 114
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Основная задача - это печать правильной html-ки. А с сетью я, в ближайшем будущем связываться не буду - программы все ещё сырые для дистрябов unix'овых wink

#30 20.02.2012 04:20:58

voral
Administrator
Зарегистрирован: 23.02.2010
Сообщений: 1 964
IP-адрес

Программа для создания тестов. Обсуждение программы и кода

Какой смысл ваять временные костыли, чтобы потом переписывать? Это ж не отнимет больше времени чем заняло у вас. Если вы не вынесли в отдельный поток так же можно сделать и с акцессменеджером. Правда это в обоих случаях как то не правильно.

Board footer