32.QButtonGroup

目录

1  创建和添加按钮

1.1  创建按钮组

1.2  添加按钮 addButton()

2  查看按钮

2.3  获取当前选中的按钮 CheckedButton()

3  从按钮组中移除按钮 removeButton()

4  ID操作

4.1  设置 setId(QAbstracButton,int)

4.2  根据指定按钮返回其ID id(QAbstracButton)

5  独占设置

5.1  设置 setExclusive(bool)

5.2  获取 exclusive()

6  信号使用

6.1  按钮组中按钮被点击信号 buttonClicked(int/QAbstractionButton)

6.1.1  传递按钮

6.1.2  传递ID

6.2  按钮组中按钮被按下时信号 buttonPressed(int/QAbstractionButton)

6.2.1  传递按钮

6.2.2  传递ID

6.3  按钮组中的按钮被释放时信号 buttonReleased(int/QAbstractionButton)

6.3.1  传递按钮

6.3.2  传递ID

6.4  按钮组中被切换状态时信号 buttonToggled(QAbstractionButton,bool)


1  创建和添加按钮

QButtonGroup名为按钮组,作用为按钮的容器,在其中可以添加按钮,它本身不具备可视化的效果

QButtonGroup的父类为QObject

首先我们创建四个按钮

1.1  创建按钮组

1.2  添加按钮 addButton()

 此处注意addButton()方法只能由一个参数,添加按钮时需要一个一个添加

现在我们添加完按钮组,发现已经能达到两组互斥的效果了

2  查看按钮

 2.1  查看按钮组中所有的按钮 buttons()

我们可以看到组中的两个按钮

2.2  根据ID获取对应按钮 button(ID)

现在我们没有设置ID,但我们想获取ID为1对应的按钮

现在我们将两个按钮分别设置为1和2,然后再获取ID为1和2的按钮

 现在我们不想设置ID,但还想使用button()获取按钮,我们发现每次创建按钮后会有默认的ID,ID从-2开始,我们现在获取ID为-2,-3的按钮

 -2的那个也就是显示的第一行是 男 按钮

-3的那个也就是显示的第二行是 女 按钮

如果该按钮组内继续设置按钮,则ID从-4,-5这样一直向下排

2.3  获取当前选中的按钮 CheckedButton()

我们首先在所有按钮都没被选中的情况下获取选中的按钮

 然后我们把checkedButton()连接到 男 按钮的槽函数上

 运行后我们点击一次 男 按钮

 第二次点击 男 按钮

3  从按钮组中移除按钮 removeButton()

我当前按钮组中有男 女两个按钮

此时我们男女按钮是不可以全部选中的

现在我们将 女 按钮移出按钮组

现在我们的男女按钮可以同时选中

我们现在看一下按钮组中的所有按钮

发现 女 按钮已经不在按钮组中了

4  ID操作

4.1  设置 setId(QAbstracButton,int)

在添加按钮的时候就可以顺便设置一个ID

此处函数的功能与之前的ID功能相同

4.2  根据指定按钮返回其ID id(QAbstracButton)

此时我们先设置 男 按钮ID为1,女按钮ID为2

初始状态下没有任何按钮被选中,返回-1

我们现在再搞一个按钮,点击后获取被选中按钮的ID

  • 一般在项目中使用的时候也是会RadioButton配合QPushButton使用,在用于选择后点击确定,才作数,实时获取一般用不到

初始状态

我们选中男再点击一下左上角按钮

选中女后再点击一下左上角的按钮

5  独占设置

在同一父控件下使用RadioButton时是默认有互斥性的,现在我们将他们设为一组并将消除一组中RadioButton的互斥性

我们现在创建四个按钮 男 女 是 否 ,之后将这四个按钮分为两组

初始状态

我们点击男女,发现他们是不可以被同时选中的

5.1  设置 setExclusive(bool)

此时我们发现男女两个按钮可以被同时选中了

我们再将是否按钮这一组设置为True

发现他们还是互斥的,不能被同时选中

5.2  获取 exclusive()

6  信号使用

现在我们依然用上面的案例,把四个代码分成两组,我们现在分别设置四个按钮的ID

  • 注:btn3与btn4的ID也可以设置为1和2,由于在不同的组,所以ID不会冲突

以下信号括号内并非是参数,而是可以发送的数据,可发送的数据为按钮或按钮的ID,传递的数据一次只能有一个

我们先搞一个可以接收数据的槽函数

6.1  按钮组中按钮被点击信号 buttonClicked(int/QAbstractionButton)

6.1.1  传递按钮

默认情况下会传递按钮

运行后我点击一下按钮男,再点击一下按钮女

6.1.2  传递ID

运行后我点一下按钮男,再点击一下按钮女

6.2  按钮组中按钮被按下时信号 buttonPressed(int/QAbstractionButton)

6.2.1  传递按钮

默认情况下会传递按钮

运行后我按一下按钮男,再按一下按钮女

6.2.2  传递ID

运行后我按一下按钮男,再按一下按钮女

6.3  按钮组中的按钮被释放时信号 buttonReleased(int/QAbstractionButton)

6.3.1  传递按钮

默认情况下会传递按钮

运行后我按一下然后抬起按钮男,再按一下然后抬起按钮女

6.3.2  传递ID

运行后我按一下然后抬起按钮男,再按一下然后抬起按钮女

6.4  按钮组中被切换状态时信号 buttonToggled(QAbstractionButton,bool)

buttonToggled信号无法用在信号后加[int]的方式获取ID,但是它可以获取到按钮的选中状态

首先我们更改一下槽函数

我们将切换信号绑给槽函数

运行后我点击一下按钮男

  • True 代表按钮男被选中

再点击一下按钮女

由于是切换状态时的信号,按钮男的状态由选中到未选中,按钮女的状态由未选中到选中,所以信号触发两次

如果我们在信号后不加[int]我们可以更改槽函数获取ID

经测试同样可用

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
QButtonGroup是一个Qt框架中的类,用于管理一组按钮。它可以用于实现多个按钮的单选功能,也可以与其他控件结合使用,例如QStackedWidget,实现类似选项卡的效果。\[1\] 使用QButtonGroup的主要步骤如下: 1. 创建QButtonGroup对象,并设置互斥模式(即只能选择一个按钮)。 2. 使用addButton()方法将按钮添加到按钮组中,并为每个按钮分配一个唯一的id。 3. 可以通过Qt Designer拖拽按钮到界面上,然后使用addButton()方法将按钮添加到按钮组中,也可以通过代码创建按钮并添加到按钮组中。 4. 如果需要获取选中的按钮的id,需要将这些按钮的checkable属性设置为true。 5. 可以通过buttonClicked()信号连接到槽函数,以便在按钮被点击时执行相应的操作。 6. 可以通过button()方法获取指定id的按钮,并设置其为选中状态。 更多关于QButtonGroup的详细用法可以参考Qt系列教程中的相关章节。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Qt 中QButtonGroup 的用法](https://blog.csdn.net/tax10240809163com/article/details/92708983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[Qt 教程之Widgets模块] —— QButtonGroup抽象容器](https://blog.csdn.net/maizousidemao/article/details/127643027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值