我正在用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提供了一些方法来将按钮点击回按钮对象的方法。如果不是,则检查事件处理程序中的事件对象。 –