2

我正在尝试使用该QVector课程Qt来工作(对我来说:P)。我想要做的是将对象的多个实例Question放在一个QVector.

我参加了多个论坛,但由于我是初学者,它们对我来说都太复杂了。这篇文章很完美,但我没有找到解决问题的方法。

所以我转向你来帮助我!

这是我想要工作的功能:

创建捆绑包/向量的部分

/**
 * @brief MenuQuestionnary::assembleQuiz
 * Assemble the bundle of question that will be used in Quiz class
 */
void MenuQuestionnary::assembleQuiz(){
    QVector<Question> vectorQuiz;
    vectorQuiz.reserve(spinBoxNumberOfQuestion->value());
    for(int i = 0; i <= spinBoxNumberOfQuestion->value(); i++){
        vectorQuiz.append(Question((qrand()% maximumNumberOfQuestionAvailable)));
    }
}

这是我的问题构造函数:

Question::Question(int id)
{
    this->questionId = id;

    //TODO: Actually get it from DB
    this->questionText = "2+2?";
    this->explanation = "Addition mechanics";
    this->creatorId = 1;

}

我希望在这里做的是将选定的Question对象编号放入vector. 之后我可以将它传递给另一个班级。从那里我应该能够从中提取文本(questionTextquestionExplanation)。

4

4 回答 4

3

您正在尝试将类类型的对象推Question入 a QVector<int>,这显然是在期待 a int。您应该将其更改QVector<Question>为开始。

不过,我强烈建议您在进一步学习之前阅读一本关于 C++ 的好书,否则您对它的体验会变得越来越复杂。

从互联网上的论坛复制粘贴代码不是编程,很快就会给你带来麻烦。

于 2014-02-02T13:56:30.483 回答
0

我想你想要的是这个:QVector vectorQuiz; vectorQuiz.reserve(spinBoxNumberOfQuestion->value()); // 在向量中为性能保留正确的空间量(不是必需的)。我不知道你将如何使用vectorQuiz,但也许你应该使用指向问题的指针,即QVector并使用new Question()插入问题

/**
 * @brief MenuQuestionnary::assembleQuiz
 * Assemble the bundle of question that will be used in Quiz class
 */
void MenuQuestionnary::assembleQuiz(){
    int iVectorSize = spinBoxNumberOfQuestion->value();
    QVector<Question> vectorQuiz;
    vectorQuiz.reserve(iVectorSize ); 

    for(int i = 0; i <= iVectorSize ; ++i){
        vectorQuiz.append(Question(i));
    }

}
于 2014-02-02T13:32:43.700 回答
0

您的对象 (vectorQuiz) 声明为整数向量。如果你想给它添加一些整数值,你应该写一些东西:

vectorQuiz.append( someIntegerValue );

或者

vectorQuiz.push_back( someIntegerValue );

对于另一种类型的向量(即问题),编写如下代码:

QVector<Question> vectorQuiz;
// ...
for(int i = 0; i <= spinBoxNumberOfQuestion->value(); ++i){
    vectorQuiz.append(Question(i)); // without [i] after vector object
}

并且您可能应该在 for-cycle 中使用严格的不等式<而不是<=(但我不确定)。

于 2014-02-02T13:50:04.567 回答
0

我通过尝试几件事解决了这是我所做的解释

我把我的功能一分为二。第一个将元素放入 aQList中,第二个将其洗牌。

/**
 * @brief MenuQuestionnary::assembleQuiz
 * @param list
 * Asseble a quiz in the Qlist and then ask shuffle to shuffle it...
 */
void MenuQuestionnary::assembleQuiz(QList<Question> &list){
    for(int i = 0; i < spinBoxNumberOfQuestion->value(); ++i){
        int rand = qrand() * maximumNumberOfQuestionAvailable;
        Question newQuestion(rand);
        list.append(newQuestion);
    }
    shuffleQuiz(list);
}

/**
 * Method Shuffle
 * equivalent to shuffling a deck of cards: we take a random one, move it to be the last one,
 * then do it again enough times to have statistically touched every card.
 */
void MenuQuestionnary::shuffleQuiz(QList<Question> &list){
    int iters = list.size() * list.size();
    for (int i = 0; i < iters; ++i){
        int rand = qrand() * list.size();
        list.append(list[rand]);
        list.removeAt(rand);
    }
}

不过感谢您的帮助。

于 2014-02-03T20:02:52.860 回答