在Qt C++中生成项目

jvi*_*sek 3 c++ qt scene

我有一个代码,用于生成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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的场景在运行此代码后的样子:

现场

可能是什么问题?我需要将牌放在一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

只是为了完成vahancho给你的答案.当您遇到这样的问题时,只需拿一支笔和一张纸,逐步写出您的变量值.这很简单,你可以弄清问题是什么.


从...开始:

  • x = 0
  • y = 0
  • line_brake = 0
  • 宽度= 7
  • 考虑卡的宽度和高度= 1

开始循环:

  • i = 0,j = 0 - >进入第三个条件,card-> setPos(0,0),下一个x = 1(卡A)
  • i = 0,j = 1 - >进入第3个条件,card-> setPos(1,0),next x = 2(卡B)
  • i = 0,j = 2 - >进入第三个条件,card-> setPos(2,0),下一个x = 3(卡C)
  • i = 0,j = 3 - >进入第3个条件,card-> setPos(3,0),下一个x = 4(卡D)
  • i = 0,j = 4 - >进入第三个条件,card-> setPos(4,0),下一个x = 5(卡E)
  • i = 0,j = 5 - >进入第三个条件,card-> setPos(5,0),下一个x = 6(卡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 - >进入第3个条件,card-> setPos(-1,1),下一个x = 0(卡I)
  • i = 1,j = 2 - >进入第3个条件,card-> setPos(0,1),next x = 1(卡J)
  • i = 1,j = 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(卡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 - >进入第3个条件,card-> setPos(-1,2),next x = 0(card P)
  • i = 2,j = 2 - >进入第3个条件,card-> setPos(0,2),next x = 0(卡Q)
  • i = 2,j = 3 - > ...
  • i = 2,j = 4 - > ...

结果如下:

在此输入图像描述