У меня есть код для создания элементов карты на сцене Qt. Это то, что я придумал до сих пор. Вызываемые функции-члены — это то, что вы можете получить из названия, поэтому мне не нужно включать их здесь.
// creating the cards
int x = 0;
int y = 0;
int line_brake = 0;
for(int i = 0; i < width; i++)
{
for(int j = 0; j < width; j++)
{
card = new Card();
int card_width = card->getWidth();
int card_height = card->getHeight();
if(j == (width-1))
{
line_brake = 1;
}
else if((j != (width-1)) && (line_brake == 1))
{
y += card_height;
card->setPos(x,y);
line_brake = 0;
x = 0 - card_width;
}
else
{
card->setPos(x,y);
x += card_width;
}
scene->addItem(card);
}
}
Вот как выглядит моя сцена после выполнения этого кода:
В чем может быть проблема? Мне нужно, чтобы карты были разложены в 7 * 7 квадратов. Это означает 7 строк, 7 столбцов и в каждом поле изображение карты.
Вот как выглядит моя сцена после предложений по редактированию @molbdnilo:
// creating the cards
int x = 0;
int y = 0;
int line_brake = 0;
for(int i = 0; i < width; i++)
{
for(int j = 0; j < width; j++)
{
card = new Card();
int card_width = card->getWidth();
int card_height = card->getHeight();
if(j == (width-1))
{
line_brake = 1;
continue;
}
else if((j != (width-1)) && (line_brake == 1))
{
y += card_height;
card->setPos(x,y);
line_brake = 0;
x = 0;
}
else
{
card->setPos(x,y);
x += card_width;
}
scene->addItem(card);
}
}
Если честно, я не знаю, почему этот код создает проблемы. Я также не знаю, почему это написано таким сложным способом. Для создания карт я бы сделал следующее:
const int size = 7;
for(int row = 0; row < size; row++)
{
for(int col = 0; col < size; col++)
{
Card *card = new Card;
int card_width = card->getWidth();
int card_height = card->getHeight();
int x = col * card_width;
int y = row * card_height;
card->setPos(x, y);
scene->addItem(card);
}
}
Даже больше. Согласно рисунку, все карты имеют одинаковые размеры, поэтому я бы взял оба card_width
а также card_height
за петли и сделать их постоянными значениями.
Просто чтобы завершить ответ, который дал вам Ваанчо. Когда вы столкнетесь с такой проблемой, просто возьмите ручку и бумагу и пошагово напишите значения ваших переменных. Это очень просто, и вы можете понять, в чем проблема.
Начните с:
Начать цикл:
i = 0, j = 6 -> переход в 1-е состояние, нет setPos (), см. значение x, y по умолчанию в конструкторе карты?, карта добавлена, вероятно, в 0,0, line_break = 1 (карта G)
i = 1, j = 0 -> переход во 2-е состояние, y = 1, card-> setPos (6, 1), line_break = 0, следующий x = -1 (карта H)
i = 1, j = 6 -> переход в 1-е состояние, нет setPos (), см. значение по умолчанию x, y в конструкторе карт?, карта добавлена, вероятно, в 0,0, line_break = 1 (карта N)
i = 2, j = 0 -> переход во 2-е состояние, y = 2, card-> setPos (4, 2), line_break = 0, следующий x = -1 (карточка O)
Как результаты: