Russian Qt Forum

Разное => Объявления => Тема начата: xwicked от Август 15, 2011, 17:02



Название: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Август 15, 2011, 17:02
Здравствуйте!

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

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

Скрин последней версии:
(http://labfreetech.org/shelk.gif)

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

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

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

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

Обсуждаем.


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: SeverusSnape от Август 15, 2011, 17:47
А у вас еще много программ?


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Август 15, 2011, 21:16
А у вас еще много программ?
Есть ещё одна переделка кроссворда под Lazarus  в стадии первой бета-версии. Вроде следующие только в планах...


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: serg_hd от Август 16, 2011, 00:55
А у вас еще много программ?
;D ;D


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: panAlexey от Август 17, 2011, 18:27
Интерфейс - без бутылки не разберешся...


Название: Минималистичный интерфейс
Отправлено: xwicked от Август 19, 2011, 08:15
Интерфейс - без бутылки не разберешся...
:o  Вы значит не видели Mac OS...  :D


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: surendil от Август 19, 2011, 10:52
Мм.. а как редактирование будет происходить, если все вопросы, ответы и изображения будут в исходниках "зашиты"? Я немного не догоняю похоже :D


Название: Re: Минималистичный интерфейс
Отправлено: panAlexey от Август 19, 2011, 15:18
Интерфейс - без бутылки не разберешся...
:o  Вы значит не видели Mac OS...  :D
что-то теперь и не хочется.
ПС. но мне кажется что дело не в макоси.
ПС2. Что-то мне кажется что для таких веток надо другую секцию заводить.


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: surendil от Август 20, 2011, 10:35
А что с интерфейсом? Интерфейс как интерфейс, получше чем у многих бухгалтерских и строительных прог :D


Название: Re: Минималистичный интерфейс
Отправлено: Igors от Август 20, 2011, 13:43
:o  Вы значит не видели Mac OS...  :D
Ну по крайней мере один пользователь Mac попытался посмотреть один из Ваших продуктов.....
Я понимаю как нелегко на незнакомой платформе. Поэтому не вдаваясь в подробности: если нет необходимости - лучше не поддерживать Mac (вместо того чтобы мучать кошек)


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: panAlexey от Август 20, 2011, 16:01
А что с интерфейсом? Интерфейс как интерфейс, получше чем у многих бухгалтерских и строительных прог :D
Да мне бы руки за такой ифейс отбили.


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: surendil от Август 21, 2011, 00:42
А что с интерфейсом? Интерфейс как интерфейс, получше чем у многих бухгалтерских и строительных прог :D
Да мне бы руки за такой ифейс отбили.
У вас хорошая работа, правда :)


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Август 29, 2011, 23:16
Здравствуйте!

Вот новая версия (http://sourceforge.net/projects/shelk-test/files/0.3.5/) 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, сборки программы уже снова полнофункциональны. Прошу извинить меня за данное неудобство.


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Октябрь 21, 2011, 16:31
Для распространения программы между 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".


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Ноябрь 07, 2011, 00:52
Продолжаем знакомиться с кодом (http://sourceforge.net/projects/shelk-test/files/0.4.1/). Версия 0.4.1 Включает в себя следующие изменения:
Цитировать
- Исправлена ошибка в реализации типа вопроса "Ввод числа";
- Исправлена ошибка в реализации типа вопроса "Установка последовательности";
- Добавлена возможность вставки изображения в вопрос теста;
- Добавлены горячие клавиши;
- Добавлена возможность использования баллов;
- Добавлена возможность ввода имени тестируемого;
- Добавлена статистика.
Статистика - это первый вариант журнала отчёта о протестировавшихся студентах, представлена обычным html-файлом:
Код
C++ (Qt)
           QFile file("/tmp/shelk-test-0.4.1/Stat.html");
           QDataStream sfile(&file);
           if(!file.exists())
           {
               file.open(QIODevice::WriteOnly);
               strStat.clear();
               strStat.append("<HTML>\n"
                              " <BODY>\n"
                              "  <TABLE border=\"3\">\n"
                              "   <TR>\n"
                              "    <TD> " + tr("User name") + " </TD>\n"
                              "    <TD> " + tr("Name test") + " </TD>\n"
                              "    <TD> " + tr("Total questions") + " </TD>\n"
                              "    <TD> " + tr("Correct answers") + " </TD>\n"
                              "    <TD> " + tr("Wrong answers") + " </TD>\n"
                              "    <TD> % </TD>\n"
                              "    <TD> " + tr("Total points:") + "  </TD>\n"
                              "    <TD> " + tr("Date") + "  </TD>\n"
                              "    <TD> " + tr("Time end") + "  </TD>\n"
                              "   </TR>\n"
                              "   <TR>\n"
                              "    <TD>" + UserName + "</TD>\n"
                              "    <TD>" + StatNameTest + "</TD>\n"
                              "    <TD>" + sTotalQuestions + "</TD>\n"
                              "    <TD>" + sCorrectAnswer + "</TD>\n"
                              "    <TD>" + sWrongAnswer + "</TD>\n"
                              "    <TD>" + strPercent + "</TD>\n"
                              "    <TD>" + sAllPoint + "</TD>\n"
                              "    <TD>" + strDate + "</TD>\n"
                              "    <TD>" + strTime + "</TD>\n"
                              "   </TR>\n"
                              "  </TABLE>\n"
                              " </BODY>\n"
                              "</HTML>\n");
               sfile << strStat;
               file.close();
               FormStat.StatLabel->setText(strStat);
           }
Есть что-нибудь проще или для начала сойдёт?


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Ноябрь 22, 2011, 22:28
Здравствуйте!  Программа продолжает совершенствоваться и версия 0.4.2 (http://"http://sourceforge.net/projects/shelk-test/files/0.4.2/") включает 25 изменений. Было изменено отображение картинки в тесте. Теперь используется рисование непосредственно на виджите:
Код
C++ (Qt)
//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;


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Январь 26, 2012, 20:15
0.4.3 - это новая версия программы.

Здравствуйте (http://"http://sourceforge.net/projects/shelk-test/files/0.4.3/")! :)

Цитировать
      - Добавлено шифрование и сжатие экспортируемого файла теста в формате xwt;
      - Исправлена ошибка, когда пароль режима программы хранился и проверялся в открытом виде;
      - Добавлена возможность работать с несколькими хранилищами тестов;
      - Добавлена возможность резервировать хранилище тестов(со сжатием до 5-ти раз(!));
      - Добавлена возможность запроса на сохранение теста, при его закрытии;
Код
C++ (Qt)
   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 изменений.


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Февраль 06, 2012, 01:52
0.4.4. Исправлено 15 ошибок(!). Появились 2-е структуры:
Код
C++ (Qt)
//Структура файла свойств
struct sFileSettings
{
    bool gRegimeViewing,//true - Режим просмотра, false - Режим редактирования
 LanguageProgram,//Язык программы
 bStandardPanel,//Состояние показа стандартной панели
 bEditPanel,//Состояние показа панели редактирования
 bFormatPanel,//Состояние показа панели форматирования
 bTimePanel,//Состояние показа панели времени
 bPointPanel,//Состояние показа панели баллов
 bLimitTime,//Ограничение времени
 bAutoStartTest;//Автоматический запуск
    QString RegimePassword;//Пароль режима
};
 
//Структура теста
struct sShelkTestVar
{
    QString sNameTest,//Название теста
    sAllPoint,//Все баллы строкой
    sMidPoint,//Средний балл строкой
    sCurrentPoint,//Текущий балл строкой
    sTypeQuestion,//Тип вопроса
    TestPassword,//Пароль теста
    StatNameTest,//Имя пользователя в статистике
    sQuestion,//Текст вопроса
    sTimeStart;//Время начала
 
int CountQuestion,//Количество вопросов
iNumberQuestion,//Номер вопроса
iNumberTest,//Номер теста
AllPoint,//Общий балл
MidPoint,//Средний балл
CurrentPoint,//Текущий балл
AllPointCheck,//Общий балл для проверки
AllTime,//Общее время
MidTime,//Среднее время
CurrentTime,//Текущее время
i5First;//Номер прошлого выделенного ответа (установка последовательности)
 
    QVector<double> *iRangeFirst,//Начальное значение диапазона (ввод числа)
                    *iRangeLast;//Конечное значение диапазона (ввод числа)
 
    QStringList ListQuestions,//Список вопросов
                slTableNumber,//Список номеров таблиц в базе тестов
                slQuestionType,//Список типов вопросов
                slPoint,//Список баллов
                slTime;//Список времени
 
    QVector<QVariant> *ListRightAnswer,//Список правильных ответов
                      *ListCheckRightAnswer;//Список правильных ответов для проверки
 
    QVector<QStringList> *ListAnswers;//Список ответов
    QVector<QByteArray> *ListImages;//Список изображений
    QVector<QFont> *ListFonts;//Список шрифтов
    QSqlDatabase db;//База данных тестов
 
    QTimer TimerTest,
           TimerTestLabel;
    QTime TimeTestCurrent,
          TimeTestAll;
};
Их было решено использовать сразу, после выхода кроссворда за предел стека   ;D
Введение вектора типа QVariant позволило функцию проверки ответов максимально упростить и вынести отдельно:
Код
C++ (Qt)
bool ShelkTest::MakeCheckRightAnswer(int iIndex)
{
   int iTypeR;
   QString str1, str2;
   QByteArray ba1, ba2;
 
   iTypeR = vShelkTestVar->ListRightAnswer->at(iIndex).type();
 
       if(iTypeR == QVariant::Int)
           {
               if(vShelkTestVar->ListRightAnswer->at(iIndex).toInt()
                   == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toInt())
                   return true;
               else return false;
           }
 
       if(iTypeR == QVariant::Double)
           {
               if(vShelkTestVar->ListRightAnswer->at(iIndex).toDouble()
                   == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toDouble())
                   return true;
               else return false;
           }
 
       if(iTypeR == QVariant::String)
           {
               if(vShelkTestVar->ListRightAnswer->at(iIndex).toString()
                   == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toString())
                   return true;
               else return false;
           }
 
       if(iTypeR == QVariant::ByteArray)
           {
               ba1.append(vShelkTestVar->ListRightAnswer->at(iIndex).toByteArray());
               ba2.append(vShelkTestVar->ListCheckRightAnswer->at(iIndex).toByteArray());
               str1.append(vShelkTestVar->ListRightAnswer->at(iIndex).toByteArray());
               str2.append(vShelkTestVar->ListCheckRightAnswer->at(iIndex).toByteArray());
 
               if(vShelkTestVar->ListRightAnswer->at(iIndex).toByteArray()
                   == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toByteArray())
                   return true;
               else return false;
           }
 
       if(iTypeR == QVariant::StringList)
           {
               if(vShelkTestVar->ListRightAnswer->at(iIndex).toStringList()
                   == vShelkTestVar->ListCheckRightAnswer->at(iIndex).toStringList())
                   return true;
               else return false;
           }
       return false;
}
Несмотря на то, что QVariant не рекомендуется использовать из за большого потребления памяти, так как он позволяет хранить даже контейнеры(!), я решил сделать это. Использование один раз в масштабах простой программы для создания тестов показала свою рентабельность.
Скачать (http://sourceforge.net/projects/shelk-test/files/0.4.4/)


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Февраль 14, 2012, 22:58
Здравствуйте! Представляю новую версию программы 0.4.7. Добавился файл с константами:
Код
C++ (Qt)
//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"
Добавилась новая структура, но в коде она пока не задействована:
Код
C++ (Qt)
//Структура показа полей статистики
struct TStateFieldStatistics
{
    bool bUserName,//Имя пользователя
         bNameTest,//Название теста
         bTotalQuestions,//Всего вопросов
         bCorrectAnswers,//Правильных ответов
         bWrongAnswers,//Неправильных ответов
         bTotalPoints,//Всего баллов
         bScore,//Оценка
         bDate,//Дата
         bTimeBegin,//Время начала
         bTimeEnd,//Время окончания
         bElapsedTime;//Прошедшее время
};
Оптимизирована функция изменения шрифта(была 195 строк):
Код
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://"http://sourceforge.net/projects/shelk-test/files/0.4.7/")


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: kambala от Февраль 15, 2012, 01:44
a перечисления не любишь?


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Февраль 16, 2012, 17:53
a перечисления не любишь?
Я люблю всё, что не противоречит здравому смыслу(о как завернул  8) ), оптимизировать буду обязательно  ;D


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Февраль 19, 2012, 01:13
Новая и последняя на данный момент версия 1.0.0. Здесь я постарался конкретно. Изменения:
Цитировать
- Добавились новые возможности: проверка наличия новой версии через интернет; печать теста; печать статистики; экспорт тестов в HTML, RTF, PDF, PostScript, простой текстовый формат;
- Добавлено использование системных временных каталогов для размещения временных файлов;
- Изменилось расположение файла статистики по-умолчанию на домашний каталог пользователя;
- Изменилась кодировка файла статистики на UTF-8:
- Изменилась кодировка импортируемого текстового файла на UTF-8;
Код
C++ (Qt)
//Новые константы
//Типы вопросов для определения содержимого переменной 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:
Код
C++ (Qt)
private: QWebView *wvUpdate;//Для обновления и печати :)
, так как QTextEdit и QTextBrowser не могут отображать элементы ввода(текст, переключатель, флажок), для формирования правильной html-ки. Раз уж было принято решение добавить новую зависимость от библиотеки QtWebkit, то на его же основе я сделал проверку наличия новой версии через интернет, смотрим:
Код
C++ (Qt)
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 (http://sourceforge.net/scm/?type=git&group_id=556929). Скачать (http://sourceforge.net/projects/shelk-test/files/1.0.0/).


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: kambala от Февраль 19, 2012, 01:43
для типов существует typedef.

зачем в методы передавать объекты по значению?

очищать заведомо пустую строку - гениально.

в английском языке с порядком слов всё куда более строго, чем в русском, да и глагол там должен присутствовать, так что "A new version is available on the official website!". ну и неплохо бы собственно показывать номер новой версии.


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Февраль 19, 2012, 03:52
для типов существует typedef.

зачем в методы передавать объекты по значению?

очищать заведомо пустую строку - гениально.

в английском языке с порядком слов всё куда более строго, чем в русском, да и глагол там должен присутствовать, так что "A new version is available on the official website!". ну и неплохо бы собственно показывать номер новой версии.
Объекты по значению - это первый вариант реализации.
Про очистку, возможно был прецедент или я до сих пор чего-то не знаю :(
"A new version is available on the official website!" - Звучит возможно лучше, но если что-то и менять, то только весь перевод, а так пусть пока будет как есть.
Про номер версии - это пока для меня слишком жирно будет - я не написал ещё ни строчки кода для работы с сетью, поэтому буду изучать сеть много позже.


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Июль 31, 2012, 22:46
Очередная версия программы 1.5.1. Часть переменных сгруппирована и выделена в отдельные классы:
TAnswer,//Ответ
TQuestion,//Вопрос
TTest,//Тест
TDepository,//Хранилище
 TFileOptions//файл свойств
Код
C++ (Qt)
...
   QString s_NameTest;//Название теста
   QByteArray ba_TestPassword;//Пароль теста
 
public:
 
   QVector<TQuestion> vListQuestions;//Список вопросов
   QVector<TAnswer> vListAnswers;//Список ответов
 
   QTimer TimerTest;
   QTimer TimerTestLabel;
   QTime TimeTestCurrent;
   QTime TimeTestAll;
 
   TTest();
   ~TTest();
 
   int countQuestions() const;//Получить количество вопросов
   void setCountQuestions(int iCountQuestions);//Задать количество вопросов ...
Всё работает нормально, но память очищается не вся. :( Вектора списков вопросов и ответов, при вызове стандартного метода clear(), возможно неполностью очищают своё содержимое. Сделал так:
Код
C++ (Qt)
   for (int i = 0; i < TestDepository->Test->vListQuestions.count(); i++)
   {
       TestDepository->paTemp[i].clear();//Указатель на TestDepository->Test->vListAnswers
       TestDepository->pqTemp[i].clear();//Указатель на TestDepository->Test->vListQuestions
   }
 
   TestDepository->TestAnswer.clear();
   TestDepository->TestQuestion.clear();
   TestDepository->Test->vListAnswers.clear();
   TestDepository->Test->vListQuestions.clear();
 
всё равно после недолгой работы(открытий / закрытий тестов) с программой. Остаётся, при закрытии ~3 МБ не выгружено. По, что это мелочь, но ...

Изменения:
Цитировать
- Оптимизация процесса сохранения теста(~10 раз(!)) в базу хранилища;
- Декомпозиция программы на отдельные классы, с занесением части переменных в секцию private;
- Добавлена возможность использовать дифференцированную или недифференцированную систему оценивания;
- Добавлены возможности: удалённого расположения файла свойств программы; ограничивать время для всего теста; пропуска вопросов, при тестировании; перемешивания вопросов; настраиваемого показа полей статистики; запоминать последнюю открытую базу хранилища; не показывать результаты тестируемому; ограничивать количество задаваемых вопросов из общего числа;
Скачать (http://"http://sourceforge.net/projects/shelk-test/files/1.5.1/")


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Ноябрь 17, 2012, 18:36
1.5.2 - скачать (http://"http://sourceforge.net/projects/shelk-test/files/1.5.2")
Цитировать
- Теперь сохранение свойств программы происходит при каждом их изменении;
- Убрана чувствительность регистра ответа в вопросе типа "Ввод слова(предложения)";
- Исправлена ошибка ограничения количества вопросов в режиме редактирования;
- Добавлено новое поле статистики "Количество заданных вопросов из общего числа";
- Исправлена ошибка, когда нельзя было ввести вариант ответа, при увеличении и обратном уменьшении изображения, в вопросе "Ввод слова(предложения)";
- Изменено и отлажено автоматическое определение пропущенных вопросов, при тестировании;
- Добавлена дополнительная детализация к статистике протестировавшихся;
В следующей версии я хочу прикрутить веб-интрефейс тестируемого. Собираюсь использовать JavaScript(или Java? а возможно C++?) + свой простейший веб-сервер(на C++ для AJAX). Какие вопросы / проблемы меня могут поджидать?

Благодарю за ответы!


Название: Re: Программа для создания тестов. [Обсуждение программы и кода]
Отправлено: xwicked от Ноябрь 03, 2013, 20:50
По-тихоньку идёт совершенствование программы. И сейчас от основного кода был отделён модуль Тестирование.

Пршу протестировать на наличие ошибок первую бета-версию: 1.6.2.0 (http://sourceforge.net/projects/shelk-test/files/1.6.2/). Для полноценной проверки может потребоваться прошлая версия 1.5.2 (http://sourceforge.net/projects/shelk-test/files/1.5.2/).

Благодарю за ответы!