首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断何时在QButtonGroup中单击QPushButton

如何判断何时在QButtonGroup中单击QPushButton
EN

Stack Overflow用户
提问于 2013-07-15 11:41:13
回答 2查看 8.7K关注 0票数 3

在我的项目中,我将40个QPushButton都放到了一个QButtonGroup中,如下所示:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-15 15:54:57

正如贾敏和尼科斯所说:您应该创建自己的插槽来处理QButtonGroup发出的信号。它可能是这样的:

在头文件中:

代码语言:javascript
复制
public slots:

void buttonWasClicked(int);

在*.cpp文件中:

代码语言:javascript
复制
void MainWindow::buttonWasClicked(int buttonID)
{
    cout << "You have clicked button: " << buttonID << endl;
}

在负责创建MainWindow的代码中(即在构造函数中,但不是必须的),应该有下面这一行:

代码语言:javascript
复制
    connect(group, SIGNAL(buttonClicked(int)), this, SLOT(buttonWasClicked(int)));

请注意,自Qt5以来,connect语法已更改。我在这里使用的语法来自Qt4。它仍然可以工作,但现在已被弃用(有关更多信息,请参阅New Signal Slot Syntax in Qt 5)。此外,我建议通过QButtonGroup类参考,因为还有其他可用的信号比我选择的信号更适合您的需求。

BR

票数 3
EN

Stack Overflow用户

发布于 2013-07-15 12:00:30

QButtonGroup的文档显示了一个QButtonGroup::buttonClicked()信号--您已经尝试过了吗?

该信号有两种变体--一种提供QPushButton作为参数(作为QAbstractButton),另一种提供组中按钮的ID。

您可以在C++代码中使用connect()设置信号和插槽连接。

在初始化窗口类的时候(可能是在构造函数中),调用以下代码:

代码语言:javascript
复制
connect(myButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(theSlotThatYouWrite(QAbstractButton*));

其中myButtonGroup可能是this->ui->nameOfTheButtonGroup,而theSlotThatYouWrite是您在自己的代码中编写的函数,它属于您的窗口类,它返回QAbstractButton*并接受信号QAbstractButton*作为参数(因为这是这个特定信号作为参数提供的)。

确保theSlotThatYouWrite位于类接口中的“私有插槽:”或“公共插槽:”标签下。

下面是我自己的代码中一些信号和插槽的实际使用情况的屏幕截图。

信号和插槽是需要学习的非常重要的东西,但在第一次尝试理解它时,可能需要爬一座山!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17646422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档