我正在用C++和Qt製作波多黎各的棋盤遊戲。其中一個特點是,在他們選擇了主角色(按鈕1)後,每個玩家(總共3名玩家)可以建造一座建築物。所以我有一個按鈕,每個建築物,有沒有一種方式,我得到的信息(如按鈕的名稱),當玩家點擊它?如果你的QPushButton
信號連接到插槽獲取點擊按鈕(Qt)的信息
親切的問候
我正在用C++和Qt製作波多黎各的棋盤遊戲。其中一個特點是,在他們選擇了主角色(按鈕1)後,每個玩家(總共3名玩家)可以建造一座建築物。所以我有一個按鈕,每個建築物,有沒有一種方式,我得到的信息(如按鈕的名稱),當玩家點擊它?如果你的QPushButton
信號連接到插槽獲取點擊按鈕(Qt)的信息
親切的問候
,您可以撥打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
}
}
}
如果您在設計器創建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()));
// ...
}
而且在該插槽可以使用sender()
功能來檢查哪個按鈕被點擊。
void Game::onBuildingClicked()
{
QPushButton* clickedButton = qobject_cast< QPushButton* >(sender());
if (clickedButton)
{
const QString clickedBuilding = clickedButton->text();
const QString clickedButtonName = clickedButton->objectName();
}
}
大概Qt提供了一些方法來將按鈕點擊回按鈕對象的方法。如果不是,則檢查事件處理程序中的事件對象。 –