[英]How to use the QVector with multiple object
我正在尝试使用Qt
的QVector
类来工作(对我来说: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
。 之后,我可以将其传递给另一堂课。 从那里我应该能够从它们中提取文本( questionText
和questionExplanation
)。
我认为您想要的是: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.