Как использовать QVector с несколькими объектами

Я пытаюсь использовать QVector класс от Qt работать (для меня: 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(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).

2

Решение

Вы пытаетесь выдвинуть объекты типа класса Question в QVector<int>что, очевидно, ожидает int вместо. Вы должны изменить это на QVector<Question> начать с.

Однако я настоятельно рекомендую вам прочитать Хорошая книга на C ++, прежде чем идти дальше, или ваш опыт работы с ним будет становиться все более и более сложным.

Копировать код вставки с форумов в интернете не программирование и скоро доставит вам неприятности.

3

Другие решения

Я думаю, что вы хотите, это: 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));
}

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

И возможно, вы должны использовать строгое неравенство < вместо <знак равно в течение цикла (но я не уверен).

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

Спасибо за помощь, хотя.

0
По вопросам рекламы [email protected]