我想确定点击了哪个按钮,但在我的 for循环中,我用它来找到正确的 QPushButton ,无法找到它。这些 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()));
}
}
}
在这里你提到了功能
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);
}
其中 move(x,y)是一个名为board
的对象的方法当我在 Game :: move()我的 x 和中浏览 for循环时会遇到问题y 获取值 5 (因此我认为无法找到 sender()。)
可能是什么问题?如果需要更多代码,我可以提供更多代码。
没有显示错误
答案 0 :(得分:1)
break
语句仅退出内部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;
}
}
}
}
答案 1 :(得分:1)
作为替代方案,如果你有Qt 5和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