我用C ++和Qt制作了波多黎各的棋盘游戏。其中一个特点是,在他们选择了主要角色(按钮1)之后,每个玩家(总共3个玩家)可以建造一座建筑物。所以每个建筑都有一个按钮,有什么方法可以让玩家点击它时获得信息(比如按钮的名称)?
亲切的问候
答案 0 :(得分:1)
如果您将QPushButton
的信号连接到插槽,则可以在插槽内调用sender()
以获取发送信号的对象。
插槽代码示例:
void MainWindow::onButtonPress()
{
QObject* senderObj = sender();
if (senderObj->isWidgetType())
{
QPushButton* button = qobject_cast<QPushButton*>(senderObj);
if (button)
{
// button is the QPushButton who emmited this signal
}
}
}
答案 1 :(得分:0)
如果您在设计器中创建了building1Button
,building2Button
,building3Button
按钮,则可以尝试以下操作。
在类构造函数中,您需要将所有构建按钮中的clicked()
SIGNAL连接到同一个SLOT。
Game::Game()
{
// ...
connect( ui->building1Button, SIGNAL( clicked() ), this, SLOT( onBuildingClicked() ) );
connect( ui->building2Button, SIGNAL( clicked() ), this, SLOT( onBuildingClicked() ) );
connect( ui->building3Button, SIGNAL( clicked() ), this, SLOT( onBuildingClicked() ) );
// ...
}
在该SLOT中,您可以使用sender()
函数来检查单击了哪个按钮。
void Game::onBuildingClicked()
{
QPushButton* clickedButton = qobject_cast< QPushButton* >( sender() );
if ( clickedButton )
{
const QString clickedBuilding = clickedButton->text();
const QString clickedButtonName = clickedButton->objectName();
}
}