按钮类控件——Radio Buttion

🐌博主主页:🐌​倔强的大蜗牛🐌​
📚专栏分类:QT
❤️感谢大家点赞👍收藏⭐评论✍️


一、Radio Buttion

介绍

QRadioButton 是单选按钮. 可以让我们在多个选项中选择一个.

属性

QAbstractButton 中和 QRadioButton 关系较大的属性

属性说明
checkable是否能选中
checked是否已经被选中. checkable 是 checked 的前提条件.
autoExclusive是否排他.
选中⼀个按钮之后是否会取消其他按钮的选中.
对于 QRadioButton 来说默认就是排他的.

代码示例: 选择水果

  1. 在界面上创建一个 label, 和 3 个 单选按钮
    设置的文本如下图. 3 个单选按钮的 objectName 分别为 radioButton_apple ,
    radioButton_watermelon , radioButton_banana
    在这里插入图片描述
  2. 修改 widget.cpp, 编辑三个 QRadioButton 的 slot 函数.
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_radioButton_apple_clicked()
{
    //把界面上的label的内容进行更新
    ui->label->setText("你选择的水果是:苹果");
}

void Widget::on_radioButton_watermelon_clicked()
{
    //把界面上的label的内容进行更新
    ui->label->setText("你选择的水果是:西瓜");
}

void Widget::on_radioButton_banana_clicked()
{
    //把界面上的label的内容进行更新
    ui->label->setText("你选择的水果是:香蕉");
}
  1. 运行程序, 可以看到随着选择不同的单选按钮, label 中的提示文字就会随之变化.
    在这里插入图片描述
  2. 当前代码中, 如果程序启动, 则不会选择任何选项.
    可以修改代码, 让程序启动默认选中苹果
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 设置默认选中该按钮
     ui->radioButton_apple->setChecked(true);
     ui->label->setText("你选择的水果为: 苹果");
}

此时运行程序, 即可看到 水果苹果 已经被选中了.
在这里插入图片描述

  1. 当前代码中, 也可以禁用 “香蕉” 被选中.
    修改 widget.cpp 的构造函数
 // 禁⽤香蕉选项
     ui->radioButton_banana->setEnabled(false);

在这里插入图片描述

代码示例: click, press, release, toggled 的区别

  • clicked 表示一次 “点击”.
  • pressed 表示鼠标 “按下”.
  • released 表示鼠标 “释放”.
  • toggled 表示按钮状态切换.
  1. 在界面上创建四个单选按钮
    objectName 分别为 radioButton , radioButton_2 , radioButton_3 ,radioButton_4
    在这里插入图片描述
  2. 给 1 创建 clicked 槽函数, 给 2 创建 pressed 槽函数, 给 3 创建 released 槽函数,
    给 4 创建 toggled 槽函数.
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_radioButton_clicked(bool checked)
{
    qDebug() << "clicked"<< checked;
}

void Widget::on_radioButton_2_pressed()
{
    qDebug() << "pressed";
}

void Widget::on_radioButton_3_released()
{
    qDebug() << "released";
}

void Widget::on_radioButton_4_toggled(bool checked)
{
    //checked状态发生改变,就会触发这个信号
    if (checked) {
     qDebug() << "toggled checked true";
     } else {
     qDebug() << "toggled checked false";
     }
}
  1. 运行程序, 可以看到
    • clicked 是一次鼠标按下+鼠标释放触发的.
    • pressed 是鼠标按下触发的.
    • released 是鼠标释放触发的.
    • toggled 是 checked 属性改变时触发的.
    总的来说, toggled 是最适合 QRadioButton 的.
    在这里插入图片描述

代码示例: 单选框分组

  1. 在界面上创建 6 个单选框, 用来模拟买水果的界面.
    objectName 分别为 radioButton 到 radioButton_6
    在这里插入图片描述
    此时直接运行程序, 可以看到, 这六个 QRadioButton 之间都是排他的.
    我们希望每一组内部来控制排他, 但是组和组之间不能排他.
  2. 引入 QButtonGroup 进行分组.
    修改 widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QButtonGroup>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //使用QButtonGroup 对单选按钮进行分组
    QButtonGroup*group1 =new QButtonGroup(this);
    QButtonGroup*group2 =new QButtonGroup(this);
    QButtonGroup*group3 =new QButtonGroup(this);
    // 把 QRadioButton 两两⼀组, 放到三个 QButtonGroup 中
    group1->addButton(ui->radioButton);
    group1->addButton(ui->radioButton_2);

    group2->addButton(ui->radioButton_3);
    group2->addButton(ui->radioButton_4);

    group3->addButton(ui->radioButton_5);
    group3->addButton(ui->radioButton_6);
}

Widget::~Widget()
{
    delete ui;
}

再次执行程序, 可以看到可以按照正确的分组方式来完成排他了.
在这里插入图片描述

❤️结语:
本次精彩内容已圆满结束!希望各位读者在阅读过程中能够收获满满。在此,特别感谢各位读者的支持与三连赞。如果文章中存在任何问题或不足之处,欢迎在评论区留言,蜗牛必定会认真对待并加以改进,以便为大家呈现更优质的文章。你们的支持与鼓励,将是博主不断前进的最大动力。再次感谢大家的陪伴与支持!

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

倔强的大蜗牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值