2015-06-06 131 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(); 
    } 
}