Qt - 找不到正确的发件人()
Qt - can't find proper sender()
我想确定单击了哪个按钮,但是在我用来查找正确QPushButton的for循环中找不到它。指向这些QPushButton的指针放置在向量向量中。
这就是我将按钮与使用按钮时要使用的功能连接的方式
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((中通过for 循环时,我的x和y得到值5(所以我假设找不到sender((。
可能有什么问题?如果需要更多代码,我可以提供更多代码。
未显示任何错误
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;
}
}
}
}
作为替代方案,如果您有 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
相关文章:
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- Qt应用程序找不到第三方DLL并崩溃
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- Qt视频流应用程序:找不到qt.mediaplayer的服务
- Qt 模块(QtSerialPort)在Qt定制构建中找不到(针对ARM交叉编译)
- 为什么在qt c++中找不到我的插槽?
- Qt Creator在linux mint 64位中找不到CMAKE_CXX_COMPILER编译器
- libGL确实存在,但链接器找不到它 - Qt 4.8.7,CentOS 7.5
- Qt Creator项目打破:"找不到建筑x86_64符号"
- Qt 找不到 GL 库
- Qt - 找不到正确的发件人()
- 在Visual Studio 2017中使用Qt库的CMake项目:运行exe时找不到Qt dll
- 找不到QT Vulkan类
- qmake:找不到Qt安装
- 找不到QT 5.6 update()函数标识符
- 在包含库时找不到Qt shared_ptr
- 编译时找不到Qt文件
- 使用组件找不到Qt文件
- 静态构建 qt 后找不到 qt 创建者