我正在尝试使用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
中。之后我可以将它传递给另一个班级。从那里我应该能够从中提取文本(questionText
和questionExplanation
)。
答案 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);
}
}
感谢您的帮助。