在 Qt C++ 中生成项目
Generating items in Qt C++
我有一个用于生成卡片项目到 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
都用于循环并使它们成为常量值。
只是为了完成 vahancho 给你的答案。当你遇到这样的问题时,只需拿起笔和纸,一步一步地写下你的变量值。很简单,一看就知道是什么问题了。
开始于:
- x = 0
- y = 0
- line_brake = 0
- 宽度=7
- 考虑卡片的宽度和高度 = 1
开始循环:
- i = 0, j = 0 --> 进入第三个条件,card->setPos(0,0), next x=1 (card A)
- i = 0, j = 1 --> 进入第三个条件,card->setPos(1,0), next x=2 (card B)
- i = 0, j = 2 --> 进入第三个条件,card->setPos(2,0), next x=3 (card C)
- i = 0, j = 3 --> 进入第三个条件,card->setPos(3,0),下一个 x=4 (card D)
- i = 0, j = 4 --> 进入第三个条件,card->setPos(4,0), next x=5 (card E)
- i = 0, j = 5 --> 进入第三个条件,card->setPos(5,0), next x=6 (card F)
i = 0, j = 6 --> 进入第一种情况,没有 setPos(),请参阅卡片构造函数中的默认 x、y 值?,卡片可能在 0,0 中添加,line_break=1 (卡G)
i = 1, j = 0 --> 进入第二种情况,y=1, card->setPos(6, 1), line_break=0, next x= -1 (卡片H)
- i = 1, j = 1 --> 进入第三个条件,card->setPos(-1, 1), next x=0 (card I)
- i = 1, j = 2 --> 进入第三个条件,card->setPos(0, 1), next x=1 (card J)
- i = 1, j = 3 --> 进入第三个条件,card->setPos(1, 1), next x=2 (card K)
- i = 1, j = 4 --> 进入第三个条件,card->setPos(2, 1), next x=3 (card L)
- i = 1, j = 5 --> 进入第三个条件,card->setPos(3, 1), next x=4 (card M)
i = 1, j = 6 --> 进入第一种情况,没有 setPos(),请参阅卡片构造函数中的默认 x、y 值?,卡片可能在 0,0 中添加,line_break=1 (卡片N)
i = 2, j = 0 --> 进入第二种情况,y=2, card->setPos(4, 2), line_break=0, next x= -1 (卡片O)
- i = 2, j = 1 --> 进入第三个条件,card->setPos(-1, 2), next x=0 (card P)
- i = 2, j = 2 --> 进入第三个条件,card->setPos(0, 2), next x=0 (card Q)
- i = 2, j = 3 --> ...
- i = 2, j = 4 --> ...
作为结果:
我有一个用于生成卡片项目到 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
都用于循环并使它们成为常量值。
只是为了完成 vahancho 给你的答案。当你遇到这样的问题时,只需拿起笔和纸,一步一步地写下你的变量值。很简单,一看就知道是什么问题了。
开始于:
- x = 0
- y = 0
- line_brake = 0
- 宽度=7
- 考虑卡片的宽度和高度 = 1
开始循环:
- i = 0, j = 0 --> 进入第三个条件,card->setPos(0,0), next x=1 (card A)
- i = 0, j = 1 --> 进入第三个条件,card->setPos(1,0), next x=2 (card B)
- i = 0, j = 2 --> 进入第三个条件,card->setPos(2,0), next x=3 (card C)
- i = 0, j = 3 --> 进入第三个条件,card->setPos(3,0),下一个 x=4 (card D)
- i = 0, j = 4 --> 进入第三个条件,card->setPos(4,0), next x=5 (card E)
- i = 0, j = 5 --> 进入第三个条件,card->setPos(5,0), next x=6 (card F)
i = 0, j = 6 --> 进入第一种情况,没有 setPos(),请参阅卡片构造函数中的默认 x、y 值?,卡片可能在 0,0 中添加,line_break=1 (卡G)
i = 1, j = 0 --> 进入第二种情况,y=1, card->setPos(6, 1), line_break=0, next x= -1 (卡片H)
- i = 1, j = 1 --> 进入第三个条件,card->setPos(-1, 1), next x=0 (card I)
- i = 1, j = 2 --> 进入第三个条件,card->setPos(0, 1), next x=1 (card J)
- i = 1, j = 3 --> 进入第三个条件,card->setPos(1, 1), next x=2 (card K)
- i = 1, j = 4 --> 进入第三个条件,card->setPos(2, 1), next x=3 (card L)
- i = 1, j = 5 --> 进入第三个条件,card->setPos(3, 1), next x=4 (card M)
i = 1, j = 6 --> 进入第一种情况,没有 setPos(),请参阅卡片构造函数中的默认 x、y 值?,卡片可能在 0,0 中添加,line_break=1 (卡片N)
i = 2, j = 0 --> 进入第二种情况,y=2, card->setPos(4, 2), line_break=0, next x= -1 (卡片O)
- i = 2, j = 1 --> 进入第三个条件,card->setPos(-1, 2), next x=0 (card P)
- i = 2, j = 2 --> 进入第三个条件,card->setPos(0, 2), next x=0 (card Q)
- i = 2, j = 3 --> ...
- i = 2, j = 4 --> ...
作为结果: