繁体   English   中英

如何将QVector与多个对象一起使用

[英]How to use the QVector with multiple object

我正在尝试使用QtQVector类来工作(对我来说: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::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 )。

您正在尝试将类类型Question对象推入QVector<int> ,这显然是一个int 首先,应将其更改为QVector<Question>

但是,我强烈建议您在继续学习之前阅读一本关于C ++的好书 ,否则您的使用经验将变得越来越复杂。

从Internet上的论坛复制粘贴代码编程,并且很快会给您带来麻烦。

我认为您想要的是:QVector vectorQuiz; vectorQuiz.reserve(spinBoxNumberOfQuestion->值()); //在向量中保留正确的空间量以提高性能(不是必需的)。 我不知道您将如何使用vectorQuiz,但是也许您应该使用指向问题的指针,例如QVector并使用新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));
    }

}

您的对象(vectorQuiz)声明为整数向量。 如果要向其中添加一些整数值,则应编写一些内容:

vectorQuiz.append( someIntegerValue );

要么

vectorQuiz.push_back( someIntegerValue );

对于其他类型的向量(即Question),请编写如下代码:

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

可能您应该在循环中使用严格的不等式<而不是<= (但我不确定)。

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

我将我的功能一分为二。 第一个将元素放入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);
    }
}

谢谢您的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM