From a9e773f82d82f5934a4088a7e7cb751cf14c3212 Mon Sep 17 00:00:00 2001 From: Reto Zingg Date: Sat, 27 Mar 2010 01:53:34 +0200 Subject: [PATCH] add multiple choice --- TinyVocTrainer/TinyVocTrainer.pro | 6 +- TinyVocTrainer/tinyvoctrainer.cpp | 99 +++++++++++++++++++++++++------ TinyVocTrainer/tinyvoctrainer.h | 17 +++++- 3 files changed, 99 insertions(+), 23 deletions(-) diff --git a/TinyVocTrainer/TinyVocTrainer.pro b/TinyVocTrainer/TinyVocTrainer.pro index 2f330f9..ebfea40 100644 --- a/TinyVocTrainer/TinyVocTrainer.pro +++ b/TinyVocTrainer/TinyVocTrainer.pro @@ -3,13 +3,13 @@ # ------------------------------------------------- TARGET = TinyVocTrainer TEMPLATE = app -LIBS += -L/home/rzingg/kedu/git/lib \ +LIBS += -L../lib \ -lkeduvocdocument DEPENDPATH += . \ - /home/rzingg/kedu/git/lib + ../lib INCLUDEPATH += . \ /home/rzingg/kedu/git/lib -QMAKE_LFLAGS += -Wl,-rpath,/home/rzingg/kedu/git/lib +QMAKE_LFLAGS += -Wl,-rpath,../lib SOURCES += main.cpp \ tinyvoctrainer.cpp HEADERS += tinyvoctrainer.h diff --git a/TinyVocTrainer/tinyvoctrainer.cpp b/TinyVocTrainer/tinyvoctrainer.cpp index 6c28f8e..beafc72 100644 --- a/TinyVocTrainer/tinyvoctrainer.cpp +++ b/TinyVocTrainer/tinyvoctrainer.cpp @@ -19,27 +19,42 @@ TinyVocTrainer::TinyVocTrainer(QWidget *parent) QHBoxLayout *hbox_less = new QHBoxLayout(); QHBoxLayout *hbox_question_lang = new QHBoxLayout(); QHBoxLayout *hbox_answer_lang = new QHBoxLayout(); - QHBoxLayout *hbox_buttons = new QHBoxLayout(); - QHBoxLayout *hbox_label = new QHBoxLayout(); + QVBoxLayout *vbox_label = new QVBoxLayout(); - QPushButton *button = new QPushButton("Next"); - - hbox_buttons->addWidget(button); - - connect(button, SIGNAL(clicked(bool)), this, SLOT(slotNext(bool))); bgroup_lesson = new QButtonGroup(); bgroup_question_lang = new QButtonGroup(); bgroup_answer_lang = new QButtonGroup(); + bgroup_choice = new QButtonGroup(); QuestionLabel = new QLabel(); QuestionLabel->setText("Here comes..."); - hbox_label->addWidget(QuestionLabel); - + vbox_label->addWidget(QuestionLabel); + + answer1 = new QPushButton; + answer2 = new QPushButton; + answer3 = new QPushButton; + vbox_label->addWidget(answer1); + vbox_label->addWidget(answer2); + vbox_label->addWidget(answer3); + answerButtonsList.append(answer1); + answerButtonsList.append(answer2); + answerButtonsList.append(answer3); + bgroup_choice->addButton(answer1); + bgroup_choice->setId(answer1, 0); + bgroup_choice->addButton(answer2); + bgroup_choice->setId(answer2, 1); + bgroup_choice->addButton(answer3); + bgroup_choice->setId(answer3, 2); + + connect(answer1,SIGNAL(clicked(bool)),this,SLOT(slotAnswer1(bool))); + connect(answer2,SIGNAL(clicked(bool)),this,SLOT(slotAnswer2(bool))); + connect(answer3,SIGNAL(clicked(bool)),this,SLOT(slotAnswer3(bool))); questionID = 0; answerID = 0; lessonID = 0; + CorrectID = 0; QLabel *label_question = new QLabel("Question:"); hbox_question_lang->addWidget(label_question); @@ -76,6 +91,9 @@ TinyVocTrainer::TinyVocTrainer(QWidget *parent) connect(radio_answer_lang, SIGNAL(toggled(bool)), this, SLOT(reactToToggleAnswerLang(bool))); } + bgroup_question_lang->button(0)->click();; + bgroup_answer_lang->button(1)->click(); + int lessonId = 0; foreach(KEduVocContainer * c, lessons) { if (c->containerType() == KEduVocLesson::Lesson) { @@ -97,13 +115,15 @@ TinyVocTrainer::TinyVocTrainer(QWidget *parent) ++lessonId; } + bgroup_lesson->button(0)->click(); + vbox->addLayout(hbox_less); vbox->addLayout(hbox_question_lang); vbox->addLayout(hbox_answer_lang); - vbox->addLayout(hbox_label); - vbox->addLayout(hbox_buttons); + vbox->addLayout(vbox_label); setLayout(vbox); + slotInit(); } TinyVocTrainer::~TinyVocTrainer() @@ -111,11 +131,12 @@ TinyVocTrainer::~TinyVocTrainer() } -QString TinyVocTrainer::getAnyEntryFromLesson(KEduVocLesson *lesson, int language) +KEduVocExpression * TinyVocTrainer::getAnyEntryFromLesson(KEduVocLesson *lesson, int language) { + Q_UNUSED(language); int random_int = ( rand() % ( lesson->entries().size() - 1 ) ) + 0; - qDebug() << "random_int: " << random_int << "Lesson Size: " << lesson->entries().size(); - return lesson->entry(random_int)->translation(language)->text(); + qDebug() << "anyEntry random_int: " << random_int << "Lesson Size: " << lesson->entries().size(); + return lesson->entry(random_int); } @@ -125,6 +146,7 @@ void TinyVocTrainer::reactToToggleQuestionLang(bool checked) if(checked){ qDebug() << "bgroup_question_lang: " << bgroup_question_lang->checkedId(); questionID = bgroup_question_lang->checkedId(); + // slotInit(); } } @@ -134,6 +156,7 @@ void TinyVocTrainer::reactToToggleAnswerLang(bool checked) if(checked){ qDebug() << "bgroup_answer_lang: " << bgroup_answer_lang->checkedId(); answerID = bgroup_answer_lang->checkedId(); + // slotInit(); } } @@ -143,11 +166,51 @@ void TinyVocTrainer::reactToToggleLesson(bool checked) if(checked){ qDebug() << "bgroup_lesson: " << bgroup_lesson->checkedId(); lessonID = bgroup_lesson->checkedId(); + // slotInit(); + } +} + +void TinyVocTrainer::slotAnswer1(bool clicked){ + Q_UNUSED(clicked); + slotCheck(0); +} + +void TinyVocTrainer::slotAnswer2(bool clicked){ + Q_UNUSED(clicked); + slotCheck(1); +} + +void TinyVocTrainer::slotAnswer3(bool clicked){ + Q_UNUSED(clicked); + slotCheck(2); +} + +void TinyVocTrainer::slotCheck(int buttonID){ + qDebug() << "slotCheck(): buton id: " << buttonID << "Correct Id: " << CorrectID; + + if(buttonID == CorrectID){ + qDebug() << "\\o/ correct answer..."; + slotInit(); + return; + } + else{ + qDebug() << ":-( sorry wrong..."; } + } -void TinyVocTrainer::slotNext(bool clicked){ - qDebug() << "lessonsList count: " << lessonsList.count(); - qDebug() << "lessonsList Name: " << lessonsList.at(lessonID)->name(); - QuestionLabel->setText( getAnyEntryFromLesson(lessonsList.at(lessonID), questionID) ); +void TinyVocTrainer::slotInit(){ + + choiceList.clear(); + for (int i=0; i < 3; ++i){ + choiceList.append( getAnyEntryFromLesson(lessonsList.at(lessonID), questionID) ); + answerButtonsList.at(i)->setText( choiceList.at(i)->translation(questionID)->text() ); + } + + int random_int = rand() % 3 + 0; + qDebug() << "ask for random_int: " << random_int; + + QuestionLabel->setText(choiceList.at(random_int)->translation(answerID)->text()); + CorrectID = random_int; + } diff --git a/TinyVocTrainer/tinyvoctrainer.h b/TinyVocTrainer/tinyvoctrainer.h index af58cdb..46bbef8 100644 --- a/TinyVocTrainer/tinyvoctrainer.h +++ b/TinyVocTrainer/tinyvoctrainer.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "keduvocdocument.h" #include "keduvoclesson.h" @@ -18,25 +19,37 @@ class TinyVocTrainer : public QWidget public: TinyVocTrainer(QWidget *parent = 0); ~TinyVocTrainer(); - QString getAnyEntryFromLesson(KEduVocLesson *lesson = 0, int language = 0); + KEduVocExpression * getAnyEntryFromLesson(KEduVocLesson *lesson = 0, int language = 0); QButtonGroup *bgroup_lesson; QButtonGroup *bgroup_question_lang; QButtonGroup *bgroup_answer_lang; + QButtonGroup *bgroup_choice; QList lessons; QList lessonsList; KEduVocDocument *docRead; QLabel *QuestionLabel; + QPushButton *answer1; + QPushButton *answer2; + QPushButton *answer3; + QList choiceList; + QList answerButtonsList; + int questionID; int answerID; int lessonID; + int CorrectID; private slots: void reactToToggleQuestionLang(bool checked = 0); void reactToToggleAnswerLang(bool checked = 0); void reactToToggleLesson(bool checked = 0); - void slotNext(bool clicked = 0); + void slotCheck(int buttonID = 0); + void slotAnswer1(bool clicked = 0); + void slotAnswer2(bool clicked = 0); + void slotAnswer3(bool clicked = 0); + void slotInit(); }; -- 2.47.3