Создание элементов в Qt Stack Overflow

У меня есть код для создания элементов карты на сцене 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);
}
}

3

Решение

Если честно, я не знаю, почему этот код создает проблемы. Я также не знаю, почему это написано таким сложным способом. Для создания карт я бы сделал следующее:

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 за петли и сделать их постоянными значениями.

3

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

Просто чтобы завершить ответ, который дал вам Ваанчо. Когда вы столкнетесь с такой проблемой, просто возьмите ручку и бумагу и пошагово напишите значения ваших переменных. Это очень просто, и вы можете понять, в чем проблема.


Начните с:

  • х = 0
  • у = 0
  • line_brake = 0
  • ширина = 7
  • Учитывая ширину и высоту карты = 1

Начать цикл:

  • i = 0, j = 0 -> переход в 3-е состояние, card-> setPos (0,0), следующий x = 1 (карта А)
  • i = 0, j = 1 -> переход в 3-е состояние, card-> setPos (1,0), следующий x = 2 (карта B)
  • i = 0, j = 2 -> переход в 3-е состояние, card-> setPos (2,0), следующий x = 3 (карта C)
  • i = 0, j = 3 -> переход в 3-е состояние, card-> setPos (3,0), следующий x = 4 (карта D)
  • i = 0, j = 4 -> переход в 3-е состояние, card-> setPos (4,0), следующий x = 5 (карта E)
  • i = 0, j = 5 -> переход в 3-е состояние, card-> setPos (5,0), следующий x = 6 (карта F)
  • 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 = 1 -> переход в 3-е состояние, card-> setPos (-1, 1), следующий x = 0 (карточка я)
  • i = 1, j = 2 -> переход в 3-е состояние, card-> setPos (0, 1), следующий x = 1 (карта J)
  • i = 1, j = 3 -> переход в 3-е состояние, card-> setPos (1, 1), следующий x = 2 (карта K)
  • i = 1, j = 4 -> переход в 3-е состояние, card-> setPos (2, 1), следующий x = 3 (карточка L)
  • i = 1, j = 5 -> переход в 3-е состояние, card-> setPos (3, 1), следующий x = 4 (карта М)
  • 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)

  • i = 2, j = 1 -> переход в 3-е состояние, card-> setPos (-1, 2), следующий x = 0 (карта P)
  • i = 2, j = 2 -> переход в 3-е состояние, card-> setPos (0, 2), следующий x = 0 (карта Q)
  • я = 2, j = 3 -> …
  • я = 2, j = 4 -> …

Как результаты:

введите описание изображения здесь

5

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