Witam,
potrzebuję podpowiedzi związanej z zachowywaniem wartości przez zmienne w klasach dziedziczących po QObject.
Sprawa przedstawia się następująco:
class GameSession : public QObject
{
Q_OBJECT
public:
explicit GameSession(QObject *parent = nullptr);
//...
bool prepareSessionForFirstRound(int SID);
bool prepareDeck(PlayerIndex i, bool escape_to_different_thread = false);
private:
//...
ServerSQLQuery serverQuery;
QList<Player *> players;
};
Kiedy client gry potwierdza gotowość, sesja za pomocą
bool prepareSessionForFirstRound(int SID);
odpytuje bazę i w klasie Player uzupełnia zawartość kart:
bool GameSession::prepareDeck(PlayerIndex i, bool escape_to_different_thread)
{
unsigned int id_player = players[i]->getDatabaseID();
qDebug() << players[i];
Player *ptr = players[i];
qDebug() << ptr << players[i];
if(!serverQuery.getPlayerDeck(id_player))
{
qDebug() << __FUNCTION__ << "Load deck failed";
qDebug() << "\n" << serverQuery.getDbHost() <<
"\n" << serverQuery.getDbUser() <<
"\n" << serverQuery.getDbPort();
return false;
}
else
{
QSqlQuery *query = new QSqlQuery(*serverQuery.getQuery());
int i = 0;
while (serverQuery.getQuery()->next()) {
QString _name = query->value("Name").toString();
QString _description = query->value("Description").toString();
QString _event_game_key = query->value("Event_game_key").toString();
int _idCard = query->value("ID_Card").toInt();
int _fervor = query->value("Fervor").toInt();
int _productivity = query->value("Productivity").toInt();
int _id_character_desc = query->value("Id_character_desc").toInt();
int _id_image_card = query->value("Id_image_card").toInt();
ptr->getDeck().at(i)->setDataBaseID(_idCard);
ptr->getDeck().at(i)->setName(_name);
ptr->getDeck().at(i)->setDescription(_description);
ptr->getDeck().at(i)->setProductivity(_productivity);
ptr->getDeck().at(i)->setFervor(_fervor);
qDebug() << ptr->getDeck().at(i)->getDataBaseID();
}
}
// W tym momencie już zmienne znowu mają domyślne wartości klasy
ptr->shuffleDeck();
qDebug() << "=======================";
for(int i = 0; i < ptr->getDeck().count(); i++)
{
qDebug() << ptr->getDeck().at(i)->getDataBaseID();
}
return true;
}
Tak tworzę nowe elementy do vectora dla klasy Player
Player::Player(QObject *parent) : QObject(parent)
{
for(int i = 0; i<15; i++)
{
deck.append(new Card(this));
deck.at(i)->setObjectName(QString("Card nr: "+QString::number(i)));
qDebug() << deck.at(i)->objectName();
}
}
Przypuszczam, że gdzieś zawodzi mój brak wiedzy (pewnie błąd jest oczywisty) ale nie mogę wychwycić gdzie leży błąd. Będę wdzięczny, jeżeli jeszcze jakieś błędy przy okazji zostałyby wytknięte.