获取点击按钮的信息(Qt)

时间:2015-06-06 13:23:49

标签: c++ qt

我用C ++和Qt制作了波多黎各的棋盘游戏。其中一个特点是,在他们选择了主要角色(按钮1)之后,每个玩家(总共3个玩家)可以建造一座建筑物。所以每个建筑都有一个按钮,有什么方法可以让玩家点击它时获得信息(比如按钮的名称)?

亲切的问候

2 个答案:

答案 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)

如果您在设计器中创建了building1Buttonbuilding2Buttonbuilding3Button按钮,则可以尝试以下操作。

在类构造函数中,您需要将所有构建按钮中的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();
    }
}