如何使用具有多个对象的QVector

时间:2014-02-02 13:21:32

标签: c++ qt qlist qvector

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

我参加了多个论坛,但由于我是初学者,因此对我来说太复杂了。 这one post was perfect但我找不到解决问题的方法。

所以我转向你帮助我!

这是我想要工作的功能:

创建束/矢量

的部分
/**
 * @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 个答案:

答案 0 :(得分:3)

您正在尝试将类类型Question的对象推送到QVector<int>,这显然需要int。您应该将其更改为QVector<Question>以开始。

但我强烈建议您在继续学习C ++之前阅读a good book,否则您的体验会变得越来越复杂。

从互联网上的论坛复制粘贴代码是编程,很快就会让您陷入困境。

答案 1 :(得分:0)

我认为你想要的是:QVector vectorQuiz; vectorQuiz.reserve(spinBoxNumberOfQuestion-&GT;值()); //在向量中保留正确的空间量以提高性能(不是必需的)。我不确切知道你将如何使用vectorQuiz,但也许你应该使用指向问题的指针,即QVector并使用新问题插入问题()

/**
 * @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));
    }

}

答案 2 :(得分: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中使用严格的不等式&lt; 而不是&lt; = (但我不确定)。

答案 3 :(得分:0)

我通过尝试一些事情来解决它 这是我所做的解释

我把我的功能分成两部分。第一个将元素放在QList中,第二个将其洗牌。

/**
 * @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);
    }
}

感谢您的帮助。