2015-06-06 97 views
0

我正在用C++和Qt制作波多黎各的棋盘游戏。其中一个特点是,在他们选择了主角色(按钮1)后,每个玩家(总共3名玩家)可以建造一座建筑物。所以我有一个按钮,每个建筑物,有没有一种方式,我得到的信息(如按钮的名称),当玩家点击它?如果你的QPushButton信号连接到插槽获取点击按钮(Qt)的信息

亲切的问候

+0

大概Qt提供了一些方法来将按钮点击回按钮对象的方法。如果不是,则检查事件处理程序中的事件对象。 –

回答

1

,您可以拨打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 
     } 
    } 
} 
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())); 

    // ... 
} 

而且在该插槽可以使用sender()功能来检查哪个按钮被点击。

void Game::onBuildingClicked() 
{ 
    QPushButton* clickedButton = qobject_cast< QPushButton* >(sender()); 
    if (clickedButton) 
    { 
     const QString clickedBuilding = clickedButton->text(); 
     const QString clickedButtonName = clickedButton->objectName(); 
    } 
}