Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将QVector用于多对象_C++_Qt_Qlist_Qvector - Fatal编程技术网

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);
    }
}