在我的项目中,我将40个QPushButton都放到了一个QButtonGroup中,如下所示:
QButtonGroup* group = new QButtonGroup(this);
group->addButton(ui->slot_0);
group->addButton(ui->slot_1);
//...
group->addButton(ui->slot_38);
group->addButton(ui->slot_39);每个按钮都是我设置为可检查的QPushButton。这样一来,一次只能选中一个按钮。所有的工作都很好,但是当其中一个按钮被选中时,我如何才能“创建一个插槽”?我不想有40个不同的插槽,每个按钮都有一个插槽,最终做的基本上是一样的事情。有没有什么办法可以直接使用我放进去的QButtonGroup?
发布于 2013-07-15 15:54:57
正如贾敏和尼科斯所说:您应该创建自己的插槽来处理QButtonGroup发出的信号。它可能是这样的:
在头文件中:
public slots:
void buttonWasClicked(int);在*.cpp文件中:
void MainWindow::buttonWasClicked(int buttonID)
{
cout << "You have clicked button: " << buttonID << endl;
}在负责创建MainWindow的代码中(即在构造函数中,但不是必须的),应该有下面这一行:
connect(group, SIGNAL(buttonClicked(int)), this, SLOT(buttonWasClicked(int)));请注意,自Qt5以来,connect语法已更改。我在这里使用的语法来自Qt4。它仍然可以工作,但现在已被弃用(有关更多信息,请参阅New Signal Slot Syntax in Qt 5)。此外,我建议通过QButtonGroup类参考,因为还有其他可用的信号比我选择的信号更适合您的需求。
BR
发布于 2013-07-15 12:00:30
QButtonGroup的文档显示了一个QButtonGroup::buttonClicked()信号--您已经尝试过了吗?
该信号有两种变体--一种提供QPushButton作为参数(作为QAbstractButton),另一种提供组中按钮的ID。
您可以在C++代码中使用connect()设置信号和插槽连接。
在初始化窗口类的时候(可能是在构造函数中),调用以下代码:
connect(myButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(theSlotThatYouWrite(QAbstractButton*));其中myButtonGroup可能是this->ui->nameOfTheButtonGroup,而theSlotThatYouWrite是您在自己的代码中编写的函数,它属于您的窗口类,它返回QAbstractButton*并接受信号QAbstractButton*作为参数(因为这是这个特定信号作为参数提供的)。
确保theSlotThatYouWrite位于类接口中的“私有插槽:”或“公共插槽:”标签下。
下面是我自己的代码中一些信号和插槽的实际使用情况的屏幕截图。

信号和插槽是需要学习的非常重要的东西,但在第一次尝试理解它时,可能需要爬一座山!
https://stackoverflow.com/questions/17646422
复制相似问题