C++ 如何将QVector用于多对象
我试图使用C++ 如何将QVector用于多对象,c++,qt,qlist,qvector,C++,Qt,Qlist,Qvector,我试图使用Qt中的QVector类来工作(对我来说:p)。我要做的是将对象的多个实例问题放在QVector中 我参加了多个论坛,但它们对我来说太复杂了,因为我是一个初学者。 但我没有找到解决问题的方法 所以我向你求助来帮助我 以下是我想要使用的函数: 创建束/向量的部分 /** * @brief MenuQuestionnary::assembleQuiz * Assemble the bundle of question that will be used in Quiz class *
Qt
中的QVector
类来工作(对我来说:p)。我要做的是将对象的多个实例问题
放在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)));
}
}
我希望在这里做的是将
问题
对象的选定编号放入向量
。然后我可以把它传给另一个班。从那里我应该能够从它们中提取文本(questionText
和questionexplation
)。我想你想要的是:QVector向量测验;vectorquick.reserve(spinBoxNumberOfQuestion->value());//在矢量中为性能保留正确的空间量(不需要)。我不知道您将如何使用VectorQuike,但也许您应该使用指向问题的指针,即QVector,并使用new Question()插入问题
/**
*@brief menuquestionary::assembleQuiz
*组装将在测验课中使用的一组问题
*/
void menuquestionary::assembleQuiz(){
int-iVectorSize=spinBoxNumberOfQuestion->value();
矢量测试;
矢量测验。保留(iVectorSize);
对于(int i=0;i您的对象(vectorquick)声明为整数向量。如果您想向其添加一些整数值,您应该编写以下内容:
vectorQuiz.append( someIntegerValue );
或
对于另一种类型的向量(即问题),编写如下代码:
QVector<Question> vectorQuiz;
// ...
for(int i = 0; i <= spinBoxNumberOfQuestion->value(); ++i){
vectorQuiz.append(Question(i)); // without [i] after vector object
}
QVector矢量测验;
// ...
对于(int i=0;i value();++i){
vectorquick.append(问题(i));//在向量对象之后不带[i]
}
您可能需要使用严格不等式您试图将类类型为Question
的对象推到QVector
中,这显然需要一个int
。您应该首先将其更改为QVector
<> P>我强烈建议,在进一步阅读之前,先阅读C++,或者你的经验将变得越来越复杂。
从互联网论坛复制粘贴代码不是编程,很快就会给你带来麻烦。我尝试了几件事就解决了这个问题
这是我所做的解释
我已经将我的函数一分为二。第一个将元素放入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);
}
}
/**
*@brief menuquestionary::assembleQuiz
*@param列表
*在Qlist中通过一个测验,然后让shuffle将其洗牌。。。
*/
void MenuQuestionnary::assembleQuiz(QList&list){
对于(int i=0;ivalue();+i){
int rand=qrand()*可用问题的最大数量;
新问题(兰德);
list.append(newQuestion);
}
shuffleQuiz(名单);
}
/**
*方法洗牌
*相当于洗牌一副牌:我们随机抽取一张,移动到最后一张,
*然后再做一次足够多的次数,以使每张卡片都有统计上的触碰。
*/
无效菜单问题::shuffleQuiz(QList和list){
int iters=list.size()*list.size();
对于(int i=0;i
谢谢你的帮助。你的代码给了我这个错误:没有匹配的函数来调用'Question::Question()错误在qvector中。h…加上它说qvector没有一个名为append的函数…看起来它注定要失败了:PSeems你没有为问题定义构造函数..我假设它是一个类?类问题是定义的。正常情况下它是工作的,但当我试着把它放在一个向量中时它就不工作了..我想把问题i的对象放进去n it。我会编辑我的问题。我看到了我在这里发帖时的错误。我编辑了我的问题,用对象名替换int。另外,我不复制粘贴代码,我尝试了那个笼员向我提出的建议,玩了一会儿,但我没能解决它。+1表示“从互联网论坛复制粘贴代码不是编程”这就是我为什么要解释的原因。否则我会尝试别人建议我自己去尝试解释。我读过几本关于C++的书,我有一个特定的问题,我需要帮助。你不能彻底改变你的问题。否则你会把所有的问题都提到原始的例子。我应该开始一个新的线程吗?在我的Qvector声明之后,我只是把int改成了问号。现在有什么问题吗?因为我声明它是一个问号向量,所以这个向量中似乎不存在Append。我的一个朋友告诉我使用QList。我回家后会试试。你有什么建议吗?你能发布整个co吗使用QVector
的部分和预期结果?
vectorQuiz.push_back( someIntegerValue );
QVector<Question> vectorQuiz;
// ...
for(int i = 0; i <= spinBoxNumberOfQuestion->value(); ++i){
vectorQuiz.append(Question(i)); // without [i] after vector object
}
/**
* @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);
}
}