Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-can';找不到合适的发件人()_C++_Qt - Fatal编程技术网

C++ Qt-can';找不到合适的发件人()

C++ Qt-can';找不到合适的发件人(),c++,qt,C++,Qt,我想确定单击了哪个按钮,但在用于查找正确的QPushButton的for循环中找不到该按钮。指向这些QPushButtons的指针放置在向量的向量中 这就是我将按钮与使用按钮时要使用的功能连接的方式 for(int i=0; i<size; ++i) { for(int j=0; j<size; ++j) { grid->addWidget(board->dis_board[i][j], i, j);

我想确定单击了哪个按钮,但在用于查找正确的QPushButtonfor循环中找不到该按钮。指向这些QPushButtons的指针放置在向量的向量中

这就是我将按钮与使用按钮时要使用的功能连接的方式

    for(int i=0; i<size; ++i)
    {
        for(int j=0; j<size; ++j)
        {
            grid->addWidget(board->dis_board[i][j], i, j);
            board->dis_board[i][j]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            connect(board->dis_board[i][j], SIGNAL(clicked(bool)), SLOT(move()));
        }
    }
}
for(int i=0;idis_板[i][j],i,j);
board->dis_board[i][j]->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
连接(板->显示板[i][j],信号(点击(bool)),插槽(移动());
}
}
}
这里你们提到了函数

void Game::move()
{
    unsigned long x=0;
    unsigned long y=0;
    QPushButton* buttonSender = qobject_cast<QPushButton*>(sender());
    for(; x<board->dis_board.size(); ++x)
    {
        for(; y<board->dis_board.size(); ++y)
        {
            if(board->dis_board[x][y] == buttonSender)
                break;
        }
    }
    board->move(x,y);
}
void游戏::move()
{
无符号长x=0;
无符号长y=0;
QPushButton*buttonSender=qobject_cast(sender());
对于(;xdis_board.size();++x)
{
对于(;ydis_board.size();++y)
{
如果(板->显示板[x][y]==按钮下)
打破
}
}
板->移动(x,y);
}
其中移动(x,y)是一种称为board的对象的方法

问题是,当我在游戏::move()myxy中执行for循环时,会得到值5(因此我假设找不到发送方()

有什么问题吗?如果需要更多的代码,我可以提供更多


没有显示错误,语句只退出内部
y
-循环,而不退出外部
x
-循环

以下代码应适用于您:

void Game::move()
{
    QPushButton* buttonSender = qobject_cast<QPushButton*>(sender());
    for(unsigned long x=0; x<board->dis_board.size(); ++x)
    {
        for(unsigned long y=0; y<board->dis_board.size(); ++y)
        {
            if(board->dis_board[x][y] == buttonSender)
            {
                board->move(x,y);
                return;
            }
        }
    }
}
void游戏::move()
{
QPushButton*buttonSender=qobject_cast(sender());
用于(无符号长x=0;xdis_board.size();++x)
{
用于(无符号长y=0;ydis_board.size();++y)
{
如果(板->显示板[x][y]==按钮下)
{
板->移动(x,y);
返回;
}
}
}
}

语句只退出内部
y
-循环,而不退出外部
x
-循环

以下代码应适用于您:

void Game::move()
{
    QPushButton* buttonSender = qobject_cast<QPushButton*>(sender());
    for(unsigned long x=0; x<board->dis_board.size(); ++x)
    {
        for(unsigned long y=0; y<board->dis_board.size(); ++y)
        {
            if(board->dis_board[x][y] == buttonSender)
            {
                board->move(x,y);
                return;
            }
        }
    }
}
void游戏::move()
{
QPushButton*buttonSender=qobject_cast(sender());
用于(无符号长x=0;xdis_board.size();++x)
{
用于(无符号长y=0;ydis_board.size();++y)
{
如果(板->显示板[x][y]==按钮下)
{
板->移动(x,y);
返回;
}
}
}
}

另一种选择是,如果您有Qt5和C++11或更高版本的编译器,您可以在连接中包含原始的
x
y

for(int i=0; i<size; ++i)
{
    for(int j=0; j<size; ++j)
    {
        grid->addWidget(board->dis_board[i][j], i, j);
        board->dis_board[i][j]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        connect(board->dis_board[i][j], &QPushButton::clicked, this, [this, i, j](){ board->move(i, j); });
    }
}

// No Game::move
for(int i=0;idis_板[i][j],i,j);
board->dis_board[i][j]->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
连接(board->dis_board[i][j],&QPushButton::单击,this,[this,i,j](){board->move(i,j);});
}
}
//无游戏::移动

另一种选择是,如果您有Qt5和C++11或更高版本的编译器,您可以在连接中包含原始的
x
y

for(int i=0; i<size; ++i)
{
    for(int j=0; j<size; ++j)
    {
        grid->addWidget(board->dis_board[i][j], i, j);
        board->dis_board[i][j]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        connect(board->dis_board[i][j], &QPushButton::clicked, this, [this, i, j](){ board->move(i, j); });
    }
}

// No Game::move
for(int i=0;idis_板[i][j],i,j);
board->dis_board[i][j]->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
连接(board->dis_board[i][j],&QPushButton::单击,this,[this,i,j](){board->move(i,j);});
}
}
//无游戏::移动

请提供一个更完整的示例代码。您是否有可用的Qt 5非宏信号和插槽?问题是您的
中断
语句仅退出内部
for
循环,但它仍会继续迭代外部
for
循环,直到循环结束。请提供更完整的示例代码。您是否有可用的Qt 5非宏信号和插槽?问题是您的
中断
语句仅退出内部
for
循环,但它仍会继续在外部
for
循环中迭代,直到循环结束。也将尝试此操作。谢谢,我也要试试。谢谢,我忘了我能做到这一点,因为我的声望不到15分。DoneI忘了我能做到这一点,因为我的声望不到15分。多恩